Predicate expression, a?b?.f()
This commit is contained in:
@@ -174,7 +174,7 @@ postfixUnaryOperation
|
|||||||
;
|
;
|
||||||
|
|
||||||
memberAccessOperation
|
memberAccessOperation
|
||||||
: "." : "?." : "#"
|
: "." : "?." : "#" : "?"
|
||||||
;
|
;
|
||||||
|
|
||||||
typeArguments
|
typeArguments
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ public interface JetNodeTypes {
|
|||||||
JetNodeType DOT_QIALIFIED_EXPRESSION = new JetNodeType("DOT_QIALIFIED_EXPRESSION", JetDotQualifiedExpression.class);
|
JetNodeType DOT_QIALIFIED_EXPRESSION = new JetNodeType("DOT_QIALIFIED_EXPRESSION", JetDotQualifiedExpression.class);
|
||||||
JetNodeType HASH_QIALIFIED_EXPRESSION = new JetNodeType("HASH_QIALIFIED_EXPRESSION", JetHashQualifiedExpression.class);
|
JetNodeType HASH_QIALIFIED_EXPRESSION = new JetNodeType("HASH_QIALIFIED_EXPRESSION", JetHashQualifiedExpression.class);
|
||||||
JetNodeType SAFE_ACCESS_EXPRESSION = new JetNodeType("SAFE_ACCESS_EXPRESSION", JetSafeQualifiedExpression.class);
|
JetNodeType SAFE_ACCESS_EXPRESSION = new JetNodeType("SAFE_ACCESS_EXPRESSION", JetSafeQualifiedExpression.class);
|
||||||
|
JetNodeType PREDICATE_EXPRESSION = new JetNodeType("PREDICATE_EXPRESSION", JetPridcateExpression.class);
|
||||||
JetNodeType DECOMPOSER_PATTERN = new JetNodeType("DECOMPOSER_PATTERN");
|
JetNodeType DECOMPOSER_PATTERN = new JetNodeType("DECOMPOSER_PATTERN");
|
||||||
JetNodeType TUPLE_PATTERN = new JetNodeType("TUPLE_PATTERN");
|
JetNodeType TUPLE_PATTERN = new JetNodeType("TUPLE_PATTERN");
|
||||||
JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class);
|
JetNodeType OBJECT_LITERAL = new JetNodeType("OBJECT_LITERAL", JetObjectLiteralExpression.class);
|
||||||
|
|||||||
@@ -274,7 +274,15 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* expression operation?
|
* atomicExpression postfixUnaryOperation?
|
||||||
|
*
|
||||||
|
* postfixUnaryOperation
|
||||||
|
* : "++" : "--"
|
||||||
|
* : typeArguments? valueArguments
|
||||||
|
* : typeArguments
|
||||||
|
* : arrayAccess
|
||||||
|
* : memberAccessOperation postfixUnaryOperation // TODO: Review
|
||||||
|
* ;
|
||||||
*/
|
*/
|
||||||
private void parsePostfixExpression() {
|
private void parsePostfixExpression() {
|
||||||
// System.out.println("post at " + myBuilder.getTokenText());
|
// System.out.println("post at " + myBuilder.getTokenText());
|
||||||
@@ -324,6 +332,12 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
|||||||
parseAtomicExpression();
|
parseAtomicExpression();
|
||||||
|
|
||||||
expression.done(SAFE_ACCESS_EXPRESSION);
|
expression.done(SAFE_ACCESS_EXPRESSION);
|
||||||
|
} else if (at(QUEST)) {
|
||||||
|
advance(); // QUEST
|
||||||
|
|
||||||
|
parseAtomicExpression();
|
||||||
|
|
||||||
|
expression.done(PREDICATE_EXPRESSION);
|
||||||
} else if (at(HASH)) {
|
} else if (at(HASH)) {
|
||||||
advance(); // HASH
|
advance(); // HASH
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package org.jetbrains.jet.lang.psi;
|
||||||
|
|
||||||
|
import com.intellij.lang.ASTNode;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author abreslav
|
||||||
|
*/
|
||||||
|
public class JetPridcateExpression extends JetQualifiedExpression {
|
||||||
|
public JetPridcateExpression(@NotNull ASTNode node) {
|
||||||
|
super(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
fun foo() {
|
||||||
|
a?f.foo
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
JetFile: PredicateExpression.jet
|
||||||
|
NAMESPACE
|
||||||
|
FUN
|
||||||
|
PsiElement(fun)('fun')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
TYPE_PARAMETER_LIST
|
||||||
|
<empty list>
|
||||||
|
VALUE_PARAMETER_LIST
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
DOT_QIALIFIED_EXPRESSION
|
||||||
|
PREDICATE_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('a')
|
||||||
|
PsiElement(QUEST)('?')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('f')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
Reference in New Issue
Block a user