RFR: 8278078: Cannot reference super before supertype constructor has been called [v3]

Maurizio Cimadamore mcimadamore at openjdk.java.net
Thu Dec 2 12:03:27 UTC 2021


On Thu, 2 Dec 2021 08:32:14 GMT, Adam Sotona <asotona at openjdk.org> wrote:

>> Pull request #4376 (with fix of 8261006: 'super' qualified method references cannot occur in a static context) regressed compilation of all inner classes using <enclosing class>.super pattern in their constructor argument to fail with: 
>>  error: cannot reference super before supertype constructor has been called 
>> 
>> For example following source fragment cannot be compiled since that: 
>> 
>>     class EnclClass { 
>>         class InnerClass extends Exception { 
>>             InnerClass() { 
>>                 super(EnclClass.super.toString()); 
>>             } 
>>         } 
>>     } 
>> 
>> 
>> This patch keeps throwing "cannot reference super" error for calls of <interface>.super and permits calls of <enclosing class>.super
>> 
>> Plus it adds a new test.
>> 
>> Thanks,
>> Adam
>
> Adam Sotona has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fixed handling of <self>.super
>   extended set of compilation validation tests
>   added set of negative tests that should result in compilation error

test/langtools/tools/javac/8278078/InvalidThisAndSuperInConstructorArgTest.java line 22:

> 20:             super(InnerClass.super.toString());
> 21:         }
> 22:         InnerClass(int i) {

Should we write a similar test where, instead of InnerClass.super.toString(), we pass InnerClass.super::toString (e.g. a method ref) ? I think it would be useful that all these would fail, even in method reference mode.

test/langtools/tools/javac/8278078/ValidThisAndSuperInConstructorArgTest.java line 2:

> 1: /**
> 2:  * @test /nodynamiccopyright/

This is a positive test, so we typically add copyright in those.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6642


More information about the compiler-dev mailing list