diff --git a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java index 2dfd6e1c101..a13a8b833eb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetExpressionParsing.java @@ -555,15 +555,10 @@ public class JetExpressionParsing extends AbstractJetParsing { return lookahead(2) == LBRACE; } - if (at(AT) && myBuilder.rawLookup(1) == IDENTIFIER) { - return lookahead(2) == LBRACE; - } - return at(AT) && lookahead(1) == LBRACE; } private boolean isAtLabelDefinitionOrMissingIdentifier() { - if (at(AT) && myBuilder.rawLookup(1) == IDENTIFIER) return true; return (at(IDENTIFIER) && myBuilder.rawLookup(1) == AT) || at(AT); } @@ -1665,22 +1660,8 @@ public class JetExpressionParsing extends AbstractJetParsing { */ private void parseLabelDefinition() { if (at(AT)) { - // recovery for old label syntax or empty label identifier - if (myBuilder.rawLookup(1) == IDENTIFIER) { - PsiBuilder.Marker labelWrap = mark(); - PsiBuilder.Marker mark = mark(); - - advance(); // AT - advance(); // IDENTIFIER - - mark.done(LABEL); - - labelWrap.done(LABEL_QUALIFIER); - return; - } - else { - errorAndAdvance("Label must be named"); // AT - } + // recovery for empty label identifier + errorAndAdvance("Label must be named"); // AT return; } diff --git a/compiler/testData/psi/newLabels/oldSyntaxExpressions.txt b/compiler/testData/psi/newLabels/oldSyntaxExpressions.txt index 2f7375e0431..9a5c9510208 100644 --- a/compiler/testData/psi/newLabels/oldSyntaxExpressions.txt +++ b/compiler/testData/psi/newLabels/oldSyntaxExpressions.txt @@ -13,63 +13,61 @@ JetFile: oldSyntaxExpressions.kt PsiElement(LBRACE)('{') PsiWhiteSpace('\n ') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('loop1') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('loop1') + PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) + + PsiWhiteSpace(' ') + FOR + PsiElement(for)('for') PsiWhiteSpace(' ') - FOR - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(LPAR)('(') - VALUE_PARAMETER - PsiElement(IDENTIFIER)('i') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - LOOP_RANGE - BINARY_EXPRESSION - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - OPERATION_REFERENCE - PsiElement(RANGE)('..') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('100') - PsiElement(RPAR)(')') - PsiWhiteSpace(' ') - BODY - BLOCK - PsiElement(LBRACE)('{') - PsiWhiteSpace(' ') - PsiElement(RBRACE)('}') + PsiElement(LPAR)('(') + VALUE_PARAMETER + PsiElement(IDENTIFIER)('i') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + LOOP_RANGE + BINARY_EXPRESSION + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + OPERATION_REFERENCE + PsiElement(RANGE)('..') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('100') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + BODY + BLOCK + PsiElement(LBRACE)('{') + PsiWhiteSpace(' ') + PsiElement(RBRACE)('}') PsiWhiteSpace('\n\n ') DOT_QUALIFIED_EXPRESSION REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('x2') PsiElement(DOT)('.') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('filter') - PsiWhiteSpace(' ') - FUNCTION_LITERAL_ARGUMENT - LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('f') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('filter') + PsiWhiteSpace(' ') + PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) + PsiElement(AT)('@') + PsiElement(IDENTIFIER)('f') + PsiWhiteSpace(' ') + FUNCTION_LITERAL_EXPRESSION + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + BLOCK + RETURN + PsiElement(return)('return') PsiWhiteSpace(' ') - FUNCTION_LITERAL_EXPRESSION - FUNCTION_LITERAL - PsiElement(LBRACE)('{') - PsiWhiteSpace('\n ') - BLOCK - RETURN - PsiElement(return)('return') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('2') - PsiWhiteSpace('\n ') - PsiElement(RBRACE)('}') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('2') + PsiWhiteSpace('\n ') + PsiElement(RBRACE)('}') PsiWhiteSpace('\n\n ') RETURN PsiElement(return)('return') @@ -77,14 +75,16 @@ JetFile: oldSyntaxExpressions.kt PARENTHESIZED PsiElement(LPAR)('(') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('f') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('3') - PsiElement(RPAR)(')') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('f') + PsiErrorElement:Expecting ')' + + PsiWhiteSpace(' ') + PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) + PsiElement(INTEGER_LITERAL)('3') + PsiElement(RPAR)(')') PsiWhiteSpace('\n\n ') PROPERTY PsiElement(val)('val') diff --git a/compiler/testData/psi/newLabels/recovery.txt b/compiler/testData/psi/newLabels/recovery.txt index 149e83f8693..7c69e391da7 100644 --- a/compiler/testData/psi/newLabels/recovery.txt +++ b/compiler/testData/psi/newLabels/recovery.txt @@ -123,13 +123,13 @@ JetFile: recovery.kt PsiElement(return)('return') PsiWhiteSpace('\n ') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('loop2') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('4') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('loop2') + PsiWhiteSpace(' ') + PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) + PsiElement(INTEGER_LITERAL)('4') PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n\n ') diff --git a/compiler/testData/psi/newLabels/spaceBeforeLabelReference.txt b/compiler/testData/psi/newLabels/spaceBeforeLabelReference.txt index 70af9783bed..dba7c3cc185 100644 --- a/compiler/testData/psi/newLabels/spaceBeforeLabelReference.txt +++ b/compiler/testData/psi/newLabels/spaceBeforeLabelReference.txt @@ -33,13 +33,13 @@ JetFile: spaceBeforeLabelReference.kt PsiElement(return)('return') PsiWhiteSpace(' ') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('l2') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('l2') + PsiWhiteSpace(' ') + PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) + PsiElement(INTEGER_LITERAL)('1') PsiWhiteSpace('\n\n ') PROPERTY PsiElement(val)('val') @@ -55,20 +55,20 @@ JetFile: spaceBeforeLabelReference.kt PsiElement(return)('return') PsiWhiteSpace(' ') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('l3') - PsiWhiteSpace('\n\n ') - PROPERTY - PsiElement(val)('val') - PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('x') - PsiWhiteSpace(' ') - PsiElement(EQ)('=') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('3') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('l3') + PsiWhiteSpace('\n\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('3') PsiWhiteSpace('\n\n ') CONTINUE PsiElement(continue)('continue') @@ -111,33 +111,33 @@ JetFile: spaceBeforeLabelReference.kt PsiWhiteSpace(' ') PsiComment(BLOCK_COMMENT)('/**/') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('l6') - PsiWhiteSpace('\n\n ') - PROPERTY - PsiElement(val)('val') - PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('x') - PsiWhiteSpace(' ') - PsiElement(EQ)('=') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('8') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('l6') + PsiWhiteSpace('\n\n ') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('8') PsiWhiteSpace('\n\n ') RETURN PsiElement(return)('return') PsiComment(EOL_COMMENT)('//') PsiWhiteSpace('\n') LABELED_EXPRESSION - LABEL_QUALIFIER - LABEL - PsiElement(AT)('@') - PsiElement(IDENTIFIER)('l7') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('4') + PsiErrorElement:Label must be named + PsiElement(AT)('@') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('l7') + PsiWhiteSpace(' ') + PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) + PsiElement(INTEGER_LITERAL)('4') PsiWhiteSpace('\n\n ') PROPERTY PsiElement(val)('val')