# HG changeset patch # User mcimadamore # Date 1317922771 -3600 # Node ID ca322e50ddb7a3a28d45fea188dc28cb8b4930f5 # Parent d22d3f1f29a2512842c5e0b4ee0610298cad0986 7090499: missing rawtypes warnings in anonymous inner class Summary: javac does not detect raw types inside anonymous inner classes Reviewed-by: jjg diff -r d22d3f1f29a2 -r ca322e50ddb7 langtools/src/share/classes/com/sun/tools/javac/comp/Check.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Fri Sep 23 23:30:31 2011 -0700 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Oct 06 18:39:31 2011 +0100 @@ -1169,12 +1169,17 @@ if (lint.isEnabled(LintCategory.RAW) && tree.type.tag == CLASS && !TreeInfo.isDiamond(tree) && - !env.enclClass.name.isEmpty() && //anonymous or intersection + !withinAnonConstr(env) && tree.type.isRaw()) { log.warning(LintCategory.RAW, tree.pos(), "raw.class.use", tree.type, tree.type.tsym.type); } } + + boolean withinAnonConstr(Env env) { + return env.enclClass.name.isEmpty() && + env.enclMethod != null && env.enclMethod.name == names.init; + } } /* ************************************************************************* diff -r d22d3f1f29a2 -r ca322e50ddb7 langtools/test/tools/javac/warnings/7090499/T7090499.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/7090499/T7090499.java Thu Oct 06 18:39:31 2011 +0100 @@ -0,0 +1,37 @@ +/** + * @test /nodynamiccopyright/ + * @bug 7094099 + * @summary -Xlint:rawtypes + * @compile/fail/ref=T7090499.out -XDrawDiagnostics -Xlint:rawtypes T7090499.java + */ + + +class T7090499 { + + static class B {} + + class A { + class X {} + class Z {} + } + + T7090499 t = new T7090499() { //raw warning (2) + + A.X x1;//raw warning + A.Z z1;//raw warning + + T7090499.B b1;//ok + T7090499.B b2;//raw warning + + A.X x2;//ok + A.Z z2;//ok + A.Z> z3;//raw warning (2) + + void test(Object arg1, B arg2) {//raw warning + boolean b = arg1 instanceof A;//ok + Object a = (A)arg1;//ok + A a2 = new A() {};//raw warning (2) + a2.new Z() {};//raw warning + } + }; +} diff -r d22d3f1f29a2 -r ca322e50ddb7 langtools/test/tools/javac/warnings/7090499/T7090499.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/7090499/T7090499.out Thu Oct 06 18:39:31 2011 +0100 @@ -0,0 +1,17 @@ +T7090499.java:18:5: compiler.warn.raw.class.use: T7090499, T7090499 +T7090499.java:18:22: compiler.warn.raw.class.use: T7090499, T7090499 +T7090499.java:20:10: compiler.warn.raw.class.use: T7090499.A.X, T7090499.A.X +T7090499.java:21:10: compiler.warn.raw.class.use: T7090499.A.Z, T7090499.A.Z +T7090499.java:24:17: compiler.warn.raw.class.use: T7090499.B, T7090499.B +T7090499.java:26:10: compiler.err.improperly.formed.type.inner.raw.param +T7090499.java:27:10: compiler.err.improperly.formed.type.inner.raw.param +T7090499.java:28:18: compiler.warn.raw.class.use: T7090499.B, T7090499.B +T7090499.java:28:17: compiler.err.improperly.formed.type.inner.raw.param +T7090499.java:28:11: compiler.warn.raw.class.use: T7090499.B, T7090499.B +T7090499.java:28:10: compiler.err.improperly.formed.type.inner.raw.param +T7090499.java:30:32: compiler.warn.raw.class.use: T7090499.B, T7090499.B +T7090499.java:33:13: compiler.warn.raw.class.use: T7090499.A, T7090499.A +T7090499.java:33:24: compiler.warn.raw.class.use: T7090499.A, T7090499.A +T7090499.java:34:20: compiler.warn.raw.class.use: T7090499.A.Z, T7090499.A.Z +4 errors +11 warnings