This commit is contained in:
Andrey Breslav
2011-02-24 16:01:51 +03:00
parent c2c9f51ca8
commit bfe22843ce
21 changed files with 1086 additions and 530 deletions
+13 -6
View File
@@ -82,7 +82,7 @@ atomicExpression
: literalConstant
: functionLiteral
: tupleLiteral
: "this" ("<" type ">")?
: "this" label? ("<" type ">")?
: if
: when
: try
@@ -97,6 +97,12 @@ atomicExpression
: "namespace" // for the root namespace
;
label
: "@"
: "@@"
: LabelName
;
literalConstant
: "true" | "false"
: StringWithTemplates
@@ -163,12 +169,13 @@ prefixUnaryOperation
: "++" : "--"
: "!" // No ~
: attributes // mandatory
: label
;
postfixUnaryOperation
: "++" : "--"
: typeArguments? valueArguments
: typeArguments
: typeArguments? valueArguments (label? functionLiteral)
: typeArguments (label? functionLiteral)
: arrayAccess
: memberAccessOperation postfixUnaryOperation // TODO: Review
;
@@ -187,9 +194,9 @@ valueArguments
jump
: "throw" expression
: "return" expression?
: "continue" stringLiteral?
: "break" stringLiteral?
: "return" label? expression?
: "continue" label?
: "break" label?
// yield ?
;
+1
View File
@@ -1,5 +1,6 @@
SimpleName : /*java identifier*/;
FieldName : "$" SimpleName;
LabelName : "@" SimpleName;
[helper] Digit : ["0".."9"];
IntegerLiteral : Digit+ "L"?
[helper] HexDigit : Digit | ["A"-"F", "a"-"f"];
+1
View File
@@ -22,6 +22,7 @@
<lang.parserDefinition language="jet" implementationClass="org.jetbrains.jet.lang.parsing.JetParserDefinition"/>
<lang.commenter language="jet" implementationClass="org.jetbrains.jet.plugin.JetCommenter"/>
<annotator language="jet" implementationClass="org.jetbrains.jet.lang.annotations.SoftKeywordsAnnotator"/>
<annotator language="jet" implementationClass="org.jetbrains.jet.lang.annotations.LabelsAnnotator"/>
<annotator language="jet" implementationClass="org.jetbrains.jet.lang.annotations.JetPsiChecker"/>
</extensions>
</idea-plugin>
@@ -37,6 +37,12 @@ public class JetHighlighter extends SyntaxHighlighterBase {
SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
);
public static final TextAttributesKey JET_LABEL_IDENTIFIER = TextAttributesKey.createTextAttributesKey(
"JET.LABEL.IDENTIFIER",
// TODO: proper attributes
SyntaxHighlighterColors.NUMBER.getDefaultAttributes()
);
private static final TextAttributesKey JET_NUMBER = TextAttributesKey.createTextAttributesKey(
"JET.NUMBER",
SyntaxHighlighterColors.NUMBER.getDefaultAttributes()
@@ -74,6 +80,8 @@ public class JetHighlighter extends SyntaxHighlighterBase {
fillMap(keys1, JetTokens.KEYWORDS, JET_KEYWORD);
keys1.put(JetTokens.LABEL_IDENTIFIER, JET_LABEL_IDENTIFIER);
keys1.put(JetTokens.ATAT, JET_LABEL_IDENTIFIER);
keys1.put(JetTokens.FIELD_IDENTIFIER, JET_FIELD_IDENTIFIER);
keys1.put(JetTokens.INTEGER_LITERAL, JET_NUMBER);
keys1.put(JetTokens.LONG_LITERAL, JET_NUMBER);
@@ -0,0 +1,36 @@
/*
* @author max
*/
package org.jetbrains.jet.lang.annotations;
import com.intellij.lang.ASTNode;
import com.intellij.lang.annotation.AnnotationHolder;
import com.intellij.lang.annotation.Annotator;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.JetHighlighter;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lexer.JetTokens;
public class LabelsAnnotator implements Annotator {
public void annotate(@NotNull PsiElement element, @NotNull final AnnotationHolder holder) {
element.accept(new JetVisitor() {
@Override
public void visitPrefixExpression(JetPrefixExpression expression) {
ASTNode operationTokenNode = expression.getOperationTokenNode();
if (JetTokens.LABELS.contains(operationTokenNode.getElementType())) {
holder.createInfoAnnotation(operationTokenNode, null).setTextAttributes(JetHighlighter.JET_LABEL_IDENTIFIER);
}
}
@Override
public void visitLabelQualifiedExpression(JetLabelQualifiedExpression expression) {
ASTNode targetLabelNode = expression.getTargetLabelNode();
if (targetLabelNode != null) {
holder.createInfoAnnotation(targetLabelNode, null).setTextAttributes(JetHighlighter.JET_LABEL_IDENTIFIER);
}
}
});
}
}
@@ -34,7 +34,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
private static final TokenSet EXPRESSION_FIRST = TokenSet.orSet(TokenSet.create(
// Prefix
MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL, LBRACKET,
MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL, LBRACKET, LABEL_IDENTIFIER, AT, ATAT,
// Atomic
LPAR, // parenthesized
@@ -91,7 +91,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
private enum Precedence {
POSTFIX(PLUSPLUS, MINUSMINUS), // typeArguments? valueArguments : typeArguments : arrayAccess
PREFIX(MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL) { // attributes
PREFIX(MINUS, PLUS, MINUSMINUS, PLUSPLUS, EXCL, LABEL_IDENTIFIER, AT, ATAT) { // attributes
@Override
public void parseHigherPrecedence(JetExpressionParsing parser) {
@@ -278,8 +278,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
*
* postfixUnaryOperation
* : "++" : "--"
* : typeArguments? valueArguments
* : typeArguments
* : typeArguments? valueArguments (label? functionLiteral)
* : typeArguments (label? functionLiteral)
* : arrayAccess
* : memberAccessOperation postfixUnaryOperation // TODO: Review
* ;
@@ -354,12 +354,19 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
/*
* expression functionLiteral?
* expression (label? functionLiteral)?
*/
protected boolean parseCallWithClosure() {
boolean success = false;
while (!myBuilder.newlineBeforeCurrentToken() && at(LBRACE)) {
parseFunctionLiteral();
while (!myBuilder.newlineBeforeCurrentToken()
&& (at(LBRACE)
|| atSet(LABELS) && lookahead(1) == LBRACE)) {
if (!at(LBRACE)) {
assert _atSet(LABELS);
parsePrefixExpression();
} else {
parseFunctionLiteral();
}
success = true;
}
return success;
@@ -368,7 +375,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
/*
* atomicExpression
* : tupleLiteral // or parenthesized expression
* : "this" ("<" type ">")?
* : "this" label? ("<" type ">")?
* : "typeof" "(" expression ")"
* : "new" constructorInvocation
* : objectLiteral
@@ -1231,13 +1238,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
/*
* : "continue" stringLiteral?
* : "break" stringLiteral?
*
* stringLiteral
* : StringWithTemplates
* : NoEscapeString
* ;
* : "continue" label?
* : "break" label?
*/
private void parseJump(JetNodeType type) {
assert _at(BREAK_KEYWORD) || _at(CONTINUE_KEYWORD);
@@ -1246,13 +1248,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // BREAK_KEYWORD or CONTINUE_KEYWORD
if (!eol() && (at(RAW_STRING_LITERAL) || at(STRING_LITERAL))) advance(); // RAW_STRING_LITERAL or STRING_LITERAL
if (!eol() && atSet(LABELS)) advance(); // LABELS
marker.done(type);
}
/*
* "return" expression?
* "return" label? expression?
*/
private void parseReturn() {
assert _at(RETURN_KEYWORD);
@@ -1261,6 +1263,10 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // RETURN_KEYWORD
if (atSet(LABELS)) {
advance(); // LABELS
}
if (atSet(EXPRESSION_FIRST) && !at(EOL_OR_SEMICOLON)) parseExpression();
returnExpression.done(RETURN);
@@ -1379,12 +1385,17 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
/*
* "this" ("<" type ">")?
* "this" label? ("<" type ">")?
*/
private void parseThisExpression() {
assert _at(THIS_KEYWORD);
PsiBuilder.Marker mark = mark();
advance(); // THIS_KEYWORD
if (atSet(LABELS)) {
advance(); // LABELS
}
if (at(LT)) {
// This may be "this < foo" or "this<foo>", thus the backtracking
PsiBuilder.Marker supertype = mark();
@@ -9,7 +9,7 @@ import org.jetbrains.jet.lexer.JetTokens;
/**
* @author max
*/
public class JetBreakExpression extends JetExpression {
public class JetBreakExpression extends JetLabelQualifiedExpression {
public JetBreakExpression(@NotNull ASTNode node) {
super(node);
}
@@ -9,7 +9,7 @@ import org.jetbrains.jet.lexer.JetTokens;
/**
* @author max
*/
public class JetContinueExpression extends JetExpression {
public class JetContinueExpression extends JetLabelQualifiedExpression {
public JetContinueExpression(@NotNull ASTNode node) {
super(node);
}
@@ -0,0 +1,29 @@
package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
/**
* @author abreslav
*/
public class JetLabelQualifiedExpression extends JetExpression {
public JetLabelQualifiedExpression(@NotNull ASTNode node) {
super(node);
}
@Nullable
public JetToken getTargetLabel() {
ASTNode targetLabelNode = getTargetLabelNode();
if (targetLabelNode == null) return null;
return (JetToken) targetLabelNode.getElementType();
}
@Nullable
public ASTNode getTargetLabelNode() {
return getNode().findChildByType(JetTokens.LABELS);
}
}
@@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable;
/**
* @author max
*/
public class JetReturnExpression extends JetExpression {
public class JetReturnExpression extends JetLabelQualifiedExpression {
public JetReturnExpression(@NotNull ASTNode node) {
super(node);
}
@@ -8,7 +8,7 @@ import org.jetbrains.jet.JetNodeTypes;
/**
* @author max
*/
public class JetThisExpression extends JetExpression {
public class JetThisExpression extends JetLabelQualifiedExpression {
public JetThisExpression(@NotNull ASTNode node) {
super(node);
}
@@ -171,6 +171,10 @@ public class JetVisitor extends PsiElementVisitor {
}
public void visitReturnExpression(JetReturnExpression expression) {
visitLabelQualifiedExpression(expression);
}
public void visitLabelQualifiedExpression(JetLabelQualifiedExpression expression) {
visitExpression(expression);
}
@@ -179,11 +183,11 @@ public class JetVisitor extends PsiElementVisitor {
}
public void visitBreakExpression(JetBreakExpression expression) {
visitExpression(expression);
visitLabelQualifiedExpression(expression);
}
public void visitContinueExpression(JetContinueExpression expression) {
visitExpression(expression);
visitLabelQualifiedExpression(expression);
}
public void visitIfExpression(JetIfExpression expression) {
@@ -271,7 +275,7 @@ public class JetVisitor extends PsiElementVisitor {
}
public void visitThisExpression(JetThisExpression expression) {
visitExpression(expression);
visitLabelQualifiedExpression(expression);
}
public void visitParenthesizedExpression(JetParenthesizedExpression expression) {
@@ -28,6 +28,7 @@ PLAIN_IDENTIFIER=[:jletter:] [:jletterdigit:]*
ESCAPED_IDENTIFIER = `{PLAIN_IDENTIFIER}`
IDENTIFIER = {PLAIN_IDENTIFIER}|{ESCAPED_IDENTIFIER}
FIELD_IDENTIFIER = \${IDENTIFIER}
LABEL_IDENTIFIER = \@{IDENTIFIER}
BLOCK_COMMENT=("/*"[^"*"]{COMMENT_TAIL})|"/*"
// TODO: Wiki markup for doc comments?
@@ -119,6 +120,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}?
<YYINITIAL> {FIELD_IDENTIFIER} { return JetTokens.FIELD_IDENTIFIER; }
<YYINITIAL> {IDENTIFIER} { return JetTokens.IDENTIFIER; }
<YYINITIAL> {LABEL_IDENTIFIER} { return JetTokens.LABEL_IDENTIFIER; }
<YYINITIAL> "===" { return JetTokens.EQEQEQ ; }
<YYINITIAL> "!==" { return JetTokens.EXCLEQEQEQ; }
@@ -144,6 +146,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}?
<YYINITIAL> "->" { return JetTokens.ARROW ; }
<YYINITIAL> "=>" { return JetTokens.DOUBLE_ARROW; }
<YYINITIAL> ".." { return JetTokens.RANGE ; }
<YYINITIAL> "@@" { return JetTokens.ATAT ; }
<YYINITIAL> "[" { return JetTokens.LBRACKET ; }
<YYINITIAL> "]" { return JetTokens.RBRACKET ; }
<YYINITIAL> "{" { return JetTokens.LBRACE ; }
@@ -56,6 +56,7 @@ public interface JetTokens {
JetToken IDENTIFIER = new JetToken("IDENTIFIER");
JetToken LABEL_IDENTIFIER = new JetToken("LABEL_IDENTIFIER");
JetToken FIELD_IDENTIFIER = new JetToken("FIELD_IDENTIFIER");
JetToken LBRACKET = new JetToken("LBRACKET");
@@ -103,6 +104,8 @@ public interface JetTokens {
JetToken NOT_IS = JetKeywordToken.keyword("NOT_IS");
JetToken HASH = new JetToken("HASH");
JetToken AT = new JetToken("AT");
JetToken ATAT = new JetToken("ATAT");
TokenSet LABELS = TokenSet.create(AT, ATAT, LABEL_IDENTIFIER);
JetToken COMMA = new JetToken("COMMA");
@@ -158,5 +161,5 @@ public interface JetTokens {
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS,
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, ARROW, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
SAFE_ACCESS, ELVIS, MAP, FILTER, QUEST, COLON, SEMICOLON, RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
NOT_IN, NOT_IS, HASH, IDENTIFIER);
NOT_IN, NOT_IS, HASH, IDENTIFIER, LABEL_IDENTIFIER, ATAT, AT);
}
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -3,9 +3,9 @@ fun a(
a : foo = throw new Foo,
a : foo = return 10,
a : foo = break,
a : foo = break "la",
a : foo = break @la,
a : foo = continue,
a : foo = continue "la",
a : foo = continue @la,
a : foo = if (10) foo else bar,
a : foo = if (10) foo
) {
@@ -13,11 +13,11 @@ fun a(
return
10
break
"la"
break "la"
@la
break @la
continue
"la"
continue "la"
@la
continue @la
if (foo)
if (foo)
bar
+16 -16
View File
@@ -83,7 +83,7 @@ JetFile: ControlStructures.jet
BREAK
PsiElement(break)('break')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
@@ -117,7 +117,7 @@ JetFile: ControlStructures.jet
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
@@ -197,24 +197,24 @@ JetFile: ControlStructures.jet
BREAK
PsiElement(break)('break')
PsiWhiteSpace('\n ')
STRING_CONSTANT
PsiElement(STRING_LITERAL)('"la"')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiWhiteSpace(' ')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace('\n ')
STRING_CONSTANT
PsiElement(STRING_LITERAL)('"la"')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace(' ')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
IF
PsiElement(if)('if')
+60
View File
@@ -0,0 +1,60 @@
fun foo() {
return
return 1
return (@a 1)
return@
return@ 1
return@ (@ 1)
return@ @ 1
return@a
return@a 1
return@a (@a 1)
return@a @a 1
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
return@f true
}
a.filter @{
if (1) return
return@ true
}
a.filter @@{
if (1) return
return@@ true
}
this
this@
this@a
this@@
this<A>
this@<A>
this@a<A>
this@@<A>
}
+377
View File
@@ -0,0 +1,377 @@
JetFile: Labels.jet
NAMESPACE
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
TYPE_PARAMETER_LIST
<empty list>
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiWhiteSpace(' ')
PARENTHESIZED
PsiElement(LPAR)('(')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n\n ')
RETURN
PsiElement(return)('return')
PsiElement(AT)('@')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(AT)('@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(AT)('@')
PsiWhiteSpace(' ')
PARENTHESIZED
PsiElement(LPAR)('(')
PREFIX_EXPRESSION
PsiElement(AT)('@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(AT)('@')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(AT)('@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n\n ')
RETURN
PsiElement(return)('return')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
PARENTHESIZED
PsiElement(LPAR)('(')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n\n ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
PARENTHESIZED
PsiElement(LPAR)('(')
PREFIX_EXPRESSION
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n\n ')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace('\n ')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n ')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
PARENTHESIZED
PsiElement(LPAR)('(')
PREFIX_EXPRESSION
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace(' ')
RETURN
PsiElement(return)('return')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n\n ')
BREAK
PsiElement(break)('break')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiElement(AT)('@')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiElement(ATAT)('@@')
PsiWhiteSpace('\n\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiElement(AT)('@')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiElement(ATAT)('@@')
PsiWhiteSpace('\n\n ')
CALL_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('filter')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@f')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
BODY
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')
PsiElement(LABEL_IDENTIFIER)('@f')
PsiWhiteSpace(' ')
BOOLEAN_CONSTANT
PsiElement(true)('true')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')
CALL_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('filter')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(AT)('@')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
BODY
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')
PsiElement(AT)('@')
PsiWhiteSpace(' ')
BOOLEAN_CONSTANT
PsiElement(true)('true')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')
CALL_EXPRESSION
DOT_QIALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('filter')
PsiWhiteSpace(' ')
PREFIX_EXPRESSION
PsiElement(ATAT)('@@')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
BODY
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')
PsiElement(ATAT)('@@')
PsiWhiteSpace(' ')
BOOLEAN_CONSTANT
PsiElement(true)('true')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiWhiteSpace('\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(AT)('@')
PsiWhiteSpace('\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiWhiteSpace('\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(ATAT)('@@')
PsiWhiteSpace('\n\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(LT)('<')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(GT)('>')
PsiWhiteSpace('\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(AT)('@')
PsiElement(LT)('<')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(GT)('>')
PsiWhiteSpace('\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(LABEL_IDENTIFIER)('@a')
PsiElement(LT)('<')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(GT)('>')
PsiWhiteSpace('\n ')
THIS_EXPRESSION
PsiElement(this)('this')
PsiElement(ATAT)('@@')
PsiElement(LT)('<')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(GT)('>')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
+6 -6
View File
@@ -27,9 +27,9 @@ fun a(
a : foo = throw new Foo,
a : foo = return 10,
a : foo = break,
a : foo = break "la",
a : foo = break @la,
a : foo = continue,
a : foo = continue "la",
a : foo = continue @la,
a : foo = 10,
a : foo = 10,
a : foo = 10,
@@ -39,9 +39,9 @@ fun a(
return
10
break
"la"
break "la"
@la
break @la
continue
"la"
continue "la"
@la
continue @la
}
+16 -16
View File
@@ -550,7 +550,7 @@ JetFile: SimpleExpressions.jet
BREAK
PsiElement(break)('break')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
@@ -584,7 +584,7 @@ JetFile: SimpleExpressions.jet
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
VALUE_PARAMETER
@@ -670,23 +670,23 @@ JetFile: SimpleExpressions.jet
BREAK
PsiElement(break)('break')
PsiWhiteSpace('\n ')
STRING_CONSTANT
PsiElement(STRING_LITERAL)('"la"')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
BREAK
PsiElement(break)('break')
PsiWhiteSpace(' ')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace('\n ')
STRING_CONSTANT
PsiElement(STRING_LITERAL)('"la"')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace(' ')
PsiElement(STRING_LITERAL)('"la"')
PREFIX_EXPRESSION
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n ')
CONTINUE
PsiElement(continue)('continue')
PsiWhiteSpace(' ')
PsiElement(LABEL_IDENTIFIER)('@la')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')