Don't process val and var keywords in lambda parameters forever (KT-5170)

#KT-5170 Fixed
This commit is contained in:
Nikolay Krasko
2014-06-04 17:28:27 +04:00
parent 8f6c2b96f3
commit 432eabdbcb
2 changed files with 11 additions and 1 deletions
@@ -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;
}
}
}
@@ -0,0 +1,6 @@
fun test() {
val list = listOf(1, 2)
list.filter {
(val a, val b)=some.test
}
}