[FIR IDE] Fix invalid designation collecting for local classes

This commit is contained in:
Igor Yakovlev
2021-05-14 13:16:07 +02:00
committed by TeamCityServer
parent 207bad5d5f
commit d34c23914a
2 changed files with 6 additions and 3 deletions
@@ -43,12 +43,14 @@ open class FirDeclarationDesignation<out T : FirDeclaration>(
}
}
private fun collectDesignationAndIsLocal(declaration: FirDeclaration): Pair<List<FirDeclaration>, 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<List<FirDeclaration>, 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<FirDeclaration>() to false
@@ -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)) {