diff --git a/idea/src/org/jetbrains/jet/JetNodeTypes.java b/idea/src/org/jetbrains/jet/JetNodeTypes.java index ac24cca8159..5945303a815 100644 --- a/idea/src/org/jetbrains/jet/JetNodeTypes.java +++ b/idea/src/org/jetbrains/jet/JetNodeTypes.java @@ -24,20 +24,18 @@ public interface JetNodeTypes { JetNodeType CONSTRUCTOR = new JetNodeType("CONSTRUCTOR", JetConstructor.class); JetNodeType ENUM_ENTRY = new JetNodeType("ENUM_ENTRY", JetEnumEntry.class); - TokenSet DECLARATIONS = TokenSet.create( - NAMESPACE, CLASS, PROPERTY, FUN, EXTENSION, - TYPEDEF, DECOMPOSER, CLASS_OBJECT, CONSTRUCTOR, ENUM_ENTRY); - JetNodeType TYPE_PARAMETER_LIST = new JetNodeType("TYPE_PARAMETER_LIST", JetTypeParameterList.class); JetNodeType TYPE_PARAMETER = new JetNodeType("TYPE_PARAMETER", JetTypeParameter.class); - JetNodeType PRIMARY_CONSTRUCTOR_PARAMETERS_LIST = new JetNodeType("PRIMARY_CONSTRUCTOR_PARAMETERS_LIST"); - JetNodeType PRIMARY_CONSTRUCTOR_PARAMETER = new JetNodeType("PRIMARY_CONSTRUCTOR_PARAMETER"); JetNodeType DELEGATION_SPECIFIER_LIST = new JetNodeType("DELEGATION_SPECIFIER_LIST"); JetNodeType DELEGATION_SPECIFIER = new JetNodeType("DELEGATION_SPECIFIER"); JetNodeType DELEGATOR_BY = new JetNodeType("DELEGATOR_BY"); JetNodeType DELEGATOR_SUPER_CALL = new JetNodeType("DELEGATOR_SUPER_CALL"); JetNodeType DELEGATOR_SUPER_CLASS = new JetNodeType("DELEGATOR_SUPER_CLASS"); - JetNodeType VALUE_PARAMETER_LIST = new JetNodeType("VALUE_PARAMETER_LIST"); + JetNodeType VALUE_PARAMETER_LIST = new JetNodeType("VALUE_PARAMETER_LIST", JetParameterList.class); + JetNodeType VALUE_PARAMETER = new JetNodeType("VALUE_PARAMETER", JetParameter.class); + // TODO: Not sure if we really need separate PSI nodes for the class parameters? + JetNodeType PRIMARY_CONSTRUCTOR_PARAMETERS_LIST = new JetNodeType("PRIMARY_CONSTRUCTOR_PARAMETERS_LIST", JetParameterList.class); + JetNodeType PRIMARY_CONSTRUCTOR_PARAMETER = new JetNodeType("PRIMARY_CONSTRUCTOR_PARAMETER", JetParameter.class); JetNodeType NAMED_ARGUMENT = new JetNodeType("NAMED_ARGUMENT"); JetNodeType CLASS_BODY = new JetNodeType("CLASS_BODY", JetClassBody.class); JetNodeType IMPORT_DIRECTIVE = new JetNodeType("IMPORT_DIRECTIVE", JetImportDirective.class); @@ -53,7 +51,6 @@ public interface JetNodeTypes { JetNodeType TYPE_REFERENCE = new JetNodeType("TYPE_REFERENCE"); JetNodeType LABELED_TUPLE_ENTRY = new JetNodeType("LABELED_TUPLE_ENTRY"); JetNodeType TUPLE_TYPE = new JetNodeType("TUPLE_TYPE"); - JetNodeType VALUE_PARAMETER = new JetNodeType("VALUE_PARAMETER"); JetNodeType FUNCTION_TYPE = new JetNodeType("FUNCTION_TYPE"); JetNodeType DECOMPOSER_PROPERTY_LIST = new JetNodeType("DECOMPOSER_PROPERTY_LIST"); // TODO: review @@ -113,4 +110,8 @@ public interface JetNodeTypes { JetNodeType FIELD_REFERENCE = new JetNodeType("FIELD_REFERENCE"); IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME"); + + TokenSet DECLARATIONS = TokenSet.create( + NAMESPACE, CLASS, PROPERTY, FUN, EXTENSION, + TYPEDEF, DECOMPOSER, CLASS_OBJECT, CONSTRUCTOR, ENUM_ENTRY, VALUE_PARAMETER); } diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetClass.java b/idea/src/org/jetbrains/jet/lang/psi/JetClass.java index 9d7ebee292f..480ee2259cf 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetClass.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetClass.java @@ -27,4 +27,16 @@ public class JetClass extends JetTypeParameterListOwner { public void accept(@NotNull JetVisitor visitor) { visitor.visitClass(this); } + + @Nullable + public JetParameterList getPrimaryConstructorParameterList() { + return (JetParameterList) findChildByType(JetNodeTypes.VALUE_PARAMETER_LIST); + } + + @NotNull + public List getPrimaryConstructorParameters() { + JetParameterList list = getPrimaryConstructorParameterList(); + if (list == null) return Collections.emptyList(); + return list.getParameters(); + } } diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetParameter.java b/idea/src/org/jetbrains/jet/lang/psi/JetParameter.java new file mode 100644 index 00000000000..e735aa45d22 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetParameter.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 JetParameter extends JetNamedDeclaration { + public JetParameter(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitParameter(this); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetParameterList.java b/idea/src/org/jetbrains/jet/lang/psi/JetParameterList.java new file mode 100644 index 00000000000..c8d3d215602 --- /dev/null +++ b/idea/src/org/jetbrains/jet/lang/psi/JetParameterList.java @@ -0,0 +1,25 @@ +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 JetParameterList extends JetElement { + public JetParameterList(@NotNull ASTNode node) { + super(node); + } + + @Override + public void accept(JetVisitor visitor) { + visitor.visitParameterList(this); + } + + public List getParameters() { + return findChildrenByType(JetNodeTypes.VALUE_PARAMETER); + } +} diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java index 70a2900516b..c08820d465d 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetVisitor.java @@ -89,4 +89,12 @@ public class JetVisitor extends PsiElementVisitor { public void visitEnumEntry(JetEnumEntry enumEntry) { visitClass(enumEntry); } + + public void visitParameterList(JetParameterList list) { + visitJetElement(list); + } + + public void visitParameter(JetParameter parameter) { + visitDeclaration(parameter); + } }