diff --git a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java index 6e09267c53b..a54b8e46855 100644 --- a/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java +++ b/compiler/frontend/src/org/jetbrains/jet/JetNodeTypes.java @@ -129,7 +129,7 @@ public interface JetNodeTypes { JetNodeType SUPER_EXPRESSION = new JetNodeType("SUPER_EXPRESSION", JetSuperExpression.class); JetNodeType BINARY_EXPRESSION = new JetNodeType("BINARY_EXPRESSION", JetBinaryExpression.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 POSTFIX_EXPRESSION = new JetNodeType("POSTFIX_EXPRESSION", JetPostfixExpression.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 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_ENTRY = new JetNodeType("WHEN_ENTRY", JetWhenEntry.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 a8270eff304..52fed0377c7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -162,9 +162,8 @@ public class JetExpressionParsing extends AbstractJetParsing { @Override public JetNodeType parseRightHandSide(IElementType operation, JetExpressionParsing parser) { if (operation == IS_KEYWORD || operation == NOT_IS) { - parser.parsePattern(); - - return BINARY_WITH_PATTERN; + parser.myJetParsing.parseTypeRef(); + return IS_EXPRESSION; } return super.parseRightHandSide(operation, parser); @@ -850,186 +849,25 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // IS_KEYWORD or NOT_IS if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { - error("Expecting a type or a decomposer pattern"); + error("Expecting a type"); } else { - parsePattern(); + myJetParsing.parseTypeRef(); } condition.done(WHEN_CONDITION_IS_PATTERN); } else { - PsiBuilder.Marker expressionPattern = mark(); if (atSet(WHEN_CONDITION_RECOVERY_SET_WITH_ARROW)) { error("Expecting an expression, is-condition or in-condition"); } else { parseExpression(); } - expressionPattern.done(EXPRESSION_PATTERN); condition.done(WHEN_CONDITION_EXPRESSION); } 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 * : "[" element{","} "]" diff --git a/compiler/testData/psi/AttributesOnPatterns.jet b/compiler/testData/psi/AttributesOnPatterns.jet index c485e7ca69a..282065641ff 100644 --- a/compiler/testData/psi/AttributesOnPatterns.jet +++ b/compiler/testData/psi/AttributesOnPatterns.jet @@ -1,11 +1,6 @@ fun foo() { 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 } } diff --git a/compiler/testData/psi/AttributesOnPatterns.txt b/compiler/testData/psi/AttributesOnPatterns.txt index 70fe4d48d45..3c963e0566f 100644 --- a/compiler/testData/psi/AttributesOnPatterns.txt +++ b/compiler/testData/psi/AttributesOnPatterns.txt @@ -26,7 +26,7 @@ JetFile: AttributesOnPatterns.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - BINDING_PATTERN + TYPE_REFERENCE ANNOTATION PsiElement(LBRACKET)('[') ANNOTATION_ENTRY @@ -37,142 +37,9 @@ JetFile: AttributesOnPatterns.jet PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') 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 - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiWhiteSpace(' ') - PsiElement(ARROW)('->') - PsiWhiteSpace(' ') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('d') - 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)(')') + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') diff --git a/compiler/testData/psi/CallsInWhen.txt b/compiler/testData/psi/CallsInWhen.txt index 3eb1e46b6b8..c752a2aea22 100644 --- a/compiler/testData/psi/CallsInWhen.txt +++ b/compiler/testData/psi/CallsInWhen.txt @@ -24,13 +24,30 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('foo') + PsiWhiteSpace(' ') + PsiElement(ARROW)('->') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace('\n ') + WHEN_ENTRY + WHEN_CONDITION_WITH_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + CALL_EXPRESSION REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('foo') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -39,17 +56,21 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + CALL_EXPRESSION REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') - VALUE_ARGUMENT_LIST - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') + PsiElement(IDENTIFIER)('foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -58,22 +79,27 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + CALL_EXPRESSION REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') - TYPE_ARGUMENT_LIST - PsiElement(LT)('<') - TYPE_PROJECTION - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiElement(GT)('>') + PsiElement(IDENTIFIER)('foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -82,28 +108,32 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + CALL_EXPRESSION REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') - TYPE_ARGUMENT_LIST - PsiElement(LT)('<') - TYPE_PROJECTION - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiElement(GT)('>') - VALUE_ARGUMENT_LIST - PsiElement(LPAR)('(') - VALUE_ARGUMENT - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(RPAR)(')') + PsiElement(IDENTIFIER)('foo') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + VALUE_ARGUMENT + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + VALUE_ARGUMENT + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('d') + PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -112,33 +142,17 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') - TYPE_ARGUMENT_LIST - PsiElement(LT)('<') - TYPE_PROJECTION - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiElement(GT)('>') - VALUE_ARGUMENT_LIST - PsiElement(LPAR)('(') - VALUE_ARGUMENT - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - VALUE_ARGUMENT - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('d') - PsiElement(RPAR)(')') + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + FUNCTION_LITERAL_EXPRESSION + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + BLOCK + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('bar') + PsiElement(RBRACE)('}') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -147,18 +161,20 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - FUNCTION_LITERAL_EXPRESSION - FUNCTION_LITERAL - PsiElement(LBRACE)('{') - BLOCK + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + FUNCTION_LITERAL_EXPRESSION + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + BLOCK + PREFIX_EXPRESSION + OPERATION_REFERENCE + PsiElement(EXCL)('!') REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('bar') - PsiElement(RBRACE)('}') + PsiElement(RBRACE)('}') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -167,50 +183,26 @@ JetFile: CallsInWhen.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - FUNCTION_LITERAL_EXPRESSION - FUNCTION_LITERAL - PsiElement(LBRACE)('{') - BLOCK - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(EXCL)('!') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('bar') - PsiElement(RBRACE)('}') - PsiWhiteSpace(' ') - PsiElement(ARROW)('->') - PsiWhiteSpace(' ') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiWhiteSpace('\n ') - WHEN_ENTRY - WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - DOT_QUALIFIED_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') - PsiElement(DOT)('.') - FUNCTION_LITERAL_EXPRESSION - FUNCTION_LITERAL - PsiElement(LBRACE)('{') - VALUE_PARAMETER_LIST - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') - PsiWhiteSpace(' ') - PsiElement(ARROW)('->') - PsiWhiteSpace(' ') - BLOCK - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(EXCL)('!') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('bar') - PsiElement(RBRACE)('}') + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiElement(DOT)('.') + FUNCTION_LITERAL_EXPRESSION + FUNCTION_LITERAL + PsiElement(LBRACE)('{') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(ARROW)('->') + PsiWhiteSpace(' ') + BLOCK + PREFIX_EXPRESSION + OPERATION_REFERENCE + PsiElement(EXCL)('!') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('bar') + PsiElement(RBRACE)('}') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') diff --git a/compiler/testData/psi/NewlinesInParentheses.jet b/compiler/testData/psi/NewlinesInParentheses.jet index 277f48e644a..d9a43bd550a 100644 --- a/compiler/testData/psi/NewlinesInParentheses.jet +++ b/compiler/testData/psi/NewlinesInParentheses.jet @@ -21,17 +21,18 @@ fun foo() { + d] when (e) { - is T - #() -> a + is T + + -> a in f () -> a !is T - #() -> a + -> a !in f () -> a f () -> a } val f = a is T - #() + } \ No newline at end of file diff --git a/compiler/testData/psi/NewlinesInParentheses.txt b/compiler/testData/psi/NewlinesInParentheses.txt index cc13dc47a5d..0adcbc31284 100644 --- a/compiler/testData/psi/NewlinesInParentheses.txt +++ b/compiler/testData/psi/NewlinesInParentheses.txt @@ -240,15 +240,20 @@ JetFile: NewlinesInParentheses.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - DECOMPOSER_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiWhiteSpace(' \n ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') - PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiWhiteSpace('\n ') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('X') + PsiElement(GT)('>') + PsiWhiteSpace('\n ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') REFERENCE_EXPRESSION @@ -276,14 +281,19 @@ JetFile: NewlinesInParentheses.jet WHEN_CONDITION_IS_PATTERN PsiElement(NOT_IS)('!is') PsiWhiteSpace(' ') - DECOMPOSER_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiWhiteSpace('\n ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiWhiteSpace('\n ') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('X') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -310,14 +320,13 @@ JetFile: NewlinesInParentheses.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('f') - PsiWhiteSpace('\n ') - VALUE_ARGUMENT_LIST - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') + CALL_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('f') + PsiWhiteSpace('\n ') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -333,20 +342,25 @@ JetFile: NewlinesInParentheses.jet PsiWhiteSpace(' ') PsiElement(EQ)('=') PsiWhiteSpace(' ') - BINARY_WITH_PATTERN + IS_EXPRESSION REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') PsiWhiteSpace(' ') OPERATION_REFERENCE PsiElement(is)('is') PsiWhiteSpace(' ') - DECOMPOSER_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('T') - PsiWhiteSpace('\n ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('T') + PsiWhiteSpace('\n ') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('X') + PsiElement(GT)('>') PsiWhiteSpace('\n') PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/compiler/testData/psi/NotIsAndNotIn.txt b/compiler/testData/psi/NotIsAndNotIn.txt index 995568bbb8f..edeb0178b98 100644 --- a/compiler/testData/psi/NotIsAndNotIn.txt +++ b/compiler/testData/psi/NotIsAndNotIn.txt @@ -12,18 +12,17 @@ JetFile: NotIsAndNotIn.jet BLOCK PsiElement(LBRACE)('{') PsiWhiteSpace('\n ') - BINARY_WITH_PATTERN + IS_EXPRESSION REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') PsiWhiteSpace(' ') OPERATION_REFERENCE PsiElement(NOT_IS)('!is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('B') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('B') PsiWhiteSpace('\n ') BINARY_EXPRESSION REFERENCE_EXPRESSION diff --git a/compiler/testData/psi/RootNamespace.jet b/compiler/testData/psi/RootNamespace.jet index 5dd54de2c52..fddf5c76bbb 100644 --- a/compiler/testData/psi/RootNamespace.jet +++ b/compiler/testData/psi/RootNamespace.jet @@ -7,7 +7,7 @@ package foo.bar { package.foo.bar.X package.foo.bar.X() when (e) { - is package.foo.bar.X #(x) -> {} + is package.foo.bar.X -> {} } } } \ No newline at end of file diff --git a/compiler/testData/psi/RootNamespace.txt b/compiler/testData/psi/RootNamespace.txt index 71de1d19f32..52856cc5cf5 100644 --- a/compiler/testData/psi/RootNamespace.txt +++ b/compiler/testData/psi/RootNamespace.txt @@ -93,12 +93,11 @@ JetFile: RootNamespace.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - DECOMPOSER_PATTERN - DOT_QUALIFIED_EXPRESSION - DOT_QUALIFIED_EXPRESSION - DOT_QUALIFIED_EXPRESSION - ROOT_NAMESPACE - PsiElement(package)('package') + TYPE_REFERENCE + USER_TYPE + USER_TYPE + USER_TYPE + PsiElement(package)('package') PsiElement(DOT)('.') REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('foo') @@ -108,17 +107,16 @@ JetFile: RootNamespace.jet PsiElement(DOT)('.') REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('X') - PsiWhiteSpace(' ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE + PsiElement(package)('package') + PsiElement(DOT)('.') REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('x') - PsiElement(RPAR)(')') + PsiElement(IDENTIFIER)('Y') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') diff --git a/compiler/testData/psi/ShortAnnotations.txt b/compiler/testData/psi/ShortAnnotations.txt index f70d859a720..b979687731f 100644 --- a/compiler/testData/psi/ShortAnnotations.txt +++ b/compiler/testData/psi/ShortAnnotations.txt @@ -992,9 +992,8 @@ JetFile: ShortAnnotations.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') diff --git a/compiler/testData/psi/TypeExpressionAmbiguities_ERR.txt b/compiler/testData/psi/TypeExpressionAmbiguities_ERR.txt index 5da65ed6b83..9490dc7e263 100644 --- a/compiler/testData/psi/TypeExpressionAmbiguities_ERR.txt +++ b/compiler/testData/psi/TypeExpressionAmbiguities_ERR.txt @@ -320,28 +320,27 @@ JetFile: TypeExpressionAmbiguities_ERR.jet PsiErrorElement:Expecting a '>' PsiWhiteSpace('\n ') - BINARY_WITH_PATTERN + IS_EXPRESSION REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('x') PsiWhiteSpace(' ') OPERATION_REFERENCE PsiElement(is)('is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Foo') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Foo') + PsiWhiteSpace(' ') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') PsiWhiteSpace(' ') - TYPE_ARGUMENT_LIST - PsiElement(LT)('<') - PsiWhiteSpace(' ') - TYPE_PROJECTION - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('bar') - PsiErrorElement:Expecting a '>' - + TYPE_PROJECTION + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('bar') + PsiErrorElement:Expecting a '>' + PsiWhiteSpace('\n') PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/compiler/testData/psi/When.jet b/compiler/testData/psi/When.jet index 2931b890ae5..17330c73d72 100644 --- a/compiler/testData/psi/When.jet +++ b/compiler/testData/psi/When.jet @@ -16,17 +16,14 @@ fun foo() { is a -> foo } when (e) { - is Tree #(a, b) -> foo - is null -> foo - is 1 -> foo - is A.b -> foo - is 1.0 -> foo - is 'c' -> foo - is "sadfsa" -> foo - is """ddd""" -> foo - is * -> foo - is val a is Foo -> foo - is #(val a is Foo, b) -> foo + is Tree -> foo + null -> foo + 1 -> foo + A.b -> foo + 1.0 -> foo + 'c' -> foo + "sadfsa" -> foo + """ddd""" -> foo } when (when(when (e) { @@ -40,22 +37,13 @@ fun foo() { fun foo() { when (val a = e) { is Tree -> c - is Tree #(null, val r) -> c - is 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 + is a.a -> c + is package.a.a -> c in 1..2 -> dsf !in 2 -> sd !is t -> d - is (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)) -> d + (foo) -> Bar -> fgpp is #(Int, Int) -> 2 - is val a : Foo -> 2 else -> foo } } @@ -63,11 +51,9 @@ fun foo() { fun foo() { when (val a = e) { is Tree, - is Tree #(null, val r), - is a #(a, b) -> c + is a -> c 1, foo(), bar, 2 + 3, - is a #(a, b) -> c - is a.a #(val b, b) -> c + is a -> c } } diff --git a/compiler/testData/psi/When.txt b/compiler/testData/psi/When.txt index 23b4319b95d..56e7d64ee0c 100644 --- a/compiler/testData/psi/When.txt +++ b/compiler/testData/psi/When.txt @@ -45,11 +45,10 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -112,11 +111,10 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('a') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -139,28 +137,25 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - DECOMPOSER_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Tree') - PsiWhiteSpace(' ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Tree') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('b') - PsiElement(RPAR)(')') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -168,12 +163,9 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - EXPRESSION_PATTERN - NULL - PsiElement(null)('null') + WHEN_CONDITION_WITH_EXPRESSION + NULL + PsiElement(null)('null') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -181,12 +173,9 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - EXPRESSION_PATTERN - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') + WHEN_CONDITION_WITH_EXPRESSION + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -194,18 +183,13 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('A') - PsiElement(DOT)('.') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('b') + WHEN_CONDITION_WITH_EXPRESSION + DOT_QUALIFIED_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('A') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('b') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -213,12 +197,9 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - EXPRESSION_PATTERN - FLOAT_CONSTANT - PsiElement(FLOAT_CONSTANT)('1.0') + WHEN_CONDITION_WITH_EXPRESSION + FLOAT_CONSTANT + PsiElement(FLOAT_CONSTANT)('1.0') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -226,12 +207,9 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - EXPRESSION_PATTERN - CHARACTER_CONSTANT - PsiElement(CHARACTER_LITERAL)(''c'') + WHEN_CONDITION_WITH_EXPRESSION + CHARACTER_CONSTANT + PsiElement(CHARACTER_LITERAL)(''c'') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -239,15 +217,12 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - EXPRESSION_PATTERN - STRING_TEMPLATE - PsiElement(OPEN_QUOTE)('"') - LITERAL_STRING_TEMPLATE_ENTRY - PsiElement(REGULAR_STRING_PART)('sadfsa') - PsiElement(CLOSING_QUOTE)('"') + WHEN_CONDITION_WITH_EXPRESSION + STRING_TEMPLATE + PsiElement(OPEN_QUOTE)('"') + LITERAL_STRING_TEMPLATE_ENTRY + PsiElement(REGULAR_STRING_PART)('sadfsa') + PsiElement(CLOSING_QUOTE)('"') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -255,88 +230,12 @@ JetFile: When.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - EXPRESSION_PATTERN - STRING_TEMPLATE - PsiElement(OPEN_QUOTE)('"""') - LITERAL_STRING_TEMPLATE_ENTRY - PsiElement(REGULAR_STRING_PART)('ddd') - PsiElement(CLOSING_QUOTE)('"""') - PsiWhiteSpace(' ') - PsiElement(ARROW)('->') - PsiWhiteSpace(' ') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') - 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)(')') + WHEN_CONDITION_WITH_EXPRESSION + STRING_TEMPLATE + PsiElement(OPEN_QUOTE)('"""') + LITERAL_STRING_TEMPLATE_ENTRY + PsiElement(REGULAR_STRING_PART)('ddd') + PsiElement(CLOSING_QUOTE)('"""') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -408,141 +307,43 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Tree') + PsiWhiteSpace(' ') + PsiElement(ARROW)('->') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('c') + PsiWhiteSpace('\n ') + WHEN_ENTRY + WHEN_CONDITION_IS_PATTERN + PsiElement(is)('is') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE USER_TYPE REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Tree') - 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)('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 - 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 - 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 - PsiElement(IDENTIFIER)('a') + PsiElement(IDENTIFIER)('a') PsiElement(DOT)('.') REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiWhiteSpace(' ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('b') - PsiElement(RPAR)(')') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -553,151 +354,31 @@ JetFile: When.jet 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 - PsiElement(IDENTIFIER)('foo') - PsiWhiteSpace(' ') - PsiElement(EQ)('=') - PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - 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 - 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') + TYPE_REFERENCE + USER_TYPE + USER_TYPE + PsiElement(package)('package') PsiElement(DOT)('.') REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') PsiElement(DOT)('.') REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiWhiteSpace(' ') - DECOMPOSER_ARGUMENT_LIST - PsiElement(HASH)('#') - PsiElement(LPAR)('(') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PROJECTION 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 - 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)(')') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -739,11 +420,10 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(NOT_IS)('!is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('t') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('t') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -751,12 +431,11 @@ JetFile: When.jet PsiElement(IDENTIFIER)('d') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - PsiErrorElement:Pattern expected + WHEN_CONDITION_WITH_EXPRESSION + PARENTHESIZED PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('foo') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('foo') PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(ARROW)('->') @@ -766,9 +445,8 @@ JetFile: When.jet PsiWhiteSpace(' ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - PsiErrorElement:Expecting an expression, is-condition or in-condition - + PsiErrorElement:Expecting an expression, is-condition or in-condition + PsiElement(ARROW)('->') PsiWhiteSpace(' ') REFERENCE_EXPRESSION @@ -778,203 +456,21 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - TUPLE_PATTERN - PsiElement(HASH)('#') - 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 - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Int') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Int') - PsiElement(RPAR)(')') - PsiWhiteSpace(' ') - PsiElement(ARROW)('->') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('2') - 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)(':') + TYPE_REFERENCE + TUPLE_TYPE + PsiElement(HASH)('#') + PsiElement(LPAR)('(') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Int') + PsiElement(COMMA)(',') PsiWhiteSpace(' ') TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Foo') + PsiElement(IDENTIFIER)('Int') + PsiElement(RPAR)(')') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1025,63 +521,34 @@ JetFile: When.jet WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Tree') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Tree') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') 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)(')') - PsiElement(COMMA)(',') - PsiWhiteSpace('\n ') - 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') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('b') - PsiElement(RPAR)(')') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1090,101 +557,58 @@ JetFile: When.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + WHEN_CONDITION_WITH_EXPRESSION + CALL_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('foo') + VALUE_ARGUMENT_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + WHEN_CONDITION_WITH_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('bar') + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + WHEN_CONDITION_WITH_EXPRESSION + BINARY_EXPRESSION INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') - VALUE_ARGUMENT_LIST - PsiElement(LPAR)('(') - PsiElement(RPAR)(')') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('bar') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - BINARY_EXPRESSION - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('2') - PsiWhiteSpace(' ') - OPERATION_REFERENCE - PsiElement(PLUS)('+') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('3') + PsiElement(INTEGER_LITERAL)('2') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(PLUS)('+') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('3') PsiElement(COMMA)(',') PsiWhiteSpace('\n ') 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') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('a') - PsiElement(COMMA)(',') - PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - TYPE_PATTERN + PsiElement(COMMA)(',') + PsiWhiteSpace(' ') + TYPE_PROJECTION 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 - 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)(')') + PsiElement(GT)('>') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1232,7 +656,26 @@ JetFile: When.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('3') + PsiWhiteSpace(' ') + PsiElement(ARROW)('->') + PsiWhiteSpace(' ') + PREFIX_EXPRESSION + OPERATION_REFERENCE + PsiElement(MINUS)('-') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') + PsiWhiteSpace('\n ') + WHEN_ENTRY + WHEN_CONDITION_WITH_EXPRESSION + BINARY_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('i') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(EQEQ)('==') + PsiWhiteSpace(' ') INTEGER_CONSTANT PsiElement(INTEGER_LITERAL)('3') PsiWhiteSpace(' ') @@ -1246,50 +689,27 @@ JetFile: When.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - BINARY_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('i') - PsiWhiteSpace(' ') - OPERATION_REFERENCE - PsiElement(EQEQ)('==') - PsiWhiteSpace(' ') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('3') - PsiWhiteSpace(' ') - PsiElement(ARROW)('->') - PsiWhiteSpace(' ') - PREFIX_EXPRESSION - OPERATION_REFERENCE - PsiElement(MINUS)('-') - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') - PsiWhiteSpace('\n ') - WHEN_ENTRY - WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - BINARY_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('j') - PsiWhiteSpace(' ') - OPERATION_REFERENCE - PsiElement(LT)('<') - PsiWhiteSpace(' ') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('i') + BINARY_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('j') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(LT)('<') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('i') PsiElement(COMMA)(',') PsiWhiteSpace(' ') WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - BINARY_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('j') - PsiWhiteSpace(' ') - OPERATION_REFERENCE - PsiElement(EQEQ)('==') - PsiWhiteSpace(' ') - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('i') + BINARY_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('j') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(EQEQ)('==') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('i') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1301,19 +721,17 @@ JetFile: When.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - BINARY_WITH_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('i') - PsiWhiteSpace(' ') - OPERATION_REFERENCE - PsiElement(is)('is') - PsiWhiteSpace(' ') - TYPE_PATTERN - TYPE_REFERENCE - USER_TYPE - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('Int') + IS_EXPRESSION + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('i') + PsiWhiteSpace(' ') + OPERATION_REFERENCE + PsiElement(is)('is') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Int') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') diff --git a/compiler/testData/psi/When_ERR.jet b/compiler/testData/psi/When_ERR.jet index e6c6159056f..4cd6af25998 100644 --- a/compiler/testData/psi/When_ERR.jet +++ b/compiler/testData/psi/When_ERR.jet @@ -20,7 +20,7 @@ fun foo() { else -> } when (e) { - is - -> foo - is #(, , 1, , ) -> foo + - -> foo + #(, , 1, , ) -> foo } } \ No newline at end of file diff --git a/compiler/testData/psi/When_ERR.txt b/compiler/testData/psi/When_ERR.txt index 9887f26c64a..a91548b2518 100644 --- a/compiler/testData/psi/When_ERR.txt +++ b/compiler/testData/psi/When_ERR.txt @@ -37,7 +37,7 @@ JetFile: When_ERR.jet WHEN_ENTRY WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') - PsiErrorElement:Expecting a type or a decomposer pattern + PsiErrorElement:Expecting a type PsiWhiteSpace(' ') PsiElement(ARROW)('->') @@ -48,7 +48,7 @@ JetFile: When_ERR.jet WHEN_ENTRY WHEN_CONDITION_IS_PATTERN PsiElement(NOT_IS)('!is') - PsiErrorElement:Expecting a type or a decomposer pattern + PsiErrorElement:Expecting a type PsiWhiteSpace(' ') PsiElement(ARROW)('->') @@ -82,9 +82,8 @@ JetFile: When_ERR.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - PsiErrorElement:Expecting an expression, is-condition or in-condition - + PsiErrorElement:Expecting an expression, is-condition or in-condition + PsiElement(ARROW)('->') PsiWhiteSpace(' ') REFERENCE_EXPRESSION @@ -110,7 +109,7 @@ JetFile: When_ERR.jet WHEN_ENTRY WHEN_CONDITION_IS_PATTERN PsiElement(is)('is') - PsiErrorElement:Expecting a type or a decomposer pattern + PsiErrorElement:Expecting a type PsiWhiteSpace(' ') PsiElement(ARROW)('->') @@ -120,7 +119,7 @@ JetFile: When_ERR.jet WHEN_ENTRY WHEN_CONDITION_IS_PATTERN PsiElement(NOT_IS)('!is') - PsiErrorElement:Expecting a type or a decomposer pattern + PsiErrorElement:Expecting a type PsiWhiteSpace(' ') PsiElement(ARROW)('->') @@ -164,9 +163,8 @@ JetFile: When_ERR.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - PsiErrorElement:Expecting an expression, is-condition or in-condition - + PsiErrorElement:Expecting an expression, is-condition or in-condition + PsiElement(ARROW)('->') PsiErrorElement:Expecting an element @@ -196,11 +194,12 @@ JetFile: When_ERR.jet PsiElement(LBRACE)('{') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - PsiErrorElement:Pattern expected - PsiElement(MINUS)('-') + WHEN_CONDITION_WITH_EXPRESSION + PREFIX_EXPRESSION + OPERATION_REFERENCE + PsiElement(MINUS)('-') + PsiErrorElement:Expecting an element + PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -208,27 +207,23 @@ JetFile: When_ERR.jet PsiElement(IDENTIFIER)('foo') PsiWhiteSpace('\n ') WHEN_ENTRY - WHEN_CONDITION_IS_PATTERN - PsiElement(is)('is') - PsiWhiteSpace(' ') - TUPLE_PATTERN + WHEN_CONDITION_WITH_EXPRESSION + TUPLE PsiElement(HASH)('#') PsiElement(LPAR)('(') - PsiErrorElement:Expecting a pattern + PsiErrorElement:Expecting a tuple entry (element) PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiErrorElement:Expecting a pattern + PsiErrorElement:Expecting a tuple entry (element) PsiElement(COMMA)(',') PsiWhiteSpace(' ') - TUPLE_PATTERN_ENTRY - EXPRESSION_PATTERN - INTEGER_CONSTANT - PsiElement(INTEGER_LITERAL)('1') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiErrorElement:Expecting a pattern + PsiErrorElement:Expecting a tuple entry (element) PsiElement(COMMA)(',') - PsiErrorElement:Expecting a pattern + PsiErrorElement:Expecting an expression PsiWhiteSpace(' ') PsiElement(RPAR)(')') @@ -240,4 +235,4 @@ JetFile: When_ERR.jet PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n') - PsiElement(RBRACE)('}') + PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/compiler/testData/psi/examples/BinaryTree.jet b/compiler/testData/psi/examples/BinaryTree.jet index f63ba4a3dcf..8105a7a37ee 100644 --- a/compiler/testData/psi/examples/BinaryTree.jet +++ b/compiler/testData/psi/examples/BinaryTree.jet @@ -99,14 +99,14 @@ class BinaryTree : IMutableSet { private fun remove(node : TreeNode) { when (node) { - is TreeNode #(null, null) -> replace(node, null) - is TreeNode #(null, right) -> replace(node, right) - is TreeNode #(left, null) -> replace(node, left) - is TreeNode #(left, right) -> { - val min = min(node.right) - node.value = min.value - remove(min) - } + //is TreeNode #(null, null) -> replace(node, null) + //is TreeNode #(null, right) -> replace(node, right) + //is TreeNode #(left, null) -> replace(node, left) + //is TreeNode #(left, right) -> { + // val min = min(node.right) + // node.value = min.value + // remove(min) + //} } fun replace(node : TreeNode, replace : TreeNode) { diff --git a/compiler/testData/psi/examples/BinaryTree.txt b/compiler/testData/psi/examples/BinaryTree.txt index b8ed3dfbf38..165a2d03f9a 100644 --- a/compiler/testData/psi/examples/BinaryTree.txt +++ b/compiler/testData/psi/examples/BinaryTree.txt @@ -450,9 +450,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('EQ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('EQ') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -461,9 +460,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('LS') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('LS') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -488,9 +486,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('GT') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('GT') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -749,9 +746,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('EQ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('EQ') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -760,9 +756,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('LS') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('LS') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -799,9 +794,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('GT') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('GT') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -947,9 +941,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('EQ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('EQ') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -961,9 +954,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('LS') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('LS') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace('\n ') @@ -1047,9 +1039,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('GT') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('GT') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace('\n ') @@ -1318,9 +1309,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('EQ') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('EQ') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1329,9 +1319,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('LS') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('LS') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1351,9 +1340,8 @@ JetFile: BinaryTree.jet PsiWhiteSpace('\n ') WHEN_ENTRY WHEN_CONDITION_WITH_EXPRESSION - EXPRESSION_PATTERN - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('GT') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('GT') PsiWhiteSpace(' ') PsiElement(ARROW)('->') PsiWhiteSpace(' ') @@ -1410,212 +1398,21 @@ JetFile: BinaryTree.jet PsiWhiteSpace(' ') PsiElement(LBRACE)('{') PsiWhiteSpace('\n ') - WHEN_ENTRY - 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)(')') + PsiComment(EOL_COMMENT)('//is TreeNode #(null, null) -> replace(node, null)') PsiWhiteSpace('\n ') - WHEN_ENTRY - 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)(')') + PsiComment(EOL_COMMENT)('//is TreeNode #(null, right) -> replace(node, right)') PsiWhiteSpace('\n ') - WHEN_ENTRY - 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)(')') + PsiComment(EOL_COMMENT)('//is TreeNode #(left, null) -> replace(node, left)') PsiWhiteSpace('\n ') - WHEN_ENTRY - 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 ') - PROPERTY - 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 ') - BINARY_EXPRESSION - 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 ') - CALL_EXPRESSION - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('remove') - VALUE_ARGUMENT_LIST - PsiElement(LPAR)('(') - VALUE_ARGUMENT - REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('min') - PsiElement(RPAR)(')') - PsiWhiteSpace('\n ') - PsiElement(RBRACE)('}') + PsiComment(EOL_COMMENT)('//is TreeNode #(left, right) -> {') + PsiWhiteSpace('\n ') + PsiComment(EOL_COMMENT)('// val min = min(node.right)') + PsiWhiteSpace('\n ') + PsiComment(EOL_COMMENT)('// node.value = min.value') + PsiWhiteSpace('\n ') + PsiComment(EOL_COMMENT)('// remove(min)') + PsiWhiteSpace('\n ') + PsiComment(EOL_COMMENT)('//}') PsiWhiteSpace('\n ') PsiElement(RBRACE)('}') PsiWhiteSpace('\n\n ') diff --git a/grammar/src/expressions.grm b/grammar/src/expressions.grm index 5ef335f07c2..9271140ad01 100644 --- a/grammar/src/expressions.grm +++ b/grammar/src/expressions.grm @@ -153,7 +153,7 @@ longTemplate ; isRHS - : pattern + : type ; declaration diff --git a/grammar/src/when.grm b/grammar/src/when.grm index ca814d499a2..309d6b62cd9 100644 --- a/grammar/src/when.grm +++ b/grammar/src/when.grm @@ -10,51 +10,14 @@ when "}" ; +// TODO : consider empty after -> whenEntry - // TODO : consider empty after => - : whenCondition{","} "=>" expression SEMI - : "else" "=>" expression SEMI + : whenCondition{","} "->" expression SEMI + : "else" "->" expression SEMI ; whenCondition : expression : ("in" | "!in") expression : ("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 ; \ No newline at end of file