Skip lazy parsable lambdas without actually parsing them
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -38,3 +38,6 @@ fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// No '}'
|
||||
val test = {
|
||||
+18
-1
@@ -309,4 +309,21 @@ JetFile: lambdaRecovery.kt
|
||||
<empty list>
|
||||
PsiElement(RBRACE)('}')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(RBRACE)('}')
|
||||
PsiElement(RBRACE)('}')
|
||||
PsiWhiteSpace('\n\n')
|
||||
PROPERTY
|
||||
PsiComment(EOL_COMMENT)('// No '}'')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(val)('val')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(IDENTIFIER)('test')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(EQ)('=')
|
||||
PsiWhiteSpace(' ')
|
||||
LAMBDA_EXPRESSION
|
||||
FUNCTION_LITERAL
|
||||
PsiElement(LBRACE)('{')
|
||||
BLOCK
|
||||
<empty list>
|
||||
PsiErrorElement:Expecting '}'
|
||||
<empty list>
|
||||
Reference in New Issue
Block a user