From 94865098cc2c3d73f3c21a21969e2e7bb94d01ab Mon Sep 17 00:00:00 2001 From: mcimadamore Date: Wed, 6 Mar 2013 15:33:17 +0000 Subject: [PATCH] 8009459: Wrong behavior of diamond finder with source level 7 Summary: Diamond finder doesn't take into account different inference behaviors Reviewed-by: jjg --- .../com/sun/tools/javac/comp/Attr.java | 5 ++- .../generics/diamond/6939780/T6939780.java | 39 +++++++++++++++++++ .../generics/diamond/6939780/T6939780_7.out | 4 ++ .../generics/diamond/6939780/T6939780_8.out | 7 ++++ .../javac/generics/diamond/T6939780.java | 25 ------------ .../tools/javac/generics/diamond/T6939780.out | 4 -- 6 files changed, 54 insertions(+), 30 deletions(-) create mode 100644 test/tools/javac/generics/diamond/6939780/T6939780.java create mode 100644 test/tools/javac/generics/diamond/6939780/T6939780_7.out create mode 100644 test/tools/javac/generics/diamond/6939780/T6939780_8.out delete mode 100644 test/tools/javac/generics/diamond/T6939780.java delete mode 100644 test/tools/javac/generics/diamond/T6939780.out diff --git a/src/share/classes/com/sun/tools/javac/comp/Attr.java b/src/share/classes/com/sun/tools/javac/comp/Attr.java index 37effed0..e32457d3 100644 --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java @@ -2151,8 +2151,11 @@ public class Attr extends JCTree.Visitor { ResultInfo findDiamondResult = new ResultInfo(VAL, resultInfo.checkContext.inferenceContext().free(resultInfo.pt) ? Type.noType : pt()); Type inferred = deferredAttr.attribSpeculative(tree, env, findDiamondResult).type; + Type polyPt = allowPoly ? + syms.objectType : + clazztype; if (!inferred.isErroneous() && - types.isAssignable(inferred, pt().hasTag(NONE) ? syms.objectType : pt(), types.noWarnings)) { + types.isAssignable(inferred, pt().hasTag(NONE) ? polyPt : pt(), types.noWarnings)) { String key = types.isSameType(clazztype, inferred) ? "diamond.redundant.args" : "diamond.redundant.args.1"; diff --git a/test/tools/javac/generics/diamond/6939780/T6939780.java b/test/tools/javac/generics/diamond/6939780/T6939780.java new file mode 100644 index 00000000..57bbe4a9 --- /dev/null +++ b/test/tools/javac/generics/diamond/6939780/T6939780.java @@ -0,0 +1,39 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6939780 7020044 8009459 + * + * @summary add a warning to detect diamond sites + * @author mcimadamore + * @compile/ref=T6939780_7.out -Xlint:-options -source 7 T6939780.java -XDrawDiagnostics -XDfindDiamond + * @compile/ref=T6939780_8.out T6939780.java -XDrawDiagnostics -XDfindDiamond + * + */ + +class T6939780 { + + static class Foo { + Foo() {} + Foo(X x) {} + } + + void testAssign() { + Foo f1 = new Foo(1); + Foo f2 = new Foo(); + Foo f3 = new Foo(); + Foo f4 = new Foo(1) {}; + Foo f5 = new Foo() {}; + Foo f6 = new Foo() {}; + } + + void testMethod() { + gn(new Foo(1)); + gw(new Foo()); + gw(new Foo()); + gn(new Foo(1) {}); + gw(new Foo() {}); + gw(new Foo() {}); + } + + void gw(Foo fw) { } + void gn(Foo fn) { } +} diff --git a/test/tools/javac/generics/diamond/6939780/T6939780_7.out b/test/tools/javac/generics/diamond/6939780/T6939780_7.out new file mode 100644 index 00000000..f44ff80b --- /dev/null +++ b/test/tools/javac/generics/diamond/6939780/T6939780_7.out @@ -0,0 +1,4 @@ +T6939780.java:21:28: compiler.warn.diamond.redundant.args: T6939780.Foo, T6939780.Foo +T6939780.java:22:28: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo +T6939780.java:30:19: compiler.warn.diamond.redundant.args: T6939780.Foo, T6939780.Foo +3 warnings diff --git a/test/tools/javac/generics/diamond/6939780/T6939780_8.out b/test/tools/javac/generics/diamond/6939780/T6939780_8.out new file mode 100644 index 00000000..dfbda806 --- /dev/null +++ b/test/tools/javac/generics/diamond/6939780/T6939780_8.out @@ -0,0 +1,7 @@ +T6939780.java:20:33: compiler.warn.diamond.redundant.args: T6939780.Foo, T6939780.Foo +T6939780.java:21:28: compiler.warn.diamond.redundant.args: T6939780.Foo, T6939780.Foo +T6939780.java:22:28: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo +T6939780.java:29:19: compiler.warn.diamond.redundant.args: T6939780.Foo, T6939780.Foo +T6939780.java:30:19: compiler.warn.diamond.redundant.args: T6939780.Foo, T6939780.Foo +T6939780.java:31:19: compiler.warn.diamond.redundant.args.1: T6939780.Foo, T6939780.Foo +6 warnings diff --git a/test/tools/javac/generics/diamond/T6939780.java b/test/tools/javac/generics/diamond/T6939780.java deleted file mode 100644 index 857320d0..00000000 --- a/test/tools/javac/generics/diamond/T6939780.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6939780 7020044 - * - * @summary add a warning to detect diamond sites - * @author mcimadamore - * @compile/ref=T6939780.out T6939780.java -XDrawDiagnostics -XDfindDiamond - * - */ - -class T6939780 { - - void test() { - class Foo { - Foo() {} - Foo(X x) {} - } - Foo f1 = new Foo(1); - Foo f2 = new Foo(); - Foo f3 = new Foo(); - Foo f4 = new Foo(1) {}; - Foo f5 = new Foo() {}; - Foo f6 = new Foo() {}; - } -} diff --git a/test/tools/javac/generics/diamond/T6939780.out b/test/tools/javac/generics/diamond/T6939780.out deleted file mode 100644 index 85ffab54..00000000 --- a/test/tools/javac/generics/diamond/T6939780.out +++ /dev/null @@ -1,4 +0,0 @@ -T6939780.java:18:33: compiler.warn.diamond.redundant.args: Foo, Foo -T6939780.java:19:28: compiler.warn.diamond.redundant.args: Foo, Foo -T6939780.java:20:28: compiler.warn.diamond.redundant.args.1: Foo, Foo -3 warnings -- GitLab