New J2K: Add qualified label to JKThisExpression

This commit is contained in:
Ilya Kirillov
2018-11-13 18:46:52 +03:00
committed by Ilya Kirillov
parent 71408c0b14
commit 2b6ac84dda
4 changed files with 10 additions and 4 deletions
@@ -57,7 +57,9 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
is PsiParenthesizedExpression -> toJK()
is PsiAssignmentExpression -> toJK()
is PsiInstanceOfExpression -> toJK()
is PsiThisExpression -> JKThisExpressionImpl()
is PsiThisExpression ->
JKThisExpressionImpl(qualifier?.referenceName?.let { JKLabelTextImpl(JKNameIdentifierImpl(it)) }
?: JKLabelEmptyImpl())
is PsiSuperExpression -> JKSuperExpressionImpl()
is PsiConditionalExpression -> JKIfElseExpressionImpl(
condition.toJK(), thenExpression.toJK(), elseExpression.toJK()
@@ -138,7 +140,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
return if (referenceNameElement is PsiKeyword) {
val callee = when (referenceNameElement.tokenType) {
SUPER_KEYWORD -> JKSuperExpressionImpl()
THIS_KEYWORD -> JKThisExpressionImpl()
THIS_KEYWORD -> JKThisExpressionImpl(JKLabelEmptyImpl())
else -> error("Unknown keyword in callee position")
}
JKDelegationConstructorCallImpl(symbol, callee, argumentList.toJK())
@@ -396,6 +396,7 @@ class NewCodeBuilder {
override fun visitThisExpression(thisExpression: JKThisExpression) {
printer.printWithNoIndent("this")
thisExpression.qualifierLabel.accept(this)
}
override fun visitSuperExpression(superExpression: JKSuperExpression) {
@@ -309,7 +309,8 @@ class JKBlockStatementImpl(block: JKBlock) : JKBlockStatement, JKBranchElementBa
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitBlockStatement(this, data)
}
class JKThisExpressionImpl : JKThisExpression, JKElementBase(), PsiOwner by PsiOwnerImpl() {
class JKThisExpressionImpl(qualifierLabel: JKLabel) : JKThisExpression, JKBranchElementBase(), PsiOwner by PsiOwnerImpl() {
override var qualifierLabel: JKLabel by child(qualifierLabel)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitThisExpression(this, data)
}
@@ -211,7 +211,9 @@ interface JKBlockStatement : JKStatement, JKBranchElement {
var block: JKBlock
}
interface JKThisExpression : JKExpression
interface JKThisExpression : JKExpression {
var qualifierLabel: JKLabel
}
interface JKSuperExpression : JKExpression