New J2K: Symbol provider improvements.

This commit is contained in:
Dimach
2018-05-30 18:41:01 +03:00
committed by Ilya Kirillov
parent 45eecf2c90
commit 7fbff168dd
2 changed files with 9 additions and 3 deletions
@@ -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()
}
}