--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Mon May 16 12:03:41 2016 +0100
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Mon May 16 13:05:42 2016 +0100
@@ -2678,6 +2678,7 @@
class ExpressionLambdaReturnContext extends FunctionalReturnContext {
JCExpression expr;
+ boolean expStmtExpected;
ExpressionLambdaReturnContext(JCExpression expr, CheckContext enclosingContext) {
super(enclosingContext);
@@ -2685,10 +2686,23 @@
}
@Override
+ public void report(DiagnosticPosition pos, JCDiagnostic details) {
+ if (expStmtExpected) {
+ enclosingContext.report(pos, diags.fragment(Fragments.StatExprExpected));
+ } else {
+ super.report(pos, details);
+ }
+ }
+
+ @Override
public boolean compatible(Type found, Type req, Warner warn) {
//a void return is compatible with an expression statement lambda
- return TreeInfo.isExpressionStatement(expr) && req.hasTag(VOID) ||
- super.compatible(found, req, warn);
+ if (req.hasTag(VOID)) {
+ expStmtExpected = true;
+ return TreeInfo.isExpressionStatement(expr);
+ } else {
+ return super.compatible(found, req, warn);
+ }
}
}