RFR: 8261006: 'super' qualified method references cannot occur in a static context

Vicente Romero vromero at openjdk.java.net
Sun Jun 6 02:37:46 UTC 2021


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

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

Commit messages:
 - 8261006: fail to parse broken interface::method in lambda

Changes: https://git.openjdk.java.net/jdk/pull/4376/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4376&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8261006
  Stats: 78 lines in 5 files changed: 78 ins; 0 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4376.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4376/head:pull/4376

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


More information about the compiler-dev mailing list