RFR: 8029633: Raw inner class constructor ref should not perform diamond inference

Vicente Romero vromero at openjdk.org
Fri Aug 5 20:31:35 UTC 2022


This PR is synchronizing the compiler with the spec, in particular with this portion of section `15.13.1 Compile-Time Declaration of a Method Reference`:


– If the method reference expression has the form ClassType ::
  [TypeArguments] new , then the potentially applicable methods are a set of
  notional methods corresponding to the constructors of ClassType.
  If ClassType is a raw type, but is not a non- static member type of a raw type,
  the candidate notional member methods are those specified in §15.9.3 for a
  class instance creation expression that uses <> to elide the type arguments to a
  class. Otherwise, the candidate notional member methods are the constructors
  of ClassType, treated as if they were methods with return type ClassType.

so javac should treat the code below as a raw constructor invocation:


class Outer<T> {
    class Inner<U> {}

    Supplier<Outer<T>.Inner<String>> s = Outer.Inner::new;
}

currently javac is rejecting this code

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

Commit messages:
 - 8029633: Raw inner class constructor ref should not perform diamond inference

Changes: https://git.openjdk.org/jdk/pull/9784/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9784&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8029633
  Stats: 25 lines in 3 files changed: 24 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/9784.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9784/head:pull/9784

PR: https://git.openjdk.org/jdk/pull/9784


More information about the compiler-dev mailing list