diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt index a2e6f0ad4a3..91e4f09a7cb 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.addImportingScopes -import org.jetbrains.kotlin.fir.scopes.impl.* +import org.jetbrains.kotlin.fir.scopes.impl.FirNestedClassifierScope import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -64,7 +64,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() { if (classId in fullyComputed) return classLikeDeclaration - val visitor = ResolveSuperTypesTask(firSession, classId, file, currentlyComputing, fullyComputed) + val visitor = ResolveSuperTypesTask(firSession, classId, file, currentlyComputing, fullyComputed, classLikeDeclaration) file.accept(visitor, null).single return visitor.resultingClass @@ -75,7 +75,8 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() { private val requestedClassId: ClassId, file: FirFile, private val currentlyComputing: MutableSet, - private val fullyComputed: MutableSet + private val fullyComputed: MutableSet, + private val knownFirClassLikeDeclaration: FirClassLikeDeclaration? = null ) : FirAbstractTreeTransformerWithSuperTypes(reversedScopePriority = true) { lateinit var resultingClass: FirDeclaration @@ -99,7 +100,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() { regularClass.replaceSupertypes(resultingTypeRefs) } - if (classId == requestedClassId) { + if (regularClass.matchesRequestedDeclaration()) { resultingClass = transformedClass return transformedClass.compose() } @@ -107,10 +108,15 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer() { return resolveNestedClassesSupertypes(transformedClass, data) } + private fun FirClassLikeDeclaration.matchesRequestedDeclaration(): Boolean { + if (knownFirClassLikeDeclaration != null) return knownFirClassLikeDeclaration == this + return symbol.classId == requestedClassId + } + override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): CompositeTransformResult { val classId = typeAlias.symbol.classId // nested type aliases - if (requestedClassId != classId || classId in fullyComputed) return typeAlias.compose() + if (classId in fullyComputed || !typeAlias.matchesRequestedDeclaration()) return typeAlias.compose() return withScopeCleanup { typeAlias.addTypeParametersScope()