Better parsing of block after missing "->" after "else" in when

This commit is contained in:
Valentin Kipyatkov
2015-05-15 16:31:34 +03:00
parent 56c3f7b7db
commit c94dc6d5f7
2 changed files with 18 additions and 22 deletions
@@ -137,7 +137,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
TokenSet.create(EOL_OR_SEMICOLON));
/*package*/ static final TokenSet EXPRESSION_FOLLOW = TokenSet.create(
SEMICOLON, ARROW, COMMA, LBRACE, RBRACE, RPAR, RBRACKET
SEMICOLON, ARROW, COMMA, RBRACE, RPAR, RBRACKET
);
@SuppressWarnings({"UnusedDeclaration"})
@@ -887,8 +887,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // ELSE_KEYWORD
if (!at(ARROW)) {
errorUntil("Expecting '->'", TokenSet.create(ARROW, LBRACE,
RBRACE, EOL_OR_SEMICOLON));
errorUntil("Expecting '->'", TokenSet.create(ARROW, LBRACE, RBRACE, EOL_OR_SEMICOLON));
}
if (at(ARROW)) {
@@ -901,7 +900,10 @@ public class JetExpressionParsing extends AbstractJetParsing {
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 '->'");
}
}
@@ -43,24 +43,18 @@ JetFile: IncompleteWhenElse.kt
PsiElement(else)('else')
PsiErrorElement:Expecting '->'
<empty list>
PsiWhiteSpace(' ')
WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
PsiWhiteSpace(' ')
BLOCK
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('doIt')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(RBRACE)('}')
PsiErrorElement:Expecting '->'
<empty list>
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace(' ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('doIt')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')