# HG changeset patch # User mcimadamore # Date 1368622989 -3600 # Node ID 78717f2d00e84dc6125d067560e5ac5ac0692c08 # Parent 33d1937af1a3d24a516823ab475e7c11788a43d8 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 diff -r 33d1937af1a3 -r 78717f2d00e8 src/share/classes/com/sun/tools/javac/comp/Attr.java --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed May 15 14:02:37 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed May 15 14:03:09 2013 +0100 @@ -1056,7 +1056,10 @@ Lint prevLint = chk.setLint(lint); // Check that the variable's declared type is well-formed. - chk.validate(tree.vartype, env); + boolean isImplicitLambdaParameter = env.tree.hasTag(LAMBDA) && + ((JCLambda)env.tree).paramKind == JCLambda.ParameterKind.IMPLICIT && + (tree.sym.flags() & PARAMETER) != 0; + chk.validate(tree.vartype, env, !isImplicitLambdaParameter); deferredLintHandler.flush(tree.pos()); try { @@ -2344,7 +2347,7 @@ Type argType = arityMismatch ? syms.errType : actuals.head; - params.head.vartype = make.Type(argType); + params.head.vartype = make.at(params.head).Type(argType); params.head.sym = null; actuals = actuals.isEmpty() ? actuals : diff -r 33d1937af1a3 -r 78717f2d00e8 test/tools/javac/lambda/NoWarnOnImplicitParams.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/lambda/NoWarnOnImplicitParams.java Wed May 15 14:03:09 2013 +0100 @@ -0,0 +1,26 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8013222 + * @summary Javac issues spurious raw type warnings when lambda has implicit parameter types + * @compile/fail/ref=NoWarnOnImplicitParams.out -Xlint:rawtypes -Werror -XDrawDiagnostics NoWarnOnImplicitParams.java + */ +import java.util.List; + +class NoWarnOnImplicitParams { + + public void testRawMerge(List ls) { + R12 r12_1 = l->"Foo"; + R12 r12_2 = (List l)->"Foo"; + } + + interface R1 { + Object m(List ls); + } + + @SuppressWarnings("rawtypes") + interface R2 { + String m(List l); + } + + interface R12 extends R1, R2 {} +} diff -r 33d1937af1a3 -r 78717f2d00e8 test/tools/javac/lambda/NoWarnOnImplicitParams.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/lambda/NoWarnOnImplicitParams.out Wed May 15 14:03:09 2013 +0100 @@ -0,0 +1,4 @@ +NoWarnOnImplicitParams.java:13:22: compiler.warn.raw.class.use: java.util.List, java.util.List +- compiler.err.warnings.and.werror +1 error +1 warning