Skip lazy parsable lambdas without actually parsing them

This commit is contained in:
Nikolay Krasko
2016-09-09 17:54:43 +03:00
parent c91f77f2a4
commit 131e77927a
3 changed files with 49 additions and 9 deletions
@@ -1080,20 +1080,40 @@ public class KotlinExpressionParsing extends AbstractKotlinParsing {
return;
}
PsiBuilder.Marker body = mark();
parseStatements();
body.done(BLOCK);
expect(RBRACE, "Expecting '}'");
myBuilder.restoreNewlinesState();
literal.done(FUNCTION_LITERAL);
if (collapse) {
advanceLambdaBlock();
literal.done(FUNCTION_LITERAL);
literalExpression.collapse(LAMBDA_EXPRESSION);
}
else {
PsiBuilder.Marker body = mark();
parseStatements();
body.done(BLOCK);
expect(RBRACE, "Expecting '}'");
literal.done(FUNCTION_LITERAL);
literalExpression.done(LAMBDA_EXPRESSION);
}
myBuilder.restoreNewlinesState();
}
private void advanceLambdaBlock() {
int braceCount = 1;
while (!eof()) {
if (_at(LBRACE)) {
braceCount++;
}
else if (_at(RBRACE)) {
braceCount--;
}
advance();
if (braceCount == 0) {
break;
}
}
}
private boolean rollbackOrDropAt(PsiBuilder.Marker rollbackMarker, IElementType dropAt) {