RFR: 8029633: Raw inner class constructor ref should not perform diamond inference [v3]
Jan Lahoda
jlahoda at openjdk.org
Tue Oct 18 21:02:11 UTC 2022
On Tue, 18 Oct 2022 19:17:18 GMT, Vicente Romero <vromero at openjdk.org> wrote:
>> 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
>>
>> TIA
>>
>> PS. Please review the related CSR too
>
> Vicente Romero has updated the pull request incrementally with one additional commit since the last revision:
>
> addressing review comments
Looks good to me, thanks!
-------------
Marked as reviewed by jlahoda (Reviewer).
PR: https://git.openjdk.org/jdk/pull/9784
More information about the compiler-dev
mailing list