Better parsing of block after missing "->" after "else" in when
This commit is contained in:
@@ -137,7 +137,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
TokenSet.create(EOL_OR_SEMICOLON));
|
TokenSet.create(EOL_OR_SEMICOLON));
|
||||||
|
|
||||||
/*package*/ static final TokenSet EXPRESSION_FOLLOW = TokenSet.create(
|
/*package*/ static final TokenSet EXPRESSION_FOLLOW = TokenSet.create(
|
||||||
SEMICOLON, ARROW, COMMA, LBRACE, RBRACE, RPAR, RBRACKET
|
SEMICOLON, ARROW, COMMA, RBRACE, RPAR, RBRACKET
|
||||||
);
|
);
|
||||||
|
|
||||||
@SuppressWarnings({"UnusedDeclaration"})
|
@SuppressWarnings({"UnusedDeclaration"})
|
||||||
@@ -887,8 +887,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
advance(); // ELSE_KEYWORD
|
advance(); // ELSE_KEYWORD
|
||||||
|
|
||||||
if (!at(ARROW)) {
|
if (!at(ARROW)) {
|
||||||
errorUntil("Expecting '->'", TokenSet.create(ARROW, LBRACE,
|
errorUntil("Expecting '->'", TokenSet.create(ARROW, LBRACE, RBRACE, EOL_OR_SEMICOLON));
|
||||||
RBRACE, EOL_OR_SEMICOLON));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (at(ARROW)) {
|
if (at(ARROW)) {
|
||||||
@@ -901,7 +900,10 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
parseExpressionPreferringBlocks();
|
parseExpressionPreferringBlocks();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!atSet(WHEN_CONDITION_RECOVERY_SET) && !at(LBRACE)) {
|
else if (at(LBRACE)) { // no arrow, probably it's simply missing
|
||||||
|
parseExpressionPreferringBlocks();
|
||||||
|
}
|
||||||
|
else if (!atSet(WHEN_CONDITION_RECOVERY_SET)) {
|
||||||
errorAndAdvance("Expecting '->'");
|
errorAndAdvance("Expecting '->'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,24 +43,18 @@ JetFile: IncompleteWhenElse.kt
|
|||||||
PsiElement(else)('else')
|
PsiElement(else)('else')
|
||||||
PsiErrorElement:Expecting '->'
|
PsiErrorElement:Expecting '->'
|
||||||
<empty list>
|
<empty list>
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
WHEN_ENTRY
|
BLOCK
|
||||||
WHEN_CONDITION_WITH_EXPRESSION
|
PsiElement(LBRACE)('{')
|
||||||
FUNCTION_LITERAL_EXPRESSION
|
PsiWhiteSpace(' ')
|
||||||
FUNCTION_LITERAL
|
CALL_EXPRESSION
|
||||||
PsiElement(LBRACE)('{')
|
REFERENCE_EXPRESSION
|
||||||
PsiWhiteSpace(' ')
|
PsiElement(IDENTIFIER)('doIt')
|
||||||
BLOCK
|
VALUE_ARGUMENT_LIST
|
||||||
CALL_EXPRESSION
|
PsiElement(LPAR)('(')
|
||||||
REFERENCE_EXPRESSION
|
PsiElement(RPAR)(')')
|
||||||
PsiElement(IDENTIFIER)('doIt')
|
PsiWhiteSpace(' ')
|
||||||
VALUE_ARGUMENT_LIST
|
PsiElement(RBRACE)('}')
|
||||||
PsiElement(LPAR)('(')
|
|
||||||
PsiElement(RPAR)(')')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiErrorElement:Expecting '->'
|
|
||||||
<empty list>
|
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace('\n ')
|
||||||
PsiElement(RBRACE)('}')
|
PsiElement(RBRACE)('}')
|
||||||
PsiWhiteSpace('\n\n ')
|
PsiWhiteSpace('\n\n ')
|
||||||
|
|||||||
Reference in New Issue
Block a user