[Symbol LC] add parents for the local classes

This commit is contained in:
Ilya Kirillov
2022-07-09 17:57:12 +02:00
parent c55a6c1453
commit 95744062c1
3 changed files with 14 additions and 2 deletions
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.analysis.api.symbols.KtAnonymousObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration
import org.jetbrains.kotlin.light.classes.symbol.classes.*
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
import org.jetbrains.kotlin.psi.KtClassOrObject
@@ -89,6 +90,9 @@ internal class FirLightAnonymousClassForSymbol(
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
override fun getParent(): PsiElement? =
kotlinOrigin?.let(::getParentForLocalDeclaration)
override fun getScope(): PsiElement? = parent
override fun getInterfaces(): Array<PsiClass> = PsiClassImplUtil.getInterfaces(this)
override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
@@ -15,7 +15,9 @@ import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithKind
import org.jetbrains.kotlin.asJava.classes.getOutermostClassOrObject
import org.jetbrains.kotlin.asJava.classes.getParentForLocalDeclaration
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
@@ -31,6 +33,7 @@ import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
import org.jetbrains.kotlin.utils.addToStdlib.ifFalse
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
context(KtAnalysisSession)
internal abstract class FirLightClassForClassOrObjectSymbol(
@@ -204,7 +207,12 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
return null
}
override fun getParent(): PsiElement? = containingClass ?: containingFile
override fun getParent(): PsiElement? {
if (classOrObjectSymbol.safeAs<KtSymbolWithKind>()?.symbolKind == KtSymbolKind.LOCAL) {
return kotlinOrigin?.let(::getParentForLocalDeclaration)
}
return containingClass ?: containingFile
}
override fun getScope(): PsiElement? = parent
@@ -30,7 +30,7 @@ open class KtUltraLightClassForLocalDeclaration(
override fun getParent() = _parent
}
private fun getParentForLocalDeclaration(classOrObject: KtClassOrObject): PsiElement? {
fun getParentForLocalDeclaration(classOrObject: KtClassOrObject): PsiElement? {
fun getParentByPsiMethod(method: PsiMethod?, name: String?, forceMethodWrapping: Boolean): PsiElement? {
if (method == null || name == null) return null