New J2K: Assume parameters when prebuilding symbol provider symbols fro converting declarations

This commit is contained in:
Ilya Kirillov
2019-02-13 13:19:55 +03:00
committed by Ilya Kirillov
parent 67a8f445b0
commit fb6560c1f1
@@ -75,14 +75,15 @@ class JKSymbolProvider {
symbolsByJK[jk] = it symbolsByJK[jk] = it
} }
fun provideUniverseSymbol(psi: PsiElement): JKSymbol = symbolsByPsi.getOrPut(psi) { fun provideUniverseSymbol(psi: PsiElement): JKSymbol =
when (psi) { symbolsByPsi.getOrPut(psi) {
is PsiField, is PsiParameter, is PsiLocalVariable -> JKUniverseFieldSymbol() when (psi) {
is PsiMethod -> JKUniverseMethodSymbol(this) is PsiVariable -> JKUniverseFieldSymbol(this)
is PsiClass -> JKUniverseClassSymbol() is PsiMethod -> JKUniverseMethodSymbol(this)
else -> TODO() is PsiClass -> JKUniverseClassSymbol(this)
else -> TODO()
}
} }
}
fun transferSymbol(to: JKDeclaration, from: JKDeclaration) = symbolsByJK[from]!!.let { fun transferSymbol(to: JKDeclaration, from: JKDeclaration) = symbolsByJK[from]!!.let {
it as JKUniverseSymbol<*> it as JKUniverseSymbol<*>
@@ -91,11 +92,11 @@ class JKSymbolProvider {
} }
fun provideUniverseSymbol(jk: JKClass): JKClassSymbol = symbolsByJK.getOrPut(jk) { fun provideUniverseSymbol(jk: JKClass): JKClassSymbol = symbolsByJK.getOrPut(jk) {
JKUniverseClassSymbol().also { it.target = jk } JKUniverseClassSymbol(this).also { it.target = jk }
} as JKClassSymbol } as JKClassSymbol
fun provideUniverseSymbol(jk: JKVariable): JKFieldSymbol = symbolsByJK.getOrPut(jk) { fun provideUniverseSymbol(jk: JKVariable): JKFieldSymbol = symbolsByJK.getOrPut(jk) {
JKUniverseFieldSymbol().also { it.target = jk } JKUniverseFieldSymbol(this).also { it.target = jk }
} as JKFieldSymbol } as JKFieldSymbol
fun provideUniverseSymbol(jk: JKMethod): JKMethodSymbol = symbolsByJK.getOrPut(jk) { fun provideUniverseSymbol(jk: JKMethod): JKMethodSymbol = symbolsByJK.getOrPut(jk) {
@@ -149,6 +150,10 @@ class JKSymbolProvider {
private inner class ElementVisitor : JavaElementVisitor() { private inner class ElementVisitor : JavaElementVisitor() {
override fun visitElement(element: PsiElement) {
element.acceptChildren(this)
}
override fun visitClass(aClass: PsiClass) { override fun visitClass(aClass: PsiClass) {
provideUniverseSymbol(aClass) provideUniverseSymbol(aClass)
aClass.acceptChildren(this) aClass.acceptChildren(this)
@@ -158,12 +163,18 @@ class JKSymbolProvider {
provideUniverseSymbol(field) provideUniverseSymbol(field)
} }
override fun visitParameter(parameter: PsiParameter) {
provideUniverseSymbol(parameter)
}
override fun visitMethod(method: PsiMethod) { override fun visitMethod(method: PsiMethod) {
provideUniverseSymbol(method) provideUniverseSymbol(method)
method.acceptChildren(this)
} }
override fun visitEnumConstant(enumConstant: PsiEnumConstant) { override fun visitEnumConstant(enumConstant: PsiEnumConstant) {
provideUniverseSymbol(enumConstant) provideUniverseSymbol(enumConstant)
enumConstant.acceptChildren(this)
} }
override fun visitFile(file: PsiFile) { override fun visitFile(file: PsiFile) {