diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index efe5626d80ec1fb29c1b16fe75d12a766b740da0..4edf37472ce7fc5cfc3dd885b0b8677a83ef0ebf 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -299,11 +299,11 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // operation expression.done(POSTFIX_EXPRESSION); } else if (parseCallWithClosure()) { - while (parseCallWithClosure()); + parseCallWithClosure(); expression.done(CALL_EXPRESSION); } else if (at(LPAR)) { parseValueArgumentList(); - while (parseCallWithClosure()); + parseCallWithClosure(); expression.done(CALL_EXPRESSION); } else if (at(LT)) { // TODO: be (even) more clever @@ -357,11 +357,12 @@ public class JetExpressionParsing extends AbstractJetParsing { * expression functionLiteral? */ protected boolean parseCallWithClosure() { - if (!myBuilder.newlineBeforeCurrentToken() && at(LBRACE)) { + boolean success = false; + while (!myBuilder.newlineBeforeCurrentToken() && at(LBRACE)) { parseFunctionLiteral(); - return true; + success = true; } - return false; + return success; } /* diff --git a/idea/testData/psi/CallWithManyClosures.jet b/idea/testData/psi/CallWithManyClosures.jet index 9731b09b8f9a827717df70a8e543d735e44bf3a8..6418e2bad582038a934a59583f34d3ae3d1d7e2e 100644 --- a/idea/testData/psi/CallWithManyClosures.jet +++ b/idea/testData/psi/CallWithManyClosures.jet @@ -3,4 +3,5 @@ val a = f {} {} {} val a = f {} val a = f() {} val a = (f) {} {} {} -val a = (f)() {} {} {} \ No newline at end of file +val a = (f)() {} {} {} +val a = (f)() {} {} {} \ No newline at end of file diff --git a/idea/testData/psi/CallWithManyClosures.txt b/idea/testData/psi/CallWithManyClosures.txt index 4148265a4e9cd8e9f826dcc0760bde16b335d33e..3b25af4a6e4a44754e9a5d6ed1acd10a2226268c 100644 --- a/idea/testData/psi/CallWithManyClosures.txt +++ b/idea/testData/psi/CallWithManyClosures.txt @@ -159,6 +159,49 @@ JetFile: CallWithManyClosures.jet PsiElement(RBRACE)('}') PsiWhiteSpace(' ') + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + BODY + + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + CALL_EXPRESSION + PARENTHESIZED + PsiElement(LPAR)('(') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('f') + PsiElement(RPAR)(')') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('A') + PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + BODY + + PsiElement(RBRACE)('}') + PsiWhiteSpace(' ') + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + BODY + + PsiElement(RBRACE)('}') + PsiWhiteSpace(' ') FUNCTION_LITERAL PsiElement(LBRACE)('{') BODY