Wed, 15 May 2013 14:03:09 +0100
8013222: Javac issues spurious raw type warnings when lambda has implicit parameter types
Summary: Bad warnings and position for lambda inferred parameter types
Reviewed-by: jjg, vromero
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed May 15 14:02:37 2013 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed May 15 14:03:09 2013 +0100 1.3 @@ -1056,7 +1056,10 @@ 1.4 Lint prevLint = chk.setLint(lint); 1.5 1.6 // Check that the variable's declared type is well-formed. 1.7 - chk.validate(tree.vartype, env); 1.8 + boolean isImplicitLambdaParameter = env.tree.hasTag(LAMBDA) && 1.9 + ((JCLambda)env.tree).paramKind == JCLambda.ParameterKind.IMPLICIT && 1.10 + (tree.sym.flags() & PARAMETER) != 0; 1.11 + chk.validate(tree.vartype, env, !isImplicitLambdaParameter); 1.12 deferredLintHandler.flush(tree.pos()); 1.13 1.14 try { 1.15 @@ -2344,7 +2347,7 @@ 1.16 Type argType = arityMismatch ? 1.17 syms.errType : 1.18 actuals.head; 1.19 - params.head.vartype = make.Type(argType); 1.20 + params.head.vartype = make.at(params.head).Type(argType); 1.21 params.head.sym = null; 1.22 actuals = actuals.isEmpty() ? 1.23 actuals :
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/test/tools/javac/lambda/NoWarnOnImplicitParams.java Wed May 15 14:03:09 2013 +0100 2.3 @@ -0,0 +1,26 @@ 2.4 +/* 2.5 + * @test /nodynamiccopyright/ 2.6 + * @bug 8013222 2.7 + * @summary Javac issues spurious raw type warnings when lambda has implicit parameter types 2.8 + * @compile/fail/ref=NoWarnOnImplicitParams.out -Xlint:rawtypes -Werror -XDrawDiagnostics NoWarnOnImplicitParams.java 2.9 + */ 2.10 +import java.util.List; 2.11 + 2.12 +class NoWarnOnImplicitParams { 2.13 + 2.14 + public void testRawMerge(List<String> ls) { 2.15 + R12 r12_1 = l->"Foo"; 2.16 + R12 r12_2 = (List l)->"Foo"; 2.17 + } 2.18 + 2.19 + interface R1 { 2.20 + Object m(List<String> ls); 2.21 + } 2.22 + 2.23 + @SuppressWarnings("rawtypes") 2.24 + interface R2 { 2.25 + String m(List l); 2.26 + } 2.27 + 2.28 + interface R12 extends R1, R2 {} 2.29 +}
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/test/tools/javac/lambda/NoWarnOnImplicitParams.out Wed May 15 14:03:09 2013 +0100 3.3 @@ -0,0 +1,4 @@ 3.4 +NoWarnOnImplicitParams.java:13:22: compiler.warn.raw.class.use: java.util.List, java.util.List<E> 3.5 +- compiler.err.warnings.and.werror 3.6 +1 error 3.7 +1 warning