New J2K: Add support of package qualifiers for expressions

This commit is contained in:
Ilya Kirillov
2019-03-26 22:37:34 +03:00
committed by Ilya Kirillov
parent 9fb6cfc26e
commit a973f9b670
9 changed files with 41 additions and 0 deletions
@@ -41,6 +41,7 @@ class JKSymbolProvider {
is KtParameter -> JKMultiversePropertySymbol(psi, this)
is PsiParameter -> JKMultiverseFieldSymbol(psi, this)
is PsiLocalVariable -> JKMultiverseFieldSymbol(psi, this)
is PsiPackage -> JKMultiversePackageSymbol(psi)
else -> TODO(psi::class.toString())
}
@@ -377,6 +377,7 @@ class JavaToJKTreeBuilder constructor(
return when (symbol) {
is JKClassSymbol -> JKClassAccessExpressionImpl(symbol)
is JKFieldSymbol -> JKFieldAccessExpressionImpl(symbol)
is JKPackageSymbol -> JKPackageAccessExpressionImpl(symbol)
else -> TODO()
}.qualified(qualifierExpression?.toJK()).also {
it.assignNonCodeElements(this)
@@ -745,6 +745,10 @@ class NewCodeBuilder {
printer.par(SQUARE) { arrayAccessExpression.indexExpression.accept(this) }
}
override fun visitPackageAccessExpressionRaw(packageAccessExpression: JKPackageAccessExpression) {
printer.printWithNoIndent(packageAccessExpression.identifier.name.escaped())
}
override fun visitDelegationConstructorCallRaw(delegationConstructorCall: JKDelegationConstructorCall) {
delegationConstructorCall.expression.accept(this)
printer.par {
@@ -422,6 +422,11 @@ class JKFieldAccessExpressionImpl(override var identifier: JKFieldSymbol) : JKFi
PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitFieldAccessExpression(this, data)
}
class JKPackageAccessExpressionImpl(override var identifier: JKPackageSymbol) : JKPackageAccessExpression, JKElementBase(),
PsiOwner by PsiOwnerImpl() {
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitPackageAccessExpression(this, data)
}
val JKStatement.statements: List<JKStatement>
get() =
@@ -274,6 +274,21 @@ class JKUnresolvedClassSymbol(override val target: String) : JKClassSymbol, JKUn
get() = target.substringAfterLast('.')
}
interface JKPackageSymbol : JKNamedSymbol {
override val target: PsiPackage
}
class JKMultiversePackageSymbol(override val target: PsiPackage) : JKPackageSymbol {
override val declaredIn
get() = TODO("not implemented")
override val name: String
get() = target.name.orEmpty()
override val fqName: String
get() = target.qualifiedName
}
fun JKSymbol.deepestFqName(): String? {
fun Any.deepestFqNameForTarget(): String? =
@@ -333,6 +333,10 @@ interface JKFieldAccessExpression : JKAssignableExpression {
val identifier: JKFieldSymbol
}
interface JKPackageAccessExpression : JKAssignableExpression {
val identifier: JKPackageSymbol
}
interface JKClassAccessExpression : JKExpression {
val identifier: JKClassSymbol
}
@@ -47,6 +47,7 @@ interface JKVisitor<out R, in D> {
fun visitTypeArgumentListOwner(typeArgumentListOwner: JKTypeArgumentListOwner, data: D): R = visitTreeElement(typeArgumentListOwner, data)
fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: D): R = visitExpression(methodCallExpression, data)
fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: D): R = visitAssignableExpression(fieldAccessExpression, data)
fun visitPackageAccessExpression(packageAccessExpression: JKPackageAccessExpression, data: D): R = visitAssignableExpression(packageAccessExpression, data)
fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression, data: D): R = visitExpression(classAccessExpression, data)
fun visitArrayAccessExpression(arrayAccessExpression: JKArrayAccessExpression, data: D): R = visitAssignableExpression(arrayAccessExpression, data)
fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression, data: D): R = visitExpression(parenthesizedExpression, data)
@@ -91,6 +91,8 @@ interface JKVisitorVoid : JKVisitor<Unit, Nothing?> {
override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: Nothing?) = visitMethodCallExpression(methodCallExpression)
fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression) = visitAssignableExpression(fieldAccessExpression, null)
override fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: Nothing?) = visitFieldAccessExpression(fieldAccessExpression)
fun visitPackageAccessExpression(packageAccessExpression: JKPackageAccessExpression) = visitAssignableExpression(packageAccessExpression, null)
override fun visitPackageAccessExpression(packageAccessExpression: JKPackageAccessExpression, data: Nothing?) = visitPackageAccessExpression(packageAccessExpression)
fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression) = visitExpression(classAccessExpression, null)
override fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression, data: Nothing?) = visitClassAccessExpression(classAccessExpression)
fun visitArrayAccessExpression(arrayAccessExpression: JKArrayAccessExpression) = visitAssignableExpression(arrayAccessExpression, null)
@@ -358,6 +358,14 @@ interface JKVisitorWithCommentsPrinting : JKVisitorVoid {
fun visitFieldAccessExpressionRaw(fieldAccessExpression: JKFieldAccessExpression) = visitAssignableExpressionRaw(fieldAccessExpression)
override fun visitPackageAccessExpression(packageAccessExpression: JKPackageAccessExpression) {
printLeftNonCodeElements(packageAccessExpression)
visitPackageAccessExpressionRaw(packageAccessExpression)
printRightNonCodeElements(packageAccessExpression)
}
fun visitPackageAccessExpressionRaw(packageAccessExpression: JKPackageAccessExpression) = visitAssignableExpressionRaw(packageAccessExpression)
override fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression) {
printLeftNonCodeElements(classAccessExpression)
visitClassAccessExpressionRaw(classAccessExpression)