FIR LC: populate inner classes in interfaces

This commit is contained in:
Jinseong Jeon
2021-11-19 14:05:03 -08:00
committed by Ilya Kirillov
parent e525e25518
commit 3ccbd25856
3 changed files with 8 additions and 11 deletions
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
import org.jetbrains.kotlin.light.classes.symbol.classes.checkIsInheritor
import org.jetbrains.kotlin.light.classes.symbol.classes.createInnerClasses
import org.jetbrains.kotlin.light.classes.symbol.classes.getOrCreateFirLightClass
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
import org.jetbrains.kotlin.psi.KtClassBody
@@ -77,7 +78,11 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
override fun getTypeParameters(): Array<PsiTypeParameter> =
_typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY
abstract override fun getOwnInnerClasses(): List<PsiClass>
private val _ownInnerClasses: List<FirLightClassBase> by lazyPub {
classOrObjectSymbol.createInnerClasses(manager)
}
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
override fun getTextOffset(): Int = kotlinOrigin?.textOffset ?: 0
override fun getStartOffsetInParent(): Int = kotlinOrigin?.startOffsetInParent ?: 0
@@ -176,4 +181,4 @@ internal abstract class FirLightClassForClassOrObjectSymbol(
baseClass?.let { InheritanceImplUtil.isInheritorDeep(this, it, classToByPass) } ?: false
abstract override fun copy(): FirLightClassForClassOrObjectSymbol
}
}
@@ -85,12 +85,6 @@ internal open class FirLightClassForSymbol(
override fun getExtendsList(): PsiReferenceList? = _extendsList
override fun getImplementsList(): PsiReferenceList? = _implementsList
private val _ownInnerClasses: List<FirLightClassBase> by lazyPub {
classOrObjectSymbol.createInnerClasses(manager)
}
override fun getOwnInnerClasses(): List<PsiClass> = _ownInnerClasses
private val _extendsList by lazyPub { createInheritanceList(forExtendsList = true, classOrObjectSymbol.superTypes) }
private val _implementsList by lazyPub { createInheritanceList(forExtendsList = false, classOrObjectSymbol.superTypes) }
@@ -45,11 +45,9 @@ internal abstract class FirLightInterfaceOrAnnotationClassSymbol(
override fun getImplementsList(): PsiReferenceList? = null
override fun getOwnInnerClasses(): List<PsiClass> = emptyList()
override fun isInterface(): Boolean = true
override fun isEnum(): Boolean = false
override fun isValid(): Boolean = super.isValid() && classOrObjectSymbol.isValid()
}
}