diff --git a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java index 3ff1a189452..76407e8783b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java @@ -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 '->'"); } } diff --git a/compiler/testData/psi/recovery/IncompleteWhenElse.txt b/compiler/testData/psi/recovery/IncompleteWhenElse.txt index 98504513314..e0fb02f5490 100644 --- a/compiler/testData/psi/recovery/IncompleteWhenElse.txt +++ b/compiler/testData/psi/recovery/IncompleteWhenElse.txt @@ -43,24 +43,18 @@ JetFile: IncompleteWhenElse.kt PsiElement(else)('else') PsiErrorElement:Expecting '->' - 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 '->' - + 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 ')