[FIR IDE] Fix inner light classes creation
This commit is contained in:
+1
-1
@@ -91,7 +91,7 @@ internal class FirLightAnonymousClassForSymbol(
|
||||
result
|
||||
}
|
||||
|
||||
private val _ownInnerClasses: List<FirLightClassForSymbol> by lazyPub {
|
||||
private val _ownInnerClasses: List<FirLightClassBase> by lazyPub {
|
||||
anonymousObjectSymbol.createInnerClasses(manager)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ internal class FirLightClassForSymbol(
|
||||
override fun getExtendsList(): PsiReferenceList? = _extendsList
|
||||
override fun getImplementsList(): PsiReferenceList? = _implementsList
|
||||
|
||||
private val _ownInnerClasses: List<FirLightClassForSymbol> by lazyPub {
|
||||
private val _ownInnerClasses: List<FirLightClassBase> by lazyPub {
|
||||
classOrObjectSymbol.createInnerClasses(manager)
|
||||
}
|
||||
|
||||
|
||||
+14
-13
@@ -57,29 +57,30 @@ fun createFirLightClassNoCache(classOrObject: KtClassOrObject): KtLightClass? =
|
||||
val anonymousObject = classOrObject.parent as? KtObjectLiteralExpression
|
||||
if (anonymousObject != null) {
|
||||
return analyseForLightClasses(anonymousObject) {
|
||||
FirLightAnonymousClassForSymbol(anonymousObject.getAnonymousObjectSymbol(), anonymousObject.manager)
|
||||
anonymousObject.getAnonymousObjectSymbol().createLightClassNoCache(anonymousObject.manager)
|
||||
}
|
||||
}
|
||||
|
||||
return when {
|
||||
classOrObject is KtEnumEntry -> lightClassForEnumEntry(classOrObject)
|
||||
classOrObject.hasModifier(KtTokens.INLINE_KEYWORD) -> return null //TODO
|
||||
|
||||
else -> {
|
||||
analyseForLightClasses(classOrObject) {
|
||||
when (val symbol = classOrObject.getClassOrObjectSymbol()) {
|
||||
is KtAnonymousObjectSymbol -> FirLightAnonymousClassForSymbol(symbol, classOrObject.manager)
|
||||
is KtNamedClassOrObjectSymbol -> when (symbol.classKind) {
|
||||
KtClassKind.INTERFACE -> FirLightInterfaceClassSymbol(symbol, classOrObject.manager)
|
||||
KtClassKind.ANNOTATION_CLASS -> FirLightAnnotationClassSymbol(symbol, classOrObject.manager)
|
||||
else -> FirLightClassForSymbol(symbol, classOrObject.manager)
|
||||
}
|
||||
}
|
||||
classOrObject.getClassOrObjectSymbol().createLightClassNoCache(classOrObject.manager)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun KtClassOrObjectSymbol.createLightClassNoCache(manager: PsiManager): FirLightClassBase = when (this) {
|
||||
is KtAnonymousObjectSymbol -> FirLightAnonymousClassForSymbol(this, manager)
|
||||
is KtNamedClassOrObjectSymbol -> when (classKind) {
|
||||
KtClassKind.INTERFACE -> FirLightInterfaceClassSymbol(this, manager)
|
||||
KtClassKind.ANNOTATION_CLASS -> FirLightAnnotationClassSymbol(this, manager)
|
||||
else -> FirLightClassForSymbol(this, manager)
|
||||
}
|
||||
}
|
||||
|
||||
fun getOrCreateFirLightFacade(
|
||||
ktFiles: List<KtFile>,
|
||||
facadeClassFqName: FqName,
|
||||
@@ -320,8 +321,8 @@ internal fun FirLightClassBase.createInheritanceList(forExtendsList: Boolean, su
|
||||
return listBuilder
|
||||
}
|
||||
|
||||
internal fun KtSymbolWithMembers.createInnerClasses(manager: PsiManager): List<FirLightClassForSymbol> {
|
||||
val result = ArrayList<FirLightClassForSymbol>()
|
||||
internal fun KtSymbolWithMembers.createInnerClasses(manager: PsiManager): List<FirLightClassBase> {
|
||||
val result = ArrayList<FirLightClassBase>()
|
||||
|
||||
// workaround for ClassInnerStuffCache not supporting classes with null names, see KT-13927
|
||||
// inner classes with null names can't be searched for and can't be used from java anyway
|
||||
@@ -329,7 +330,7 @@ internal fun KtSymbolWithMembers.createInnerClasses(manager: PsiManager): List<F
|
||||
|
||||
analyzeWithSymbolAsContext(this) {
|
||||
getDeclaredMemberScope().getClassifierSymbols().filterIsInstance<KtNamedClassOrObjectSymbol>().mapTo(result) {
|
||||
FirLightClassForSymbol(it, manager)
|
||||
it.createLightClassNoCache(manager)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user