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