From 7bfe5dcfe6cdc955d91b01881941676ce45ad498 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Fri, 7 Jan 2011 02:55:09 +0300 Subject: [PATCH] some expression nodes --- idea/src/org/jetbrains/jet/JetNodeTypes.java | 29 ++++++++++--------- .../jet/lang/psi/JetConstantExpression.java | 18 ++++++++++++ .../jetbrains/jet/lang/psi/JetExpression.java | 18 ++++++++++++ .../jet/lang/psi/JetPostfixExpression.java | 22 ++++++++++++++ .../jet/lang/psi/JetPrefixExpression.java | 25 ++++++++++++++++ .../jet/lang/psi/JetReferenceExpression.java | 18 ++++++++++++ .../jet/lang/psi/JetTupleExpression.java | 25 ++++++++++++++++ .../jet/lang/psi/JetTypeofExpression.java | 22 ++++++++++++++ .../jetbrains/jet/lang/psi/JetVisitor.java | 28 ++++++++++++++++++ 9 files changed, 192 insertions(+), 13 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetExpression.java create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetTupleExpression.java create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetTypeofExpression.java diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java index 1a7e7a3430b..1245fa7dc4a 100644 --- a/idea/src/org/jetbrains/jet/JetNodeTypes.java +++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java @@ -60,16 +60,19 @@ public interface JetNodeTypes { JetNodeType BLOCK = new JetNodeType("BLOCK"); JetNodeType TYPE_CONSTRAINT_LIST = new JetNodeType("TYPE_CONSTRAINT_LIST"); JetNodeType TYPE_CONSTRAINT = new JetNodeType("TYPE_CONSTRAINT"); - JetNodeType NULL = new JetNodeType("NULL"); - JetNodeType BOOLEAN_CONSTANT = new JetNodeType("BOOLEAN_CONSTANT"); - JetNodeType FLOAT_CONSTANT = new JetNodeType("FLOAT_CONSTANT"); - JetNodeType CHARACTER_CONSTANT = new JetNodeType("CHARACTER_CONSTANT"); - JetNodeType STRING_CONSTANT = new JetNodeType("STRING_CONSTANT"); - JetNodeType INTEGER_CONSTANT = new JetNodeType("INTEGER_CONSTANT"); - JetNodeType SUPERTYE_QUALIFIER = new JetNodeType("SUPERTYE_QUALIFIER"); - JetNodeType LONG_CONSTANT = new JetNodeType("LONG_CONSTANT"); - JetNodeType TUPLE = new JetNodeType("TUPLE"); - JetNodeType TYPEOF = new JetNodeType("TYPEOF"); + + // TODO: Not sure if we need separate NT for each kind of constants + JetNodeType NULL = new JetNodeType("NULL", JetConstantExpression.class); + JetNodeType BOOLEAN_CONSTANT = new JetNodeType("BOOLEAN_CONSTANT", JetConstantExpression.class); + JetNodeType FLOAT_CONSTANT = new JetNodeType("FLOAT_CONSTANT", JetConstantExpression.class); + JetNodeType CHARACTER_CONSTANT = new JetNodeType("CHARACTER_CONSTANT", JetConstantExpression.class); + JetNodeType STRING_CONSTANT = new JetNodeType("STRING_CONSTANT", JetConstantExpression.class); + JetNodeType INTEGER_CONSTANT = new JetNodeType("INTEGER_CONSTANT", JetConstantExpression.class); + JetNodeType SUPERTYE_QUALIFIER = new JetNodeType("SUPERTYE_QUALIFIER", JetConstantExpression.class); + JetNodeType LONG_CONSTANT = new JetNodeType("LONG_CONSTANT", JetConstantExpression.class); + + JetNodeType TUPLE = new JetNodeType("TUPLE", JetTupleExpression.class); + JetNodeType TYPEOF = new JetNodeType("TYPEOF", JetTypeofExpression.class); JetNodeType NEW = new JetNodeType("NEW"); JetNodeType RETURN = new JetNodeType("RETURN"); JetNodeType THROW = new JetNodeType("THROW"); @@ -91,10 +94,10 @@ public interface JetNodeTypes { JetNodeType RECEIVER_TYPE = new JetNodeType("RECEIVER_TYPE"); JetNodeType FUNCTION_LITERAL = new JetNodeType("FUNCTION_LITERAL"); JetNodeType ANNOTATED_EXPRESSION = new JetNodeType("ANNOTATED_EXPRESSION"); - JetNodeType REFERENCE_EXPRESSION = new JetNodeType("REFERENCE_EXPRESSION"); + JetNodeType REFERENCE_EXPRESSION = new JetNodeType("REFERENCE_EXPRESSION", JetReferenceExpression.class); JetNodeType BINARY_EXPRESSION = new JetNodeType("BINARY_EXPRESSION"); - JetNodeType PREFIX_EXPRESSION = new JetNodeType("PREFIX_EXPRESSION"); - JetNodeType POSTFIX_EXPRESSION = new JetNodeType("POSTFIX_EXPRESSION"); + 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"); JetNodeType ARRAY_ACCESS_EXPRESSION = new JetNodeType("ARRAY_ACCESS_EXPRESSION"); JetNodeType INDICES = new JetNodeType("INDICES"); diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java new file mode 100644 index 00000000000..cb4d1e0ce9f --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java @@ -0,0 +1,18 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + +/** + * @author max + */ +public class JetConstantExpression extends JetExpression { + public JetConstantExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitConstantExpression(this); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetExpression.java new file mode 100644 index 00000000000..c45b3165239 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetExpression.java @@ -0,0 +1,18 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + +/** + * @author max + */ +public class JetExpression extends JetElement { + public JetExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitExpression(this); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java new file mode 100644 index 00000000000..48db11ff363 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + +/** + * @author max + */ +public class JetPostfixExpression extends JetExpression { + public JetPostfixExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitPostfixExpression(this); + } + + public JetExpression getBaseExpression() { + return findChildByClass(JetExpression.class); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java new file mode 100644 index 00000000000..ee93386f620 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetPrefixExpression.java @@ -0,0 +1,25 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import com.intellij.psi.util.PsiTreeUtil; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +/** + * @author max + */ +public class JetPrefixExpression extends JetExpression { + public JetPrefixExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitPrefixExpression(this); + } + + public JetExpression getBaseExpression() { + return findChildByClass(JetExpression.class); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java new file mode 100644 index 00000000000..00d1f2144b5 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java @@ -0,0 +1,18 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + +/** + * @author max + */ +public class JetReferenceExpression extends JetExpression { + public JetReferenceExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitReferenceExpression(this); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetTupleExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetTupleExpression.java new file mode 100644 index 00000000000..b4e43e51496 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetTupleExpression.java @@ -0,0 +1,25 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import com.intellij.psi.util.PsiTreeUtil; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +/** + * @author max + */ +public class JetTupleExpression extends JetExpression { + public JetTupleExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitTupleExpression(this); + } + + public List getComponents() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, JetExpression.class); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetTypeofExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetTypeofExpression.java new file mode 100644 index 00000000000..9e1a60b4877 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetTypeofExpression.java @@ -0,0 +1,22 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; + +/** + * @author max + */ +public class JetTypeofExpression extends JetExpression { + public JetTypeofExpression(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitTypeofExpression(this); + } + + public JetExpression getBaseExpression() { + return findChildByClass(JetExpression.class); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java index bf932896ab8..b4a9252ba4b 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java @@ -129,4 +129,32 @@ public class JetVisitor extends PsiElementVisitor { public void visitArgument(JetArgument argument) { visitJetElement(argument); } + + public void visitExpression(JetExpression expression) { + visitJetElement(expression); + } + + public void visitConstantExpression(JetConstantExpression expression) { + visitExpression(expression); + } + + public void visitReferenceExpression(JetReferenceExpression expression) { + visitExpression(expression); + } + + public void visitTupleExpression(JetTupleExpression expression) { + visitExpression(expression); + } + + public void visitPrefixExpression(JetPrefixExpression expression) { + visitExpression(expression); + } + + public void visitPostfixExpression(JetPostfixExpression expression) { + visitExpression(expression); + } + + public void visitTypeofExpression(JetTypeofExpression expression) { + visitExpression(expression); + } }