--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Sep 27 09:29:52 2018 +0200
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Sep 27 10:24:12 2018 +0200
@@ -2689,12 +2689,14 @@
*/
@Override
public void visitLambda(final JCLambda that) {
+ boolean wrongContext = false;
if (pt().isErroneous() || (pt().hasTag(NONE) && pt() != Type.recoveryType)) {
if (pt().hasTag(NONE) && (env.info.enclVar == null || !env.info.enclVar.type.isErroneous())) {
//lambda only allowed in assignment or method invocation/cast context
log.error(that.pos(), Errors.UnexpectedLambda);
}
resultInfo = recoveryInfo;
+ wrongContext = true;
}
//create an environment for attribution of the lambda expression
final Env<AttrContext> localEnv = lambdaEnv(that, env);
@@ -2811,7 +2813,8 @@
checkAccessibleTypes(that, localEnv, resultInfo.checkContext.inferenceContext(), lambdaType, currentTarget);
}
- result = check(that, currentTarget, KindSelector.VAL, resultInfo);
+ result = wrongContext ? that.type = types.createErrorType(pt())
+ : check(that, currentTarget, KindSelector.VAL, resultInfo);
} catch (Types.FunctionDescriptorLookupError ex) {
JCDiagnostic cause = ex.getDiagnostic();
resultInfo.checkContext.report(that, cause);
@@ -5343,23 +5346,12 @@
}
@Override
- public void visitLambda(JCLambda that) {
- super.visitLambda(that);
- if (that.target == null) {
- that.target = syms.unknownType;
- }
- }
-
- @Override
public void visitReference(JCMemberReference that) {
super.visitReference(that);
if (that.sym == null) {
that.sym = new MethodSymbol(0, names.empty, dummyMethodType(),
syms.noSymbol);
}
- if (that.target == null) {
- that.target = syms.unknownType;
- }
}
}
// </editor-fold>