Skip to content
This repository was archived by the owner on Sep 19, 2023. It is now read-only.

Commit ea14585

Browse files
author
Vicente Romero
committed
8029633: Raw inner class constructor ref should not perform diamond inference
Backport-of: 6707bfbc153de193b891c1ad3d4d8d0a6ee62307
1 parent bc946a4 commit ea14585

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
@@ -3685,7 +3685,9 @@ class ConstructorReferenceLookupHelper extends ReferenceLookupHelper {
36853685
List<Type> typeargtypes, MethodResolutionPhase maxPhase) {
36863686
super(referenceTree, names.init, site, argtypes, typeargtypes, maxPhase);
36873687
if (site.isRaw()) {
3688-
this.site = new ClassType(site.getEnclosingType(), site.tsym.type.getTypeArguments(), site.tsym, site.getMetadata());
3688+
this.site = new ClassType(site.getEnclosingType(),
3689+
!(site.tsym.isInner() && site.getEnclosingType().isRaw()) ?
3690+
site.tsym.type.getTypeArguments() : List.nil(), site.tsym, site.getMetadata());
36893691
needsInference = true;
36903692
}
36913693
}
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)