7090499: missing rawtypes warnings in anonymous inner class

Thu, 06 Oct 2011 18:39:31 +0100

author
mcimadamore
date
Thu, 06 Oct 2011 18:39:31 +0100
changeset 1103
47147081d5b4
parent 1098
0c6f79fc8441
child 1104
5010ffc61eda
child 1108
b5d0b8effc85

7090499: missing rawtypes warnings in anonymous inner class
Summary: javac does not detect raw types inside anonymous inner classes
Reviewed-by: jjg

src/share/classes/com/sun/tools/javac/comp/Check.java file | annotate | diff | comparison | revisions
test/tools/javac/warnings/7090499/T7090499.java file | annotate | diff | comparison | revisions
test/tools/javac/warnings/7090499/T7090499.out file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Fri Sep 23 23:30:31 2011 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Thu Oct 06 18:39:31 2011 +0100
     1.3 @@ -1169,12 +1169,17 @@
     1.4              if (lint.isEnabled(LintCategory.RAW) &&
     1.5                  tree.type.tag == CLASS &&
     1.6                  !TreeInfo.isDiamond(tree) &&
     1.7 -                !env.enclClass.name.isEmpty() &&  //anonymous or intersection
     1.8 +                !withinAnonConstr(env) &&
     1.9                  tree.type.isRaw()) {
    1.10                  log.warning(LintCategory.RAW,
    1.11                          tree.pos(), "raw.class.use", tree.type, tree.type.tsym.type);
    1.12              }
    1.13          }
    1.14 +
    1.15 +        boolean withinAnonConstr(Env<AttrContext> env) {
    1.16 +            return env.enclClass.name.isEmpty() &&
    1.17 +                    env.enclMethod != null && env.enclMethod.name == names.init;
    1.18 +        }
    1.19      }
    1.20  
    1.21  /* *************************************************************************
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/test/tools/javac/warnings/7090499/T7090499.java	Thu Oct 06 18:39:31 2011 +0100
     2.3 @@ -0,0 +1,37 @@
     2.4 +/**
     2.5 + * @test /nodynamiccopyright/
     2.6 + * @bug 7094099
     2.7 + * @summary -Xlint:rawtypes
     2.8 + * @compile/fail/ref=T7090499.out -XDrawDiagnostics -Xlint:rawtypes T7090499.java
     2.9 + */
    2.10 +
    2.11 +
    2.12 +class T7090499<E> {
    2.13 +
    2.14 +    static class B<X> {}
    2.15 +
    2.16 +    class A<X> {
    2.17 +        class X {}
    2.18 +        class Z<Y> {}
    2.19 +    }
    2.20 +
    2.21 +    T7090499 t = new T7090499() { //raw warning (2)
    2.22 +
    2.23 +        A.X x1;//raw warning
    2.24 +        A.Z z1;//raw warning
    2.25 +
    2.26 +        T7090499.B<Integer> b1;//ok
    2.27 +        T7090499.B b2;//raw warning
    2.28 +
    2.29 +        A<String>.X x2;//ok
    2.30 +        A<String>.Z<Integer> z2;//ok
    2.31 +        A<B>.Z<A<B>> z3;//raw warning (2)
    2.32 +
    2.33 +        void test(Object arg1, B arg2) {//raw warning
    2.34 +            boolean b = arg1 instanceof A;//ok
    2.35 +            Object a = (A)arg1;//ok
    2.36 +            A a2 = new A() {};//raw warning (2)
    2.37 +            a2.new Z() {};//raw warning
    2.38 +        }
    2.39 +    };
    2.40 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/test/tools/javac/warnings/7090499/T7090499.out	Thu Oct 06 18:39:31 2011 +0100
     3.3 @@ -0,0 +1,17 @@
     3.4 +T7090499.java:18:5: compiler.warn.raw.class.use: T7090499, T7090499<E>
     3.5 +T7090499.java:18:22: compiler.warn.raw.class.use: T7090499, T7090499<E>
     3.6 +T7090499.java:20:10: compiler.warn.raw.class.use: T7090499.A.X, T7090499<E>.A<X>.X
     3.7 +T7090499.java:21:10: compiler.warn.raw.class.use: T7090499.A.Z, T7090499<E>.A<X>.Z<Y>
     3.8 +T7090499.java:24:17: compiler.warn.raw.class.use: T7090499.B, T7090499.B<X>
     3.9 +T7090499.java:26:10: compiler.err.improperly.formed.type.inner.raw.param
    3.10 +T7090499.java:27:10: compiler.err.improperly.formed.type.inner.raw.param
    3.11 +T7090499.java:28:18: compiler.warn.raw.class.use: T7090499.B, T7090499.B<X>
    3.12 +T7090499.java:28:17: compiler.err.improperly.formed.type.inner.raw.param
    3.13 +T7090499.java:28:11: compiler.warn.raw.class.use: T7090499.B, T7090499.B<X>
    3.14 +T7090499.java:28:10: compiler.err.improperly.formed.type.inner.raw.param
    3.15 +T7090499.java:30:32: compiler.warn.raw.class.use: T7090499.B, T7090499.B<X>
    3.16 +T7090499.java:33:13: compiler.warn.raw.class.use: T7090499.A, T7090499<E>.A<X>
    3.17 +T7090499.java:33:24: compiler.warn.raw.class.use: T7090499.A, T7090499<E>.A<X>
    3.18 +T7090499.java:34:20: compiler.warn.raw.class.use: T7090499.A.Z, T7090499<E>.A<X>.Z<Y>
    3.19 +4 errors
    3.20 +11 warnings

mercurial