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