[FIR IDE] Add containing file workaround for FirLightAnonymousClassForSymbol

This commit is contained in:
Igor Yakovlev
2021-07-19 17:56:33 +02:00
parent a4426cd40d
commit 4711577b17
2 changed files with 9 additions and 8 deletions
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.idea.asJava.FirLightClassBase
import org.jetbrains.kotlin.idea.asJava.*
import org.jetbrains.kotlin.idea.asJava.FirLightClassForSymbol
import org.jetbrains.kotlin.idea.asJava.FirLightField
import org.jetbrains.kotlin.idea.asJava.hasJvmFieldAnnotation
@@ -54,7 +54,6 @@ internal class FirLightAnonymousClassForSymbol(
override fun getOwnFields(): List<KtLightField> = _ownFields
override fun getOwnMethods(): List<PsiMethod> = _ownMethods
private val _ownMethods: List<KtLightMethod> by lazyPub {
val result = mutableListOf<KtLightMethod>()
@@ -131,6 +130,14 @@ internal class FirLightAnonymousClassForSymbol(
override fun isEquivalentTo(another: PsiElement?): Boolean = equals(another) //TODO
//TODO Make containing file not null for symbol without psi
private val _containingFile: PsiFile? by lazyPub {
val kotlinOrigin = kotlinOrigin ?: return@lazyPub null
FirFakeFileImpl(kotlinOrigin, this)
}
override fun getContainingFile(): PsiFile? = _containingFile
override fun equals(other: Any?): Boolean =
this === other ||
(other is FirLightAnonymousClassForSymbol && anonymousObjectSymbol == other.anonymousObjectSymbol)
@@ -161,15 +161,9 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
override fun getSuperTypes(): Array<PsiClassType> = PsiClassImplUtil.getSuperTypes(this)
override fun getContainingClass(): PsiClass? {
val containingBody = kotlinOrigin?.parent as? KtClassBody
val containingClass = containingBody?.parent as? KtClassOrObject
containingClass?.let { return getOrCreateFirLightClass(it) }
val containingBlock = kotlinOrigin?.parent as? KtBlockExpression
// val containingScript = containingBlock?.parent as? KtScript
// containingScript?.let { return KtLightClassForScript.create(it) }
return null
}