--- old/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java 2017-11-28 16:55:10.141408676 +0530 +++ new/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java 2017-11-28 16:55:10.081408675 +0530 @@ -2009,7 +2009,7 @@ Assert.error(skind.name()); throw new AssertionError(); } - if (ret != sym) { + if (ret != sym && skind.propagateAnnotations()) { ret.setDeclarationAttributes(sym.getRawAttributes()); ret.setTypeAttributes(sym.getRawTypeAttributes()); } @@ -2045,7 +2045,6 @@ if (m.containsKey(lambdaIdent.sym)) { Symbol tSym = m.get(lambdaIdent.sym); JCTree t = make.Ident(tSym).setType(lambdaIdent.type); - tSym.setTypeAttributes(lambdaIdent.sym.getRawTypeAttributes()); return t; } break; @@ -2054,7 +2053,6 @@ // Transform outer instance variable references anchoring them to the captured synthetic. Symbol tSym = m.get(lambdaIdent.sym.owner); JCExpression t = make.Ident(tSym).setType(lambdaIdent.sym.owner.type); - tSym.setTypeAttributes(lambdaIdent.sym.owner.getRawTypeAttributes()); t = make.Select(t, lambdaIdent.name); t.setType(lambdaIdent.type); TreeInfo.setSymbol(t, lambdaIdent.sym); @@ -2075,7 +2073,6 @@ if (m.containsKey(fieldAccess.sym.owner)) { Symbol tSym = m.get(fieldAccess.sym.owner); JCExpression t = make.Ident(tSym).setType(fieldAccess.sym.owner.type); - tSym.setTypeAttributes(fieldAccess.sym.owner.getRawTypeAttributes()); return t; } return null; @@ -2272,6 +2269,17 @@ CAPTURED_THIS, // class symbols to translated synthetic parameters (for captured member access) CAPTURED_OUTER_THIS, // used when `this' capture is illegal, but outer this capture is legit (JDK-8129740) TYPE_VAR; // original to translated lambda type variables + + boolean propagateAnnotations() { + switch (this) { + case CAPTURED_VAR: + case CAPTURED_THIS: + case CAPTURED_OUTER_THIS: + return false; + default: + return true; + } + } } /**