Mercurial > hg > openjdk > jigsaw > langtools
changeset 1757:8a78243291ef
8009459: Wrong behavior of diamond finder with source level 7
Summary: Diamond finder doesn't take into account different inference behaviors
Reviewed-by: jjg
author | mcimadamore |
---|---|
date | Wed, 06 Mar 2013 15:33:17 +0000 |
parents | d0178bd8125c |
children | c98b3e96c726 |
files | src/share/classes/com/sun/tools/javac/comp/Attr.java test/tools/javac/generics/diamond/6939780/T6939780.java test/tools/javac/generics/diamond/6939780/T6939780_7.out test/tools/javac/generics/diamond/6939780/T6939780_8.out test/tools/javac/generics/diamond/T6939780.java test/tools/javac/generics/diamond/T6939780.out |
diffstat | 6 files changed, 54 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Mar 06 15:29:30 2013 +0000 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Mar 06 15:33:17 2013 +0000 @@ -2151,8 +2151,11 @@ 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";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/diamond/6939780/T6939780.java Wed Mar 06 15:33:17 2013 +0000 @@ -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<X extends Number> { + Foo() {} + Foo(X x) {} + } + + void testAssign() { + Foo<Number> f1 = new Foo<Number>(1); + Foo<?> f2 = new Foo<Number>(); + Foo<?> f3 = new Foo<Integer>(); + Foo<Number> f4 = new Foo<Number>(1) {}; + Foo<?> f5 = new Foo<Number>() {}; + Foo<?> f6 = new Foo<Integer>() {}; + } + + void testMethod() { + gn(new Foo<Number>(1)); + gw(new Foo<Number>()); + gw(new Foo<Integer>()); + gn(new Foo<Number>(1) {}); + gw(new Foo<Number>() {}); + gw(new Foo<Integer>() {}); + } + + void gw(Foo<?> fw) { } + void gn(Foo<Number> fn) { } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/diamond/6939780/T6939780_7.out Wed Mar 06 15:33:17 2013 +0000 @@ -0,0 +1,4 @@ +T6939780.java:21:28: compiler.warn.diamond.redundant.args: T6939780.Foo<java.lang.Number>, T6939780.Foo<java.lang.Number> +T6939780.java:22:28: compiler.warn.diamond.redundant.args.1: T6939780.Foo<java.lang.Integer>, T6939780.Foo<java.lang.Number> +T6939780.java:30:19: compiler.warn.diamond.redundant.args: T6939780.Foo<java.lang.Number>, T6939780.Foo<java.lang.Number> +3 warnings
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/diamond/6939780/T6939780_8.out Wed Mar 06 15:33:17 2013 +0000 @@ -0,0 +1,7 @@ +T6939780.java:20:33: compiler.warn.diamond.redundant.args: T6939780.Foo<java.lang.Number>, T6939780.Foo<java.lang.Number> +T6939780.java:21:28: compiler.warn.diamond.redundant.args: T6939780.Foo<java.lang.Number>, T6939780.Foo<java.lang.Number> +T6939780.java:22:28: compiler.warn.diamond.redundant.args.1: T6939780.Foo<java.lang.Integer>, T6939780.Foo<java.lang.Number> +T6939780.java:29:19: compiler.warn.diamond.redundant.args: T6939780.Foo<java.lang.Number>, T6939780.Foo<java.lang.Number> +T6939780.java:30:19: compiler.warn.diamond.redundant.args: T6939780.Foo<java.lang.Number>, T6939780.Foo<java.lang.Number> +T6939780.java:31:19: compiler.warn.diamond.redundant.args.1: T6939780.Foo<java.lang.Integer>, T6939780.Foo<java.lang.Number> +6 warnings
--- a/test/tools/javac/generics/diamond/T6939780.java Wed Mar 06 15:29:30 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -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<X extends Number> { - Foo() {} - Foo(X x) {} - } - Foo<Number> f1 = new Foo<Number>(1); - Foo<?> f2 = new Foo<Number>(); - Foo<?> f3 = new Foo<Integer>(); - Foo<Number> f4 = new Foo<Number>(1) {}; - Foo<?> f5 = new Foo<Number>() {}; - Foo<?> f6 = new Foo<Integer>() {}; - } -}
--- a/test/tools/javac/generics/diamond/T6939780.out Wed Mar 06 15:29:30 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -T6939780.java:18:33: compiler.warn.diamond.redundant.args: Foo<java.lang.Number>, Foo<java.lang.Number> -T6939780.java:19:28: compiler.warn.diamond.redundant.args: Foo<java.lang.Number>, Foo<java.lang.Number> -T6939780.java:20:28: compiler.warn.diamond.redundant.args.1: Foo<java.lang.Integer>, Foo<java.lang.Number> -3 warnings