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')