Predicate expression, a?b?.f()

This commit is contained in:
Andrey Breslav
2011-02-09 14:48:13 +03:00
parent 09b57d6ee1
commit ad61e57646
6 changed files with 60 additions and 2 deletions
+1 -1
View File
@@ -174,7 +174,7 @@ postfixUnaryOperation
;
memberAccessOperation
: "." : "?." : "#"
: "." : "?." : "#" : "?"
;
typeArguments
@@ -105,6 +105,7 @@ public interface JetNodeTypes {
JetNodeType DOT_QIALIFIED_EXPRESSION = new JetNodeType("DOT_QIALIFIED_EXPRESSION", JetDotQualifiedExpression.class);
JetNodeType HASH_QIALIFIED_EXPRESSION = new JetNodeType("HASH_QIALIFIED_EXPRESSION", JetHashQualifiedExpression.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 TUPLE_PATTERN = new JetNodeType("TUPLE_PATTERN");
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() {
// System.out.println("post at " + myBuilder.getTokenText());
@@ -324,6 +332,12 @@ public class JetExpressionParsing extends AbstractJetParsing {
parseAtomicExpression();
expression.done(SAFE_ACCESS_EXPRESSION);
} else if (at(QUEST)) {
advance(); // QUEST
parseAtomicExpression();
expression.done(PREDICATE_EXPRESSION);
} else if (at(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
}
+27
View File
@@ -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)('}')