diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclaration.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclaration.java index 9f5a89a0bd7..25de6135888 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclaration.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclaration.java @@ -30,30 +30,11 @@ import static org.jetbrains.jet.lexer.JetTokens.VAR_KEYWORD; /** * @author abreslav */ -public class JetMultiDeclaration extends JetDeclarationImpl implements JetVariableDeclaration { +public class JetMultiDeclaration extends JetDeclarationImpl { public JetMultiDeclaration(@NotNull ASTNode node) { super(node); } - @Override - public boolean isVar() { - return getNode().findChildByType(JetTokens.VAR_KEYWORD) != null; - } - - @Nullable - @Override - public JetExpression getInitializer() { - return PsiTreeUtil.getNextSiblingOfType(findChildByType(EQ), JetExpression.class); - } - - @NotNull - @Override - public ASTNode getValOrVarNode() { - ASTNode node = getNode().findChildByType(TokenSet.create(VAL_KEYWORD, VAR_KEYWORD)); - assert node != null : "Val or var should always exist for property"; - return node; - } - @Override public void accept(@NotNull JetVisitorVoid visitor) { visitor.visitMultiDeclaration(this); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclarationEntry.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclarationEntry.java index 306037888f4..664a696f331 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclarationEntry.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetMultiDeclarationEntry.java @@ -17,20 +17,27 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; +import com.intellij.psi.tree.TokenSet; +import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; +import org.jetbrains.jet.lexer.JetTokens; + +import static org.jetbrains.jet.lexer.JetTokens.EQ; +import static org.jetbrains.jet.lexer.JetTokens.VAL_KEYWORD; +import static org.jetbrains.jet.lexer.JetTokens.VAR_KEYWORD; /** * @author abreslav */ -public class JetMultiDeclarationEntry extends JetNamedDeclarationNotStubbed { +public class JetMultiDeclarationEntry extends JetNamedDeclarationNotStubbed implements JetVariableDeclaration { public JetMultiDeclarationEntry(@NotNull ASTNode node) { super(node); } - @Nullable - public JetTypeReference getTypeRef() { + @Override + public JetTypeReference getPropertyTypeRef() { return (JetTypeReference) findChildByType(JetNodeTypes.TYPE_REFERENCE); } @@ -44,5 +51,33 @@ public class JetMultiDeclarationEntry extends JetNamedDeclarationNotStubbed { return visitor.visitMultiDeclarationEntry(this, data); } + @Override + public boolean isVar() { + return getParentNode().findChildByType(JetTokens.VAR_KEYWORD) != null; + } + @Nullable + @Override + public JetExpression getInitializer() { + ASTNode eqNode = getParentNode().findChildByType(EQ); + if (eqNode == null) { + return null; + } + return PsiTreeUtil.getNextSiblingOfType(eqNode.getPsi(), JetExpression.class); + } + + @NotNull + private ASTNode getParentNode() { + ASTNode parent = getNode().getTreeParent(); + assert parent.getElementType() == JetNodeTypes.MULTI_VARIABLE_DECLARATION; + return parent; + } + + @NotNull + @Override + public ASTNode getValOrVarNode() { + ASTNode node = getParentNode().findChildByType(TokenSet.create(VAL_KEYWORD, VAR_KEYWORD)); + assert node != null : "Val or var should always exist for property"; + return node; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java index a6077f002d1..cdb9a39a1ce 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetProperty.java @@ -114,6 +114,7 @@ public class JetProperty extends JetTypeParameterListOwnerStub