Removing grammar/parsing support for complext patterns

#KT-2359 In progress
This commit is contained in:
Andrey Breslav
2012-09-05 12:49:04 +04:00
parent a7f62a7d6e
commit 10d453ce6a
20 changed files with 515 additions and 1664 deletions
@@ -129,7 +129,7 @@ public interface JetNodeTypes {
JetNodeType SUPER_EXPRESSION = new JetNodeType("SUPER_EXPRESSION", JetSuperExpression.class); JetNodeType SUPER_EXPRESSION = new JetNodeType("SUPER_EXPRESSION", JetSuperExpression.class);
JetNodeType BINARY_EXPRESSION = new JetNodeType("BINARY_EXPRESSION", JetBinaryExpression.class); JetNodeType BINARY_EXPRESSION = new JetNodeType("BINARY_EXPRESSION", JetBinaryExpression.class);
JetNodeType BINARY_WITH_TYPE = new JetNodeType("BINARY_WITH_TYPE", JetBinaryExpressionWithTypeRHS.class); JetNodeType BINARY_WITH_TYPE = new JetNodeType("BINARY_WITH_TYPE", JetBinaryExpressionWithTypeRHS.class);
JetNodeType BINARY_WITH_PATTERN = new JetNodeType("BINARY_WITH_PATTERN", JetIsExpression.class); // TODO: JetNodeType IS_EXPRESSION = new JetNodeType("IS_EXPRESSION", JetIsExpression.class); // TODO:
JetNodeType PREFIX_EXPRESSION = new JetNodeType("PREFIX_EXPRESSION", JetPrefixExpression.class); JetNodeType PREFIX_EXPRESSION = new JetNodeType("PREFIX_EXPRESSION", JetPrefixExpression.class);
JetNodeType POSTFIX_EXPRESSION = new JetNodeType("POSTFIX_EXPRESSION", JetPostfixExpression.class); JetNodeType POSTFIX_EXPRESSION = new JetNodeType("POSTFIX_EXPRESSION", JetPostfixExpression.class);
JetNodeType CALL_EXPRESSION = new JetNodeType("CALL_EXPRESSION", JetCallExpression.class); JetNodeType CALL_EXPRESSION = new JetNodeType("CALL_EXPRESSION", JetCallExpression.class);
@@ -143,16 +143,6 @@ public interface JetNodeTypes {
JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class); JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class);
JetNodeType ROOT_NAMESPACE = new JetNodeType("ROOT_NAMESPACE", JetRootNamespaceExpression.class); JetNodeType ROOT_NAMESPACE = new JetNodeType("ROOT_NAMESPACE", JetRootNamespaceExpression.class);
JetNodeType EXPRESSION_PATTERN = new JetNodeType("EXPRESSION_PATTERN", JetExpressionPattern.class);
JetNodeType TYPE_PATTERN = new JetNodeType("TYPE_PATTERN", JetTypePattern.class);
JetNodeType WILDCARD_PATTERN = new JetNodeType("WILDCARD_PATTERN", JetWildcardPattern.class);
JetNodeType BINDING_PATTERN = new JetNodeType("BINDING_PATTERN", JetBindingPattern.class);
JetNodeType TUPLE_PATTERN = new JetNodeType("TUPLE_PATTERN", JetTuplePattern.class);
JetNodeType TUPLE_PATTERN_ENTRY = new JetNodeType("TUPLE_PATTERN_ENTRY", JetTuplePatternEntry.class);
JetNodeType DECOMPOSER_PATTERN = new JetNodeType("DECOMPOSER_PATTERN", JetDecomposerPattern.class);
JetNodeType DECOMPOSER_ARGUMENT_LIST = new JetNodeType("DECOMPOSER_ARGUMENT_LIST", JetTuplePattern.class);
JetNodeType DECOMPOSER_ARGUMENT = TUPLE_PATTERN_ENTRY;
JetNodeType WHEN = new JetNodeType("WHEN", JetWhenExpression.class); JetNodeType WHEN = new JetNodeType("WHEN", JetWhenExpression.class);
JetNodeType WHEN_ENTRY = new JetNodeType("WHEN_ENTRY", JetWhenEntry.class); JetNodeType WHEN_ENTRY = new JetNodeType("WHEN_ENTRY", JetWhenEntry.class);
@@ -162,9 +162,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
@Override @Override
public JetNodeType parseRightHandSide(IElementType operation, JetExpressionParsing parser) { public JetNodeType parseRightHandSide(IElementType operation, JetExpressionParsing parser) {
if (operation == IS_KEYWORD || operation == NOT_IS) { if (operation == IS_KEYWORD || operation == NOT_IS) {
parser.parsePattern(); parser.myJetParsing.parseTypeRef();
return IS_EXPRESSION;
return BINARY_WITH_PATTERN;
} }
return super.parseRightHandSide(operation, parser); return super.parseRightHandSide(operation, parser);
@@ -850,186 +849,25 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // IS_KEYWORD or NOT_IS advance(); // IS_KEYWORD or NOT_IS
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting a type or a decomposer pattern"); error("Expecting a type");
} }
else { else {
parsePattern(); myJetParsing.parseTypeRef();
} }
condition.done(WHEN_CONDITION_IS_PATTERN); condition.done(WHEN_CONDITION_IS_PATTERN);
} }
else { else {
PsiBuilder.Marker expressionPattern = mark();
if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) {
error("Expecting an expression, is-condition or in-condition"); error("Expecting an expression, is-condition or in-condition");
} }
else { else {
parseExpression(); parseExpression();
} }
expressionPattern.done(EXPRESSION_PATTERN);
condition.done(WHEN_CONDITION_EXPRESSION); condition.done(WHEN_CONDITION_EXPRESSION);
} }
myBuilder.restoreNewlinesState(); myBuilder.restoreNewlinesState();
} }
/*
* pattern
* : attributes pattern
* : type // '[a] T' is a type-pattern 'T' with an attribute '[a]', not a type-pattern '[a] T'
* // this makes sense because is-check may be different for a type with attributes
* : tuplePattern
* : decomposerPattern
* : constantPattern
* : bindingPattern
* : "*" // wildcard pattern
* ;
*/
private void parsePattern() {
PsiBuilder.Marker pattern = mark();
myJetParsing.parseAnnotations(false);
if (at(PACKAGE_KEYWORD) || at(IDENTIFIER) || at(FUN_KEYWORD) || at(THIS_KEYWORD)) {
PsiBuilder.Marker rollbackMarker = mark();
parseBinaryExpression(Precedence.ELVIS);
if (at(HASH)) {
rollbackMarker.drop();
PsiBuilder.Marker list = mark();
parseTuplePattern(DECOMPOSER_ARGUMENT);
list.done(DECOMPOSER_ARGUMENT_LIST);
pattern.done(DECOMPOSER_PATTERN);
}
else {
int expressionEndOffset = myBuilder.getCurrentOffset();
rollbackMarker.rollbackTo();
rollbackMarker = mark();
myJetParsing.parseTypeRef();
// if (at(AT)) {
// errorAndAdvance("'@' is allowed only after a decomposer element, not after a type");
// }
if (myBuilder.getCurrentOffset() < expressionEndOffset) {
rollbackMarker.rollbackTo();
parseBinaryExpression(Precedence.ELVIS);
pattern.done(DECOMPOSER_PATTERN);
}
else {
rollbackMarker.drop();
pattern.done(TYPE_PATTERN);
}
}
}
else if (at(HASH)) {
parseTuplePattern(TUPLE_PATTERN_ENTRY);
pattern.done(TUPLE_PATTERN);
}
else if (at(MUL)) {
advance(); // MUL
pattern.done(WILDCARD_PATTERN);
}
else if (at(VAL_KEYWORD)) {
parseBindingPattern();
pattern.done(BINDING_PATTERN);
}
else if (at(OPEN_QUOTE)) {
parseStringTemplate();
pattern.done(EXPRESSION_PATTERN);
}
else if (parseLiteralConstant()) {
pattern.done(EXPRESSION_PATTERN);
}
else {
errorUntil("Pattern expected", TokenSet.create(RBRACE, ARROW));
pattern.drop();
}
}
/*
* tuplePattern
* : "#" "(" ((SimpleName "=")? pattern){","}? ")"
* ;
*/
private void parseTuplePattern(JetNodeType entryType) {
myBuilder.disableNewlines();
expect(HASH, "Expecting a tuple pattern of the form '#(...)'", getDecomposerExpressionFollow());
expect(LPAR, "Expecting a tuple pattern of the form '#(...)'", getDecomposerExpressionFollow());
if (!at(RPAR)) {
while (true) {
while (at(COMMA)) errorAndAdvance("Expecting a pattern");
if (at(RPAR)) {
error("Expecting a pattern");
break;
}
PsiBuilder.Marker entry = mark();
if (at(IDENTIFIER) && lookahead(1) == EQ) {
advance(); // IDENTIFIER
advance(); // EQ
}
parsePattern();
entry.done(entryType);
if (!at(COMMA)) break;
advance(); // COMMA
}
}
expect(RPAR, "Expecting ')'");
myBuilder.restoreNewlinesState();
}
/*
* bindingPattern
* : "val" SimpleName binding?
* ;
*
* binding
* : "is" pattern
* : "!is" pattern
* : "in" element
* : "!in" element
* : ":" type
* ;
*/
private void parseBindingPattern() {
assert _at(VAL_KEYWORD);
PsiBuilder.Marker declaration = mark();
advance(); // VAL_KEYWORD
expect(IDENTIFIER, "Expecting an identifier");
if (at(COLON)) {
advance(); // EQ
myJetParsing.parseTypeRef();
declaration.done(PROPERTY);
}
else {
declaration.done(PROPERTY);
PsiBuilder.Marker subCondition = mark();
if (at(IS_KEYWORD) || at(NOT_IS)) {
advance(); // IS_KEYWORD or NOT_IS
parsePattern();
subCondition.done(WHEN_CONDITION_IS_PATTERN);
}
else if (at(IN_KEYWORD) || at(NOT_IN)) {
PsiBuilder.Marker mark = mark();
advance(); // IN_KEYWORD ot NOT_IN
mark.done(OPERATION_REFERENCE);
parseExpression();
subCondition.done(WHEN_CONDITION_IN_RANGE);
}
else {
subCondition.drop();
}
}
}
/* /*
* arrayAccess * arrayAccess
* : "[" element{","} "]" * : "[" element{","} "]"
@@ -1,11 +1,6 @@
fun foo() { fun foo() {
when (e) { when (e) {
is [a] val a -> d
is [a] val a is foo -> d
is [a] * -> d
is [a] 2 -> d
is [a] T -> d is [a] T -> d
is [a] T #() -> d
} }
} }
+1 -134
View File
@@ -26,7 +26,7 @@ JetFile: AttributesOnPatterns.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BINDING_PATTERN TYPE_REFERENCE
ANNOTATION ANNOTATION
PsiElement(LBRACKET)('[') PsiElement(LBRACKET)('[')
ANNOTATION_ENTRY ANNOTATION_ENTRY
@@ -37,111 +37,6 @@ JetFile: AttributesOnPatterns.jet
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']') PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
BINDING_PATTERN
ANNOTATION
PsiElement(LBRACKET)('[')
ANNOTATION_ENTRY
CONSTRUCTOR_CALLEE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
WILDCARD_PATTERN
ANNOTATION
PsiElement(LBRACKET)('[')
ANNOTATION_ENTRY
CONSTRUCTOR_CALLEE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
ANNOTATION
PsiElement(LBRACKET)('[')
ANNOTATION_ENTRY
CONSTRUCTOR_CALLEE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
ANNOTATION
PsiElement(LBRACKET)('[')
ANNOTATION_ENTRY
CONSTRUCTOR_CALLEE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T') PsiElement(IDENTIFIER)('T')
@@ -151,34 +46,6 @@ JetFile: AttributesOnPatterns.jet
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d') PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
ANNOTATION
PsiElement(LBRACKET)('[')
ANNOTATION_ENTRY
CONSTRUCTOR_CALLEE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
-8
View File
@@ -24,7 +24,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -39,7 +38,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -58,7 +56,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -82,7 +79,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -112,7 +108,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -147,7 +142,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -167,7 +161,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -190,7 +183,6 @@ JetFile: CallsInWhen.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
@@ -22,16 +22,17 @@ fun foo() {
when (e) { when (e) {
is T is T
#() -> a <X>
-> a
in f in f
() -> a () -> a
!is T !is T
#() -> a <X> -> a
!in f !in f
() -> a () -> a
f f
() -> a () -> a
} }
val f = a is T val f = a is T
#() <X>
} }
+32 -18
View File
@@ -240,15 +240,20 @@ JetFile: NewlinesInParentheses.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T') PsiElement(IDENTIFIER)('T')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
DECOMPOSER_ARGUMENT_LIST TYPE_ARGUMENT_LIST
PsiElement(HASH)('#') PsiElement(LT)('<')
PsiElement(LPAR)('(') TYPE_PROJECTION
PsiElement(RPAR)(')') TYPE_REFERENCE
PsiWhiteSpace(' ') USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X')
PsiElement(GT)('>')
PsiWhiteSpace('\n ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -276,14 +281,19 @@ JetFile: NewlinesInParentheses.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(NOT_IS)('!is') PsiElement(NOT_IS)('!is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T') PsiElement(IDENTIFIER)('T')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
DECOMPOSER_ARGUMENT_LIST TYPE_ARGUMENT_LIST
PsiElement(HASH)('#') PsiElement(LT)('<')
PsiElement(LPAR)('(') TYPE_PROJECTION
PsiElement(RPAR)(')') TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X')
PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -310,7 +320,6 @@ JetFile: NewlinesInParentheses.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
CALL_EXPRESSION CALL_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f') PsiElement(IDENTIFIER)('f')
@@ -333,20 +342,25 @@ JetFile: NewlinesInParentheses.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BINARY_WITH_PATTERN IS_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T') PsiElement(IDENTIFIER)('T')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
DECOMPOSER_ARGUMENT_LIST TYPE_ARGUMENT_LIST
PsiElement(HASH)('#') PsiElement(LT)('<')
PsiElement(LPAR)('(') TYPE_PROJECTION
PsiElement(RPAR)(')') TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X')
PsiElement(GT)('>')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
+1 -2
View File
@@ -12,14 +12,13 @@ JetFile: NotIsAndNotIn.jet
BLOCK BLOCK
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
BINARY_WITH_PATTERN IS_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(NOT_IS)('!is') PsiElement(NOT_IS)('!is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
+1 -1
View File
@@ -7,7 +7,7 @@ package foo.bar {
package.foo.bar.X package.foo.bar.X
package.foo.bar.X() package.foo.bar.X()
when (e) { when (e) {
is package.foo.bar.X #(x) -> {} is package.foo.bar.X<package.Y> -> {}
} }
} }
} }
+11 -13
View File
@@ -93,11 +93,10 @@ JetFile: RootNamespace.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
DOT_QUALIFIED_EXPRESSION USER_TYPE
DOT_QUALIFIED_EXPRESSION USER_TYPE
DOT_QUALIFIED_EXPRESSION USER_TYPE
ROOT_NAMESPACE
PsiElement(package)('package') PsiElement(package)('package')
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -108,17 +107,16 @@ JetFile: RootNamespace.jet
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X') PsiElement(IDENTIFIER)('X')
PsiWhiteSpace(' ') TYPE_ARGUMENT_LIST
DECOMPOSER_ARGUMENT_LIST PsiElement(LT)('<')
PsiElement(HASH)('#') TYPE_PROJECTION
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
PsiElement(package)('package')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x') PsiElement(IDENTIFIER)('Y')
PsiElement(RPAR)(')') PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -992,7 +992,6 @@ JetFile: ShortAnnotations.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -320,14 +320,13 @@ JetFile: TypeExpressionAmbiguities_ERR.jet
PsiErrorElement:Expecting a '>' PsiErrorElement:Expecting a '>'
<empty list> <empty list>
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
BINARY_WITH_PATTERN IS_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x') PsiElement(IDENTIFIER)('x')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
+13 -27
View File
@@ -16,17 +16,14 @@ fun foo() {
is a -> foo is a -> foo
} }
when (e) { when (e) {
is Tree #(a, b) -> foo is Tree<a, b> -> foo
is null -> foo null -> foo
is 1 -> foo 1 -> foo
is A.b -> foo A.b -> foo
is 1.0 -> foo 1.0 -> foo
is 'c' -> foo 'c' -> foo
is "sadfsa" -> foo "sadfsa" -> foo
is """ddd""" -> foo """ddd""" -> foo
is * -> foo
is val a is Foo -> foo
is #(val a is Foo, b) -> foo
} }
when (when(when (e) { when (when(when (e) {
@@ -40,22 +37,13 @@ fun foo() {
fun foo() { fun foo() {
when (val a = e) { when (val a = e) {
is Tree -> c is Tree -> c
is Tree #(null, val r) -> c is a.a<a, b> -> c
is a #(a, b) -> c is package.a.a<a, b> -> c
is a #(a, b) -> c
is a.a #(a, b) -> c
is a.a #(foo = a, bar = b) -> c
is package.a.a #(a, b) -> c
is a #(val a is T, b) -> c
is a #(b, 1) -> c
in 1..2 -> dsf in 1..2 -> dsf
!in 2 -> sd !in 2 -> sd
!is t -> d !is t -> d
is (foo) -> Bar -> fgpp (foo) -> Bar -> fgpp
is #(1, val a is Foo, *, Foo, bar) -> d
is #(Foo, val a in 1..2, *, val _ !is Foo, val bar is foo.bar<a> #(a)) -> d
is #(Int, Int) -> 2 is #(Int, Int) -> 2
is val a : Foo -> 2
else -> foo else -> foo
} }
} }
@@ -63,11 +51,9 @@ fun foo() {
fun foo() { fun foo() {
when (val a = e) { when (val a = e) {
is Tree, is Tree,
is Tree #(null, val r), is a<a, b> -> c
is a #(a, b) -> c
1, foo(), bar, 2 + 3, 1, foo(), bar, 2 + 3,
is a #(a, b) -> c is a<a, b> -> c
is a.a #(val b, b) -> c
} }
} }
+45 -627
View File
@@ -45,7 +45,6 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -112,7 +111,6 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -139,28 +137,25 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Tree') PsiElement(IDENTIFIER)('Tree')
PsiWhiteSpace(' ') TYPE_ARGUMENT_LIST
DECOMPOSER_ARGUMENT_LIST PsiElement(LT)('<')
PsiElement(HASH)('#') TYPE_PROJECTION
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY TYPE_PROJECTION
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b') PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')') PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -168,10 +163,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
NULL NULL
PsiElement(null)('null') PsiElement(null)('null')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -181,10 +173,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -194,13 +183,8 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is') DOT_QUALIFIED_EXPRESSION
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A') PsiElement(IDENTIFIER)('A')
PsiElement(DOT)('.') PsiElement(DOT)('.')
@@ -213,10 +197,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
FLOAT_CONSTANT FLOAT_CONSTANT
PsiElement(FLOAT_CONSTANT)('1.0') PsiElement(FLOAT_CONSTANT)('1.0')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -226,10 +207,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
CHARACTER_CONSTANT CHARACTER_CONSTANT
PsiElement(CHARACTER_LITERAL)(''c'') PsiElement(CHARACTER_LITERAL)(''c'')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -239,10 +217,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
STRING_TEMPLATE STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"') PsiElement(OPEN_QUOTE)('"')
LITERAL_STRING_TEMPLATE_ENTRY LITERAL_STRING_TEMPLATE_ENTRY
@@ -255,10 +230,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION_PATTERN
STRING_TEMPLATE STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"""') PsiElement(OPEN_QUOTE)('"""')
LITERAL_STRING_TEMPLATE_ENTRY LITERAL_STRING_TEMPLATE_ENTRY
@@ -270,79 +242,6 @@ JetFile: When.jet
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
WILDCARD_PATTERN
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TUPLE_PATTERN
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN WHEN
@@ -408,7 +307,6 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -423,126 +321,29 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Tree')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('r')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') TYPE_ARGUMENT_LIST
DECOMPOSER_ARGUMENT_LIST PsiElement(LT)('<')
PsiElement(HASH)('#') TYPE_PROJECTION
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY TYPE_PROJECTION
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b') PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')') PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -553,54 +354,9 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
DOT_QUALIFIED_EXPRESSION
DOT_QUALIFIED_EXPRESSION
ROOT_NAMESPACE
PsiElement(package)('package') PsiElement(package)('package')
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -608,96 +364,21 @@ JetFile: When.jet
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') TYPE_ARGUMENT_LIST
DECOMPOSER_ARGUMENT_LIST PsiElement(LT)('<')
PsiElement(HASH)('#') TYPE_PROJECTION
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY TYPE_PROJECTION
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b') PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')') PsiElement(GT)('>')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -739,7 +420,6 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(NOT_IS)('!is') PsiElement(NOT_IS)('!is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -751,11 +431,10 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('d') PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is') PARENTHESIZED
PsiWhiteSpace(' ')
PsiErrorElement:Pattern expected
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -766,7 +445,6 @@ JetFile: When.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
PsiErrorElement:Expecting an expression, is-condition or in-condition PsiErrorElement:Expecting an expression, is-condition or in-condition
<empty list> <empty list>
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -778,176 +456,16 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN TYPE_REFERENCE
TUPLE_TYPE
PsiElement(HASH)('#') PsiElement(HASH)('#')
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
WILDCARD_PATTERN
PsiElement(MUL)('*')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TUPLE_PATTERN
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
WHEN_CONDITION_IN_RANGE
OPERATION_REFERENCE
PsiElement(in)('in')
PsiWhiteSpace(' ')
BINARY_EXPRESSION
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
OPERATION_REFERENCE
PsiElement(RANGE)('..')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
WILDCARD_PATTERN
PsiElement(MUL)('*')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('_')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(NOT_IS)('!is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(GT)('>')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RPAR)(')')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
TUPLE_PATTERN
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int') PsiElement(IDENTIFIER)('Int')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -959,28 +477,6 @@ JetFile: When.jet
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2') PsiElement(INTEGER_LITERAL)('2')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
PsiElement(else)('else') PsiElement(else)('else')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1025,7 +521,6 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
@@ -1035,53 +530,25 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
REFERENCE_EXPRESSION USER_TYPE
PsiElement(IDENTIFIER)('Tree')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('r')
PsiElement(RPAR)(')')
PsiElement(COMMA)(',')
PsiWhiteSpace('\n ')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') TYPE_ARGUMENT_LIST
DECOMPOSER_ARGUMENT_LIST PsiElement(LT)('<')
PsiElement(HASH)('#') TYPE_PROJECTION
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY TYPE_PROJECTION
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b') PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')') PsiElement(GT)('>')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1090,13 +557,11 @@ JetFile: When.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
CALL_EXPRESSION CALL_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
@@ -1106,13 +571,11 @@ JetFile: When.jet
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar') PsiElement(IDENTIFIER)('bar')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
BINARY_EXPRESSION BINARY_EXPRESSION
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2') PsiElement(INTEGER_LITERAL)('2')
@@ -1127,64 +590,25 @@ JetFile: When.jet
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
DECOMPOSER_PATTERN TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') TYPE_ARGUMENT_LIST
DECOMPOSER_ARGUMENT_LIST PsiElement(LT)('<')
PsiElement(HASH)('#') TYPE_PROJECTION
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY TYPE_PROJECTION
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b') PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')') PsiElement(GT)('>')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('c')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('b')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1232,7 +656,6 @@ JetFile: When.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('3') PsiElement(INTEGER_LITERAL)('3')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1246,7 +669,6 @@ JetFile: When.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
BINARY_EXPRESSION BINARY_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('i') PsiElement(IDENTIFIER)('i')
@@ -1267,7 +689,6 @@ JetFile: When.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
BINARY_EXPRESSION BINARY_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('j') PsiElement(IDENTIFIER)('j')
@@ -1280,7 +701,6 @@ JetFile: When.jet
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
BINARY_EXPRESSION BINARY_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('j') PsiElement(IDENTIFIER)('j')
@@ -1301,15 +721,13 @@ JetFile: When.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN IS_EXPRESSION
BINARY_WITH_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('i') PsiElement(IDENTIFIER)('i')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(is)('is') PsiElement(is)('is')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
+2 -2
View File
@@ -20,7 +20,7 @@ fun foo() {
else -> else ->
} }
when (e) { when (e) {
is - -> foo - -> foo
is #(, , 1, , ) -> foo #(, , 1, , ) -> foo
} }
} }
+15 -20
View File
@@ -37,7 +37,7 @@ JetFile: When_ERR.jet
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiErrorElement:Expecting a type or a decomposer pattern PsiErrorElement:Expecting a type
<empty list> <empty list>
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -48,7 +48,7 @@ JetFile: When_ERR.jet
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(NOT_IS)('!is') PsiElement(NOT_IS)('!is')
PsiErrorElement:Expecting a type or a decomposer pattern PsiErrorElement:Expecting a type
<empty list> <empty list>
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -82,7 +82,6 @@ JetFile: When_ERR.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
PsiErrorElement:Expecting an expression, is-condition or in-condition PsiErrorElement:Expecting an expression, is-condition or in-condition
<empty list> <empty list>
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -110,7 +109,7 @@ JetFile: When_ERR.jet
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is') PsiElement(is)('is')
PsiErrorElement:Expecting a type or a decomposer pattern PsiErrorElement:Expecting a type
<empty list> <empty list>
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -120,7 +119,7 @@ JetFile: When_ERR.jet
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_IS_PATTERN
PsiElement(NOT_IS)('!is') PsiElement(NOT_IS)('!is')
PsiErrorElement:Expecting a type or a decomposer pattern PsiErrorElement:Expecting a type
<empty list> <empty list>
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -164,7 +163,6 @@ JetFile: When_ERR.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
PsiErrorElement:Expecting an expression, is-condition or in-condition PsiErrorElement:Expecting an expression, is-condition or in-condition
<empty list> <empty list>
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
@@ -196,11 +194,12 @@ JetFile: When_ERR.jet
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is') PREFIX_EXPRESSION
PsiWhiteSpace(' ') OPERATION_REFERENCE
PsiErrorElement:Pattern expected
PsiElement(MINUS)('-') PsiElement(MINUS)('-')
PsiErrorElement:Expecting an element
<empty list>
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -208,27 +207,23 @@ JetFile: When_ERR.jet
PsiElement(IDENTIFIER)('foo') PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_IS_PATTERN WHEN_CONDITION_WITH_EXPRESSION
PsiElement(is)('is') TUPLE
PsiWhiteSpace(' ')
TUPLE_PATTERN
PsiElement(HASH)('#') PsiElement(HASH)('#')
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiErrorElement:Expecting a pattern PsiErrorElement:Expecting a tuple entry (element)
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiErrorElement:Expecting a pattern PsiErrorElement:Expecting a tuple entry (element)
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiErrorElement:Expecting a pattern PsiErrorElement:Expecting a tuple entry (element)
PsiElement(COMMA)(',') PsiElement(COMMA)(',')
PsiErrorElement:Expecting a pattern PsiErrorElement:Expecting an expression
<empty list> <empty list>
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -99,14 +99,14 @@ class BinaryTree<T> : IMutableSet<T> {
private fun remove(node : TreeNode) { private fun remove(node : TreeNode) {
when (node) { when (node) {
is TreeNode #(null, null) -> replace(node, null) //is TreeNode #(null, null) -> replace(node, null)
is TreeNode #(null, right) -> replace(node, right) //is TreeNode #(null, right) -> replace(node, right)
is TreeNode #(left, null) -> replace(node, left) //is TreeNode #(left, null) -> replace(node, left)
is TreeNode #(left, right) -> { //is TreeNode #(left, right) -> {
val min = min(node.right) // val min = min(node.right)
node.value = min.value // node.value = min.value
remove(min) // remove(min)
} //}
} }
fun replace(node : TreeNode, replace : TreeNode) { fun replace(node : TreeNode, replace : TreeNode) {
+8 -211
View File
@@ -450,7 +450,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('EQ') PsiElement(IDENTIFIER)('EQ')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -461,7 +460,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('LS') PsiElement(IDENTIFIER)('LS')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -488,7 +486,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('GT') PsiElement(IDENTIFIER)('GT')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -749,7 +746,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('EQ') PsiElement(IDENTIFIER)('EQ')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -760,7 +756,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('LS') PsiElement(IDENTIFIER)('LS')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -799,7 +794,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('GT') PsiElement(IDENTIFIER)('GT')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -947,7 +941,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('EQ') PsiElement(IDENTIFIER)('EQ')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -961,7 +954,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('LS') PsiElement(IDENTIFIER)('LS')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1047,7 +1039,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('GT') PsiElement(IDENTIFIER)('GT')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1318,7 +1309,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('EQ') PsiElement(IDENTIFIER)('EQ')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1329,7 +1319,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('LS') PsiElement(IDENTIFIER)('LS')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1351,7 +1340,6 @@ JetFile: BinaryTree.jet
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY WHEN_ENTRY
WHEN_CONDITION_WITH_EXPRESSION WHEN_CONDITION_WITH_EXPRESSION
EXPRESSION_PATTERN
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('GT') PsiElement(IDENTIFIER)('GT')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
@@ -1410,212 +1398,21 @@ JetFile: BinaryTree.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY PsiComment(EOL_COMMENT)('//is TreeNode #(null, null) -> replace(node, null)')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('TreeNode')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('replace')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('node')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
NULL
PsiElement(null)('null')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY PsiComment(EOL_COMMENT)('//is TreeNode #(null, right) -> replace(node, right)')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('TreeNode')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('right')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('replace')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('node')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('right')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY PsiComment(EOL_COMMENT)('//is TreeNode #(left, null) -> replace(node, left)')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('TreeNode')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('left')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('replace')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('node')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('left')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN_ENTRY PsiComment(EOL_COMMENT)('//is TreeNode #(left, right) -> {')
WHEN_CONDITION_IS_PATTERN
PsiElement(is)('is')
PsiWhiteSpace(' ')
DECOMPOSER_PATTERN
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('TreeNode')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(HASH)('#')
PsiElement(LPAR)('(')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('left')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('right')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PROPERTY PsiComment(EOL_COMMENT)('// val min = min(node.right)')
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('min')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('min')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('node')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('right')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
BINARY_EXPRESSION PsiComment(EOL_COMMENT)('// node.value = min.value')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('node')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('value')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('min')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('value')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
CALL_EXPRESSION PsiComment(EOL_COMMENT)('// remove(min)')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('remove')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('min')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}') PsiComment(EOL_COMMENT)('//}')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
+1 -1
View File
@@ -153,7 +153,7 @@ longTemplate
; ;
isRHS isRHS
: pattern : type
; ;
declaration declaration
+3 -40
View File
@@ -10,10 +10,10 @@ when
"}" "}"
; ;
// TODO : consider empty after ->
whenEntry whenEntry
// TODO : consider empty after => : whenCondition{","} "->" expression SEMI
: whenCondition{","} "=>" expression SEMI : "else" "->" expression SEMI
: "else" "=>" expression SEMI
; ;
whenCondition whenCondition
@@ -21,40 +21,3 @@ whenCondition
: ("in" | "!in") expression : ("in" | "!in") expression
: ("is" | "!is") isRHS : ("is" | "!is") isRHS
; ;
pattern
: annotations pattern
: type // '[a] T' is a type-pattern 'T' with an attribute '[a]', not a type-pattern '[a] T'
// this makes sense because is-check may be different for a type with attributes
: tuplePattern
: decomposerPattern
: constantPattern
: bindingPattern
: "*" // wildcard pattern
;
decomposerPattern
: type
// TODO : typeArguments will be consumed by the expression
: elvisExpression typeArguments? tuplePattern
;
constantPattern
: literalConstant
;
tuplePattern
: "(" (((SimpleName "=")? pattern){","})? ")"
;
bindingPattern
: "val" SimpleName binding?
;
binding
: "is" pattern
: "!is" pattern
: "in" expression
: "!in" expression
: ":" type
;