From 79de2f21b4246ae885bbeb11cf5ee0da8acb5a40 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Sun, 9 Jan 2011 15:26:07 +0300 Subject: [PATCH] Decomposer node properties --- idea/src/org/jetbrains/jet/JetNodeTypes.java | 2 +- .../jetbrains/jet/lang/psi/JetDecomposer.java | 17 ++++++++++++ .../lang/psi/JetDecomposerPropertyList.java | 26 +++++++++++++++++++ .../jetbrains/jet/lang/psi/JetVisitor.java | 4 +++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 idea/src/org/jetbrains/jet/lang/psi/JetDecomposerPropertyList.java diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java index 4958894873a..e989466466c 100644 --- a/idea/src/org/jetbrains/jet/JetNodeTypes.java +++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java @@ -53,7 +53,7 @@ public interface JetNodeTypes { JetNodeType TUPLE_TYPE = new JetNodeType("TUPLE_TYPE"); JetNodeType FUNCTION_TYPE = new JetNodeType("FUNCTION_TYPE"); JetNodeType SELF_TYPE = new JetNodeType("SELF_TYPE"); - JetNodeType DECOMPOSER_PROPERTY_LIST = new JetNodeType("DECOMPOSER_PROPERTY_LIST"); + JetNodeType DECOMPOSER_PROPERTY_LIST = new JetNodeType("DECOMPOSER_PROPERTY_LIST", JetDecomposerPropertyList.class); // TODO: review JetNodeType RECEIVER_TYPE_ATTRIBUTES = new JetNodeType("RECEIVER_TYPE_ATTRIBUTES"); JetNodeType PROPERTY_ACCESSOR = new JetNodeType("PROPERTY_ACCESSOR"); diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetDecomposer.java b/idea/src/org/jetbrains/jet/lang/psi/JetDecomposer.java index 244717d4ef9..13b383ed13d 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetDecomposer.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetDecomposer.java @@ -2,6 +2,11 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.JetNodeTypes; + +import java.util.Collections; +import java.util.List; /** * @author max @@ -15,4 +20,16 @@ public class JetDecomposer extends JetNamedDeclaration { public void accept(@NotNull JetVisitor visitor) { visitor.visitDecomposer(this); } + + @Nullable + public JetDecomposerPropertyList getPropertyList() { + return (JetDecomposerPropertyList) findChildByType(JetNodeTypes.DECOMPOSER_PROPERTY_LIST); + } + + @NotNull + public List getPropertyReferences() { + JetDecomposerPropertyList list = getPropertyList(); + + return list != null ? list.getPropertyReferences() : Collections.emptyList(); + } } diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetDecomposerPropertyList.java b/idea/src/org/jetbrains/jet/lang/psi/JetDecomposerPropertyList.java new file mode 100644 index 00000000000..28a4aa13698 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetDecomposerPropertyList.java @@ -0,0 +1,26 @@ +package org.jetbrains.jet.lang.psi; + +import com.intellij.lang.ASTNode; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.JetNodeTypes; + +import java.util.List; + +/** + * @author max + */ +public class JetDecomposerPropertyList extends JetNamedDeclaration { + public JetDecomposerPropertyList(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(@NotNull JetVisitor visitor) { + visitor.visitDecomposerPropertyList(this); + } + + @NotNull + public List getPropertyReferences() { + return findChildrenByType(JetNodeTypes.REFERENCE_EXPRESSION); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java index 3cf2a5ae96d..e13017f8622 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java @@ -34,6 +34,10 @@ public class JetVisitor extends PsiElementVisitor { visitDeclaration(decomposer); } + public void visitDecomposerPropertyList(JetDecomposerPropertyList propertyList) { + visitJetElement(propertyList); + } + public void visitExtension(JetExtension extension) { visitDeclaration(extension); }