From 6f84750af41f6df4c1c9bf00d11cd62bacdc7647 Mon Sep 17 00:00:00 2001 From: Dimach Date: Wed, 13 Jun 2018 03:47:13 +0300 Subject: [PATCH] New J2K: Fixed resolve of class reference. --- .../jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt | 15 ++++++--------- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 4 ++++ j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt | 5 +++++ .../kotlin/j2k/tree/visitors/JKVisitor.kt | 1 + .../kotlin/j2k/tree/visitors/JKVisitorVoid.kt | 2 ++ 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index 3c98dc548ed..f23fee1424b 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -122,16 +122,13 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { } fun PsiReferenceExpression.toJK(): JKExpression { - val impl = this as PsiReferenceExpressionImpl - - val access = JKJavaFieldAccessExpressionImpl(symbolProvider.provideSymbol(impl) as JKFieldSymbol) - - return when { - impl.findChildByRole(ChildRole.DOT) != null && - (impl.qualifierExpression as? PsiReferenceExpression)?.resolve() !is PsiClass -> - JKQualifiedExpressionImpl((impl.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, access) - else -> access + val symbol = symbolProvider.provideSymbol(this) + val access = when (symbol) { + is JKClassSymbol -> JKClassAccessExpressionImpl(symbol) + is JKFieldSymbol -> JKJavaFieldAccessExpressionImpl(symbol) + else -> TODO() } + return qualifierExpression?.let { JKQualifiedExpressionImpl(it.toJK(), JKJavaQualifierImpl.DOT, access) } ?: access } fun PsiArrayInitializerExpression.toJK(): JKExpression { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index ea8a3149f17..443ebcd3379 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -266,4 +266,8 @@ class JKIfElseExpressionImpl(condition: JKExpression, thenBranch: JKExpression, override var condition by child(condition) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitIfElseExpression(this, data) +} + +class JKClassAccessExpressionImpl(override var identifier: JKClassSymbol) : JKClassAccessExpression, JKElementBase() { + override fun accept(visitor: JKVisitor, data: D): R = visitor.visitClassAccessExpression(this, data) } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt index 02fcb650d26..9c3b873f61e 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/jk.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.j2k.tree +import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKFieldSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKMethodSymbol import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor @@ -122,6 +123,10 @@ interface JKFieldAccessExpression : JKExpression { val identifier: JKFieldSymbol } +interface JKClassAccessExpression : JKExpression { + val identifier: JKClassSymbol +} + interface JKArrayAccessExpression : JKExpression { val expression: JKExpression val indexExpression: JKExpression diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt index 04290775760..b8d12730cf0 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitor.kt @@ -28,6 +28,7 @@ interface JKVisitor { fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression, data: D): R = visitExpression(qualifiedExpression, data) fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: D): R = visitExpression(methodCallExpression, data) fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: D): R = visitExpression(fieldAccessExpression, data) + fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression, data: D): R = visitExpression(classAccessExpression, data) fun visitArrayAccessExpression(arrayAccessExpression: JKArrayAccessExpression, data: D): R = visitExpression(arrayAccessExpression, data) fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression, data: D): R = visitExpression(parenthesizedExpression, data) fun visitTypeCastExpression(typeCastExpression: JKTypeCastExpression, data: D): R = visitExpression(typeCastExpression, data) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt index 1e2df77d95d..f85f7f3d340 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/visitors/JKVisitorVoid.kt @@ -53,6 +53,8 @@ interface JKVisitorVoid : JKVisitor { override fun visitMethodCallExpression(methodCallExpression: JKMethodCallExpression, data: Nothing?) = visitMethodCallExpression(methodCallExpression) fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression) = visitExpression(fieldAccessExpression, null) override fun visitFieldAccessExpression(fieldAccessExpression: JKFieldAccessExpression, data: Nothing?) = visitFieldAccessExpression(fieldAccessExpression) + fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression) = visitExpression(classAccessExpression, null) + override fun visitClassAccessExpression(classAccessExpression: JKClassAccessExpression, data: Nothing?) = visitClassAccessExpression(classAccessExpression) fun visitArrayAccessExpression(arrayAccessExpression: JKArrayAccessExpression) = visitExpression(arrayAccessExpression, null) override fun visitArrayAccessExpression(arrayAccessExpression: JKArrayAccessExpression, data: Nothing?) = visitArrayAccessExpression(arrayAccessExpression) fun visitParenthesizedExpression(parenthesizedExpression: JKParenthesizedExpression) = visitExpression(parenthesizedExpression, null)