Make JetSimpleNameExpression a trait

This commit is contained in:
Pavel V. Talanov
2014-03-26 17:29:55 +04:00
parent 6413691c33
commit e84eebec5b
4 changed files with 18 additions and 12 deletions
@@ -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)
@@ -18,4 +18,4 @@ package org.jetbrains.jet.lang.psi
import com.intellij.lang.ASTNode
public class JetNameReferenceExpression(node: ASTNode) : JetSimpleNameExpression(node)
public class JetNameReferenceExpression(node: ASTNode) : JetSimpleNameExpressionImpl(node)
@@ -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)
@@ -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 <R, D> accept(visitor: JetVisitor<R, D>, 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)
}