New J2K: Symbol provider improvements.
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.j2k
|
||||
|
||||
import com.intellij.psi.*
|
||||
import org.jetbrains.kotlin.j2k.tree.JKLocalVariable
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
|
||||
@@ -30,6 +31,10 @@ class JKSymbolProvider {
|
||||
}
|
||||
}
|
||||
|
||||
fun provideLocalVarSymbol(psi: PsiLocalVariable, variable: JKLocalVariable): JKSymbol {
|
||||
return symbols.getOrPut(psi) { JKUniverseFieldSymbol(variable) }
|
||||
}
|
||||
|
||||
private inner class ElementVisitor : JavaElementVisitor() {
|
||||
override fun visitClass(aClass: PsiClass) {
|
||||
symbols[aClass] = JKUniverseClassSymbol()
|
||||
|
||||
@@ -113,8 +113,9 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
fun PsiMethodCallExpression.toJK(): JKExpression {
|
||||
val method = methodExpression as PsiReferenceExpressionImpl
|
||||
|
||||
val identifier = JKMultiverseMethodSymbol(method.reference?.resolve() as PsiMethod)
|
||||
val call = JKJavaMethodCallExpressionImpl(identifier as JKMethodSymbol, argumentList.toJK())
|
||||
val call = JKJavaMethodCallExpressionImpl(
|
||||
symbolProvider.provideSymbol(method.reference?.resolve() ?: TODO()) as JKMethodSymbol, argumentList.toJK()
|
||||
)
|
||||
return if (method.findChildByRole(ChildRole.DOT) != null) {
|
||||
JKQualifiedExpressionImpl((method.qualifier as PsiExpression).toJK(), JKJavaQualifierImpl.DOT, call)
|
||||
} else {
|
||||
@@ -269,7 +270,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
|
||||
with(expressionTreeMapper) { it.typeElement.toJK() },
|
||||
JKNameIdentifierImpl(it.name ?: TODO()),
|
||||
with(expressionTreeMapper) { it.initializer.toJK() }
|
||||
).also { i -> symbolProvider.symbols[it] = JKUniverseFieldSymbol(i) }
|
||||
).also { i -> symbolProvider.provideLocalVarSymbol(it, i) }
|
||||
} else TODO()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user