8013846: javac fails to reject semantically equivalent generic method declarations

Thu, 12 Sep 2013 14:52:28 -0400

author
emc
date
Thu, 12 Sep 2013 14:52:28 -0400
changeset 2024
5d2d484a1216
parent 2023
cf37c3775397
child 2025
3ae1814f7c59

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

src/share/classes/com/sun/tools/javac/comp/Check.java file | annotate | diff | comparison | revisions
test/tools/javac/generics/neg/OrderedIntersections.java file | annotate | diff | comparison | revisions
test/tools/javac/generics/neg/OrderedIntersections.out file | annotate | diff | comparison | revisions
     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

mercurial