diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt index 0ec966ffb8e..5647dca9256 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/FirDeclarationDesignation.kt @@ -43,12 +43,14 @@ open class FirDeclarationDesignation( } } -private fun collectDesignationAndIsLocal(declaration: FirDeclaration): Pair, Boolean> { - val firProvider = declaration.moduleData.session.firProvider +private fun FirClassLikeDeclaration<*>.containingClass(): FirClassLikeDeclaration<*>? = + if (isLocal) (this as? FirRegularClass)?.containingClassForLocal()?.toFirRegularClass(moduleData.session) + else symbol.classId.outerClassId?.let(moduleData.session.firProvider::getFirClassifierByFqName) +private fun collectDesignationAndIsLocal(declaration: FirDeclaration): Pair, Boolean> { val containingClass = when (declaration) { is FirCallableDeclaration<*> -> declaration.containingClass()?.toFirRegularClass(declaration.moduleData.session) - is FirClassLikeDeclaration<*> -> declaration.symbol.classId.outerClassId?.let(firProvider::getFirClassifierByFqName) + is FirClassLikeDeclaration<*> -> declaration.containingClass() else -> error("Invalid declaration ${declaration.renderWithType()}") } ?: return emptyList() to false diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt index 27cb8b1f8c3..9519f331e1a 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirProviderHelper.kt @@ -34,6 +34,7 @@ internal class FirProviderHelper( private val packageExistenceChecker: PackageExistenceChecker, ) { fun getFirClassifierByFqName(classId: ClassId): FirClassLikeDeclaration<*>? { + if (classId.isLocal) return null return executeOrReturnDefaultValueOnPCE(null) { cache.classifierByClassId.computeIfAbsent(classId) { val ktClass = when (val klass = indexHelper.classFromIndexByClassId(classId)) {