RFR: 8261006: 'super' qualified method references cannot occur in a static context
Srikanth Adayapalam
sadayapalam at openjdk.java.net
Thu Jun 24 05:22:29 UTC 2021
On Sun, 6 Jun 2021 02:17:17 GMT, Vicente Romero <vromero at openjdk.org> wrote:
> Please review this PR, currently javac is accepting code like:
>
>
> import java.util.function.Supplier;
>
> public class MethodReferenceInConstructorInvocation {
> interface Bar {
> default String getString() { return ""; }
> }
>
> static class Foo implements Bar {
> public Foo() { this(Bar.super::getString); }
> public Foo(Supplier<String> sString) {}
> }
> }
>
>
> but the spec states in `15.13 Method Reference Expressions`:
>
> If a method reference expression has the form super :: [TypeArguments] Identifier
> or TypeName . super :: [TypeArguments] Identifier, it is a compile-time error if
> the expression occurs in a static context (§8.1.3).
>
> and a constructor invocation is a static context. So method references of this form, qualified by `super`, should be rejected by the compiler if they appear in a static context.
>
> TIA
Also this test case:
import java.util.function.Supplier;
public class X {
interface Feature {
default String getString() {
return "Hello World";
}
}
private static class Broken implements Feature {
private final String sString;
public Broken() {
this(Feature.super.getString());
}
public Broken(String sString) {
this.sString = sString;
}
}
}
compiles both with JDK16 and your patch.
Should we actually compile it ???
-------------
PR: https://git.openjdk.java.net/jdk/pull/4376
More information about the compiler-dev
mailing list