Skip to content

Commit 8ce7bb4

Browse files
committed
8029633: Raw inner class constructor ref should not perform diamond inference
Backport-of: 6707bfbc153de193b891c1ad3d4d8d0a6ee62307
1 parent cfedd3f commit 8ce7bb4

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3656,7 +3656,9 @@ class ConstructorReferenceLookupHelper extends ReferenceLookupHelper {
36563656
List<Type> typeargtypes, MethodResolutionPhase maxPhase) {
36573657
super(referenceTree, names.init, site, argtypes, typeargtypes, maxPhase);
36583658
if (site.isRaw()) {
3659-
this.site = new ClassType(site.getEnclosingType(), site.tsym.type.getTypeArguments(), site.tsym, site.getMetadata());
3659+
this.site = new ClassType(site.getEnclosingType(),
3660+
!(site.tsym.isInner() && site.getEnclosingType().isRaw()) ?
3661+
site.tsym.type.getTypeArguments() : List.nil(), site.tsym, site.getMetadata());
36603662
needsInference = true;
36613663
}
36623664
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* @test /nodynamiccopyright/
3+
* @bug 8029633
4+
* @summary Raw inner class constructor ref should not perform diamond inference
5+
* @compile/fail/ref=MethodRefNewInnerRawTest.out -Werror -Xlint:unchecked -XDrawDiagnostics MethodRefNewInnerRawTest.java
6+
*/
7+
8+
import java.util.function.*;
9+
10+
class MethodRefNewInnerRawTest<T> {
11+
class Inner1 {}
12+
class Inner2<U> {}
13+
14+
Supplier<MethodRefNewInnerRawTest.Inner1> s1 = MethodRefNewInnerRawTest.Inner1::new;
15+
Supplier<MethodRefNewInnerRawTest.Inner2> s2 = MethodRefNewInnerRawTest.Inner2::new;
16+
Supplier<MethodRefNewInnerRawTest<T>.Inner1> s3 = MethodRefNewInnerRawTest.Inner1::new;
17+
Supplier<MethodRefNewInnerRawTest<T>.Inner2<String>> s4 = MethodRefNewInnerRawTest.Inner2::new;
18+
19+
static class Outer {
20+
class Inner3<U> {}
21+
22+
Supplier<Outer.Inner3<String>> s5 = Outer.Inner3::new;
23+
}
24+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
MethodRefNewInnerRawTest.java:16:55: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), MethodRefNewInnerRawTest.Inner1, MethodRefNewInnerRawTest<T>.Inner1
2+
MethodRefNewInnerRawTest.java:17:63: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), MethodRefNewInnerRawTest.Inner2, MethodRefNewInnerRawTest<T>.Inner2<java.lang.String>
3+
- compiler.err.warnings.and.werror
4+
1 error
5+
2 warnings

0 commit comments

Comments
 (0)