From 04729f59857f4bcb3b9c43f3a83e0360a3087bdb Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 14 May 2014 16:59:59 +0400 Subject: [PATCH] Added JetLabeledExpression; added support to parser --- .../src/org/jetbrains/jet/JetNodeTypes.java | 1 + .../lang/parsing/JetExpressionParsing.java | 55 ++- .../jet/lang/psi/JetLabeledExpression.java | 50 +++ compiler/testData/psi/ControlStructures.txt | 14 +- compiler/testData/psi/Labels.kt | 16 - compiler/testData/psi/Labels.txt | 402 ++++++------------ compiler/testData/psi/SimpleExpressions.txt | 14 +- 7 files changed, 226 insertions(+), 326 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabeledExpression.java diff --git a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java index 254a8885081..8008bb5f6f6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java +++ b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java @@ -128,6 +128,7 @@ public interface JetNodeTypes { JetNodeType IS_EXPRESSION = new JetNodeType("IS_EXPRESSION", JetIsExpression.class); // TODO: JetNodeType PREFIX_EXPRESSION = new JetNodeType("PREFIX_EXPRESSION", JetPrefixExpression.class); JetNodeType POSTFIX_EXPRESSION = new JetNodeType("POSTFIX_EXPRESSION", JetPostfixExpression.class); + JetNodeType LABELED_EXPRESSION = new JetNodeType("LABELED_EXPRESSION", JetLabeledExpression.class); JetNodeType CALL_EXPRESSION = new JetNodeType("CALL_EXPRESSION", JetCallExpression.class); JetNodeType ARRAY_ACCESS_EXPRESSION = new JetNodeType("ARRAY_ACCESS_EXPRESSION", JetArrayAccessExpression.class); JetNodeType INDICES = new JetNodeType("INDICES", JetContainerNode.class); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 9ed1ddfe2c0..c1be5288cf1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -319,6 +319,17 @@ public class JetExpressionParsing extends AbstractJetParsing { expression.drop(); } + /* + * label prefixExpression + */ + private void parseLabeledExpression() { + assert _at(LABEL_IDENTIFIER); + PsiBuilder.Marker expression = mark(); + parseLabel(); + parsePrefixExpression(); + expression.done(LABELED_EXPRESSION); + } + /* * operation? prefixExpression */ @@ -338,7 +349,11 @@ public class JetExpressionParsing extends AbstractJetParsing { } else { myBuilder.disableJoiningComplexTokens(); - if (atSet(Precedence.PREFIX.getOperations())) { + if (at(LABEL_IDENTIFIER)) { + myBuilder.restoreJoiningComplexTokensState(); + parseLabeledExpression(); + } + else if (atSet(Precedence.PREFIX.getOperations())) { PsiBuilder.Marker expression = mark(); parseOperationReference(); @@ -501,7 +516,7 @@ public class JetExpressionParsing extends AbstractJetParsing { while ((at(LBRACE) || at(LABEL_IDENTIFIER) && lookahead(1) == LBRACE)) { if (!at(LBRACE)) { assert _at(LABEL_IDENTIFIER); - parsePrefixExpression(); + parseLabeledExpression(); } else { parseFunctionLiteral(); @@ -1399,11 +1414,11 @@ public class JetExpressionParsing extends AbstractJetParsing { else if (at(LABEL_IDENTIFIER) && lookahead(1) == LBRACE ) { PsiBuilder.Marker mark = mark(); - parseOperationReference(); + parseLabel(); parseFunctionLiteral(true); - mark.done(PREFIX_EXPRESSION); + mark.done(LABELED_EXPRESSION); } else { parseExpression(); @@ -1554,7 +1569,7 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // BREAK_KEYWORD or CONTINUE_KEYWORD - parseLabel(); + parseLabelOnTheSameLine(); marker.done(type); } @@ -1569,7 +1584,7 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // RETURN_KEYWORD - parseLabel(); + parseLabelOnTheSameLine(); if (atSet(EXPRESSION_FIRST) && !at(EOL_OR_SEMICOLON)) parseExpression(); @@ -1577,18 +1592,26 @@ public class JetExpressionParsing extends AbstractJetParsing { } /* - * labels + * label? + */ + private void parseLabelOnTheSameLine() { + if (!eol() && at(LABEL_IDENTIFIER)) { + parseLabel(); + } + } + + /* + * label */ private void parseLabel() { - if (!eol() && at(LABEL_IDENTIFIER)) { - PsiBuilder.Marker labelWrap = mark(); + assert _at(LABEL_IDENTIFIER); + PsiBuilder.Marker labelWrap = mark(); - PsiBuilder.Marker mark = mark(); - advance(); // LABEL_IDENTIFIER - mark.done(LABEL_REFERENCE); + PsiBuilder.Marker mark = mark(); + advance(); // LABEL_IDENTIFIER + mark.done(LABEL_REFERENCE); - labelWrap.done(LABEL_QUALIFIER); - } + labelWrap.done(LABEL_QUALIFIER); } /* @@ -1683,7 +1706,7 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // THIS_KEYWORD thisReference.done(REFERENCE_EXPRESSION); - parseLabel(); + parseLabelOnTheSameLine(); mark.done(THIS_EXPRESSION); } @@ -1717,7 +1740,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } myBuilder.restoreNewlinesState(); } - parseLabel(); + parseLabelOnTheSameLine(); mark.done(SUPER_EXPRESSION); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabeledExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabeledExpression.java new file mode 100644 index 00000000000..c4ef7aff369 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabeledExpression.java @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.psi; + +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class JetLabeledExpression extends JetExpressionWithLabel { + + public JetLabeledExpression(@NotNull ASTNode node) { + super(node); + } + + @Nullable @IfNotParsed + public JetExpression getBaseExpression() { + return findChildByClass(JetExpression.class); + } +} diff --git a/compiler/testData/psi/ControlStructures.txt b/compiler/testData/psi/ControlStructures.txt index b53adf31922..d4618fd85f3 100644 --- a/compiler/testData/psi/ControlStructures.txt +++ b/compiler/testData/psi/ControlStructures.txt @@ -199,9 +199,10 @@ JetFile: ControlStructures.kt BREAK PsiElement(break)('break') PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@la') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@la') PsiWhiteSpace('\n ') BREAK PsiElement(break)('break') @@ -213,9 +214,10 @@ JetFile: ControlStructures.kt CONTINUE PsiElement(continue)('continue') PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@la') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@la') PsiWhiteSpace('\n ') CONTINUE PsiElement(continue)('continue') diff --git a/compiler/testData/psi/Labels.kt b/compiler/testData/psi/Labels.kt index 43299ecec35..c2dc2ca6980 100644 --- a/compiler/testData/psi/Labels.kt +++ b/compiler/testData/psi/Labels.kt @@ -15,23 +15,14 @@ fun foo() { return@@ return@@ 1 - return@@ (@@ 1) - return@@ @@ 1 - - @a return@@ - @a return@@ 1 - @a return@@ (@@ 1) - @a return@@ @@ 1 break break@ break@a - break@@ continue continue@ continue@a - continue@@ a.filter @f{ if (1) return @@ -43,18 +34,11 @@ fun foo() { return@ true } - a.filter @@{ - if (1) return - return@@ true - } - this this@ this@a - this@@ super super@ super@a - super@@ } \ No newline at end of file diff --git a/compiler/testData/psi/Labels.txt b/compiler/testData/psi/Labels.txt index 814d8082606..0e94f02fad5 100644 --- a/compiler/testData/psi/Labels.txt +++ b/compiler/testData/psi/Labels.txt @@ -26,247 +26,147 @@ JetFile: Labels.kt PsiWhiteSpace(' ') PARENTHESIZED PsiElement(LPAR)('(') - PREFIX_EXPRESSION - OPERATION_REFERENCE + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@a') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n\n ') + RETURN + PsiElement(return)('return') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace(' ') + PARENTHESIZED + PsiElement(LPAR)('(') + LABELED_EXPRESSION + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace(' ') + LABELED_EXPRESSION + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n\n ') + RETURN + PsiElement(return)('return') + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@a') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@a') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@a') + PsiWhiteSpace(' ') + PARENTHESIZED + PsiElement(LPAR)('(') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@a') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiElement(RPAR)(')') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@a') + PsiWhiteSpace(' ') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiElement(RPAR)(')') - PsiWhiteSpace('\n\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') - PsiWhiteSpace(' ') - PARENTHESIZED - PsiElement(LPAR)('(') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(AT)('@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiElement(RPAR)(')') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') - PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(AT)('@') PsiWhiteSpace(' ') INTEGER_CONSTANT PsiElement(INTEGER_LITERAL)('1') PsiWhiteSpace('\n\n ') RETURN PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - PARENTHESIZED - PsiElement(LPAR)('(') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiElement(RPAR)(')') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - PARENTHESIZED - PsiElement(LPAR)('(') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiElement(RPAR)(')') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - PARENTHESIZED - PsiElement(LPAR)('(') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(ATAT)('@@') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + LABELED_EXPRESSION + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + PsiWhiteSpace('\n ') + RETURN + PsiElement(return)('return') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') + LABELED_EXPRESSION + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') PsiWhiteSpace(' ') INTEGER_CONSTANT PsiElement(INTEGER_LITERAL)('1') - PsiElement(RPAR)(')') - PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace(' ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(ATAT)('@@') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') PsiWhiteSpace('\n\n ') BREAK PsiElement(break)('break') PsiWhiteSpace('\n ') BREAK PsiElement(break)('break') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') PsiWhiteSpace('\n ') BREAK PsiElement(break)('break') LABEL_QUALIFIER LABEL_REFERENCE PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace('\n ') - BREAK - PsiElement(break)('break') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') PsiWhiteSpace('\n\n ') CONTINUE PsiElement(continue)('continue') PsiWhiteSpace('\n ') CONTINUE PsiElement(continue)('continue') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') PsiWhiteSpace('\n ') CONTINUE PsiElement(continue)('continue') LABEL_QUALIFIER LABEL_REFERENCE PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace('\n ') - CONTINUE - PsiElement(continue)('continue') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') PsiWhiteSpace('\n\n ') DOT_QUALIFIED_EXPRESSION REFERENCE_EXPRESSION @@ -276,9 +176,10 @@ JetFile: Labels.kt REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('filter') PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@f') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@f') FUNCTION_LITERAL_EXPRESSION FUNCTION_LITERAL PsiElement(LBRACE)('{') @@ -316,9 +217,9 @@ JetFile: Labels.kt REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('filter') PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(AT)('@') + LABELED_EXPRESSION + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') FUNCTION_LITERAL_EXPRESSION FUNCTION_LITERAL PsiElement(LBRACE)('{') @@ -339,49 +240,8 @@ JetFile: Labels.kt PsiWhiteSpace('\n ') RETURN PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') - PsiWhiteSpace(' ') - BOOLEAN_CONSTANT - PsiElement(true)('true') - PsiWhiteSpace('\n ') - PsiElement(RBRACE)('}') - PsiWhiteSpace('\n\n ') - DOT_QUALIFIED_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('filter') - PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(ATAT)('@@') - FUNCTION_LITERAL_EXPRESSION - FUNCTION_LITERAL - PsiElement(LBRACE)('{') - PsiWhiteSpace('\n ') - BLOCK - IF - PsiElement(if)('if') - PsiWhiteSpace(' ') - PsiElement(LPAR)('(') - CONDITION - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiElement(RPAR)(')') - PsiWhiteSpace(' ') - THEN - RETURN - PsiElement(return)('return') - PsiWhiteSpace('\n ') - RETURN - PsiElement(return)('return') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') PsiWhiteSpace(' ') BOOLEAN_CONSTANT PsiElement(true)('true') @@ -395,9 +255,8 @@ JetFile: Labels.kt THIS_EXPRESSION REFERENCE_EXPRESSION PsiElement(this)('this') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') PsiWhiteSpace('\n ') THIS_EXPRESSION REFERENCE_EXPRESSION @@ -405,13 +264,6 @@ JetFile: Labels.kt LABEL_QUALIFIER LABEL_REFERENCE PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace('\n ') - THIS_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(this)('this') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') PsiWhiteSpace('\n\n ') SUPER_EXPRESSION REFERENCE_EXPRESSION @@ -432,9 +284,8 @@ JetFile: Labels.kt REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('A') PsiElement(GT)('>') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(AT)('@') + PsiErrorElement:Label must be named + PsiElement(LABEL_IDENTIFIER)('@') PsiWhiteSpace('\n ') SUPER_EXPRESSION REFERENCE_EXPRESSION @@ -448,18 +299,5 @@ JetFile: Labels.kt LABEL_QUALIFIER LABEL_REFERENCE PsiElement(LABEL_IDENTIFIER)('@a') - PsiWhiteSpace('\n ') - SUPER_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(super)('super') - PsiElement(LT)('<') - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('A') - PsiElement(GT)('>') - LABEL_QUALIFIER - LABEL_REFERENCE - PsiElement(ATAT)('@@') PsiWhiteSpace('\n') PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/compiler/testData/psi/SimpleExpressions.txt b/compiler/testData/psi/SimpleExpressions.txt index 1556d610c3f..02049a00e37 100644 --- a/compiler/testData/psi/SimpleExpressions.txt +++ b/compiler/testData/psi/SimpleExpressions.txt @@ -701,9 +701,10 @@ JetFile: SimpleExpressions.kt BREAK PsiElement(break)('break') PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@la') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@la') PsiWhiteSpace('\n ') BREAK PsiElement(break)('break') @@ -715,9 +716,10 @@ JetFile: SimpleExpressions.kt CONTINUE PsiElement(continue)('continue') PsiWhiteSpace('\n ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(LABEL_IDENTIFIER)('@la') + LABELED_EXPRESSION + LABEL_QUALIFIER + LABEL_REFERENCE + PsiElement(LABEL_IDENTIFIER)('@la') PsiWhiteSpace('\n ') CONTINUE PsiElement(continue)('continue')