Thu, 12 Sep 2013 14:52:28 -0400
8013846: javac fails to reject semantically equivalent generic method declarations
Summary: Cause javac to consider intersection types with the same elements to be equal regardless of order.
Reviewed-by: jjg, vromero
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Sep 11 14:50:11 2013 -0700 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Sep 12 14:52:28 2013 -0400 1.3 @@ -3340,7 +3340,9 @@ 1.4 (e.sym.flags() & CLASH) == 0 && 1.5 sym.kind == e.sym.kind && 1.6 sym.name != names.error && 1.7 - (sym.kind != MTH || types.hasSameArgs(types.erasure(sym.type), types.erasure(e.sym.type)))) { 1.8 + (sym.kind != MTH || 1.9 + types.hasSameArgs(sym.type, e.sym.type) || 1.10 + types.hasSameArgs(types.erasure(sym.type), types.erasure(e.sym.type)))) { 1.11 if ((sym.flags() & VARARGS) != (e.sym.flags() & VARARGS)) { 1.12 varargsDuplicateError(pos, sym, e.sym); 1.13 return true;
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/test/tools/javac/generics/neg/OrderedIntersections.java Thu Sep 12 14:52:28 2013 -0400 2.3 @@ -0,0 +1,21 @@ 2.4 +/* 2.5 + * @test /nodynamiccopyright/ 2.6 + * @bug 6962494 2.7 + * @summary The order of elements of intersection types shouldn't matter 2.8 + * @compile/fail/ref=OrderedIntersections.out -XDrawDiagnostics OrderedIntersections.java 2.9 + */ 2.10 + 2.11 +interface i1 {} 2.12 +interface i2 {} 2.13 + 2.14 +public class OrderedIntersections { 2.15 + static <t1 extends i1 & i2> Object smf(t1 x) { 2.16 + System.out.println( " smf1 " ); 2.17 + return null; 2.18 + } 2.19 + 2.20 + static <t2 extends i2 & i1> Object smf(t2 x) { 2.21 + System.out.println( " smf2 " ); 2.22 + return null; 2.23 + } 2.24 +}
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/test/tools/javac/generics/neg/OrderedIntersections.out Thu Sep 12 14:52:28 2013 -0400 3.3 @@ -0,0 +1,2 @@ 3.4 +OrderedIntersections.java:17:40: compiler.err.already.defined: kindname.method, <t1>smf(t1), kindname.class, OrderedIntersections 3.5 +1 error