diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabelReferenceExpression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabelReferenceExpression.kt index 866652a6bee..bc085c4e2d0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabelReferenceExpression.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLabelReferenceExpression.kt @@ -18,4 +18,4 @@ package org.jetbrains.jet.lang.psi import com.intellij.lang.ASTNode -public class JetLabelReferenceExpression(node: ASTNode) : JetSimpleNameExpression(node) +public class JetLabelReferenceExpression(node: ASTNode) : JetSimpleNameExpressionImpl(node) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNameReferenceExpression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNameReferenceExpression.kt index ec149760cfa..d28bf89fea1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNameReferenceExpression.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNameReferenceExpression.kt @@ -18,4 +18,4 @@ package org.jetbrains.jet.lang.psi import com.intellij.lang.ASTNode -public class JetNameReferenceExpression(node: ASTNode) : JetSimpleNameExpression(node) \ No newline at end of file +public class JetNameReferenceExpression(node: ASTNode) : JetSimpleNameExpressionImpl(node) \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationReferenceExpression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationReferenceExpression.kt index f98c697e268..89e347dc9d7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationReferenceExpression.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetOperationReferenceExpression.kt @@ -18,4 +18,4 @@ package org.jetbrains.jet.lang.psi import com.intellij.lang.ASTNode -public class JetOperationReferenceExpression(node: ASTNode) : JetSimpleNameExpression(node) +public class JetOperationReferenceExpression(node: ASTNode) : JetSimpleNameExpressionImpl(node) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.kt index 5e0821a64f6..dca79527f3d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.kt @@ -27,7 +27,7 @@ import org.jetbrains.jet.lexer.JetTokens import org.jetbrains.jet.lexer.JetTokens.* import org.jetbrains.jet.lang.types.expressions.OperatorConventions -public abstract class JetSimpleNameExpression(node: ASTNode) : JetExpressionImpl(node), JetReferenceExpression { +public trait JetSimpleNameExpression : JetReferenceExpression { public fun getReceiverExpression(): JetExpression? { val parent = getParent() @@ -86,24 +86,30 @@ public abstract class JetSimpleNameExpression(node: ASTNode) : JetExpressionImpl return Name.identifierNoValidate(name) } - public fun getReferencedNameElement(): PsiElement { - return findChildByType(REFERENCE_TOKENS) ?: - findChildByType(JetExpressionParsing.ALL_OPERATIONS) ?: - this - } + public fun getReferencedNameElement(): PsiElement - public fun getIdentifier(): PsiElement? { - return findChildByType(JetTokens.IDENTIFIER) - } + public fun getIdentifier(): PsiElement? public fun getReferencedNameElementType(): IElementType { return getReferencedNameElement().getNode()!!.getElementType()!! } +} + +abstract class JetSimpleNameExpressionImpl(node: ASTNode) : JetExpressionImpl(node), JetSimpleNameExpression { + public override fun getIdentifier(): PsiElement? { + return findChildByType(JetTokens.IDENTIFIER) + } override fun accept(visitor: JetVisitor, data: D?): R { return visitor.visitSimpleNameExpression(this, data) as R } + public override fun getReferencedNameElement(): PsiElement { + return findChildByType(REFERENCE_TOKENS) ?: + findChildByType(JetExpressionParsing.ALL_OPERATIONS) ?: + this + } + class object { public val REFERENCE_TOKENS: TokenSet = TokenSet.create(LABEL_IDENTIFIER, IDENTIFIER, FIELD_IDENTIFIER, THIS_KEYWORD, SUPER_KEYWORD) }