--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Thu Jun 28 17:49:13 2018 -0700
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java Fri Jun 29 10:41:10 2018 +0200
@@ -1516,6 +1516,7 @@
ParensResult analyzeParens() {
int depth = 0;
boolean type = false;
+ ParensResult defaultResult = ParensResult.PARENS;
outer: for (int lookahead = 0 ; ; lookahead++) {
TokenKind tk = S.token(lookahead).kind;
switch (tk) {
@@ -1568,7 +1569,7 @@
case LONG: case FLOAT: case DOUBLE: case BOOLEAN: case VOID:
return ParensResult.CAST;
default:
- return ParensResult.PARENS;
+ return defaultResult;
}
case UNDERSCORE:
case ASSERT:
@@ -1580,6 +1581,8 @@
} else if (peekToken(lookahead, RPAREN, ARROW)) {
// Identifier, ')' '->' -> implicit lambda
return ParensResult.IMPLICIT_LAMBDA;
+ } else if (depth == 0 && peekToken(lookahead, COMMA)) {
+ defaultResult = ParensResult.IMPLICIT_LAMBDA;
}
type = false;
break;
@@ -1665,7 +1668,7 @@
break;
default:
//this includes EOF
- return ParensResult.PARENS;
+ return defaultResult;
}
}
}
@@ -3753,10 +3756,16 @@
return defs;
} else {
pos = token.pos;
- List<JCTree> err = isVoid
- ? List.of(toP(F.at(pos).MethodDef(mods, name, type, typarams,
- List.nil(), List.nil(), null, null)))
- : null;
+ List<JCTree> err;
+ if (isVoid || typarams.nonEmpty()) {
+ JCMethodDecl m =
+ toP(F.at(pos).MethodDef(mods, name, type, typarams,
+ List.nil(), List.nil(), null, null));
+ attach(m, dc);
+ err = List.of(m);
+ } else {
+ err = List.nil();
+ }
return List.of(syntaxError(token.pos, err, Errors.Expected(LPAREN)));
}
}