diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 61bb2abfb4e..f2b009b8d62 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -52,6 +52,8 @@ public class JetParsing extends AbstractJetParsing { private static final TokenSet RECEIVER_TYPE_TERMINATORS = TokenSet.create(DOT, SAFE_ACCESS); private static final TokenSet VALUE_PARAMETER_FIRST = TokenSet.orSet(TokenSet.create(IDENTIFIER, LBRACKET, VAL_KEYWORD, VAR_KEYWORD), MODIFIER_KEYWORDS); + private static final TokenSet LAMBDA_VALUE_PARAMETER_FIRST = + TokenSet.orSet(TokenSet.create(IDENTIFIER, LBRACKET), MODIFIER_KEYWORDS); static JetParsing createForTopLevel(SemanticWhitespaceAwarePsiBuilder builder) { JetParsing jetParsing = new JetParsing(builder); @@ -1728,6 +1730,7 @@ public class JetParsing extends AbstractJetParsing { error("Expecting a parameter declaration"); break; } + if (isFunctionTypeContents) { if (!tryParseValueParameter()) { PsiBuilder.Marker valueParameter = mark(); @@ -1739,12 +1742,13 @@ public class JetParsing extends AbstractJetParsing { else { parseValueParameter(); } + if (at(COMMA)) { advance(); // COMMA } else { if (!at(RPAR)) error("Expecting comma or ')'"); - if (!atSet(VALUE_PARAMETER_FIRST)) break; + if (!atSet(isFunctionTypeContents ? LAMBDA_VALUE_PARAMETER_FIRST : VALUE_PARAMETER_FIRST)) break; } } } diff --git a/compiler/testData/psi/recovery/ValInLambdaParametersDeclaration.temp b/compiler/testData/psi/recovery/ValInLambdaParametersDeclaration.temp new file mode 100644 index 00000000000..49052afc3da --- /dev/null +++ b/compiler/testData/psi/recovery/ValInLambdaParametersDeclaration.temp @@ -0,0 +1,6 @@ +fun test() { + val list = listOf(1, 2) + list.filter { + (val a, val b)=some.test + } +} \ No newline at end of file