diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index 633840237e8..9182805850a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -200,8 +200,11 @@ private fun createOtherScopesForNestedClassesOrCompanion( } fun FirRegularClass.resolveSupertypesInTheAir(session: FirSession): List { - return FirSupertypeResolverVisitor(session, SupertypeComputationSession(), ScopeSession()) - .resolveSpecificClassLikeSupertypes(this, superTypeRefs) + return FirSupertypeResolverVisitor(session, SupertypeComputationSession(), ScopeSession()).run { + withFile(session.firProvider.getFirClassifierContainerFile(this@resolveSupertypesInTheAir.symbol)) { + resolveSpecificClassLikeSupertypes(this@resolveSupertypesInTheAir, superTypeRefs) + } + } } open class FirSupertypeResolverVisitor( @@ -211,7 +214,7 @@ open class FirSupertypeResolverVisitor( private val scopeForLocalClass: PersistentList? = null, private val localClassesNavigationInfo: LocalClassesNavigationInfo? = null, private val firProviderInterceptor: FirProviderInterceptor? = null, - private var useSiteFile: FirFile? = null, + @property:PrivateForInline var useSiteFile: FirFile? = null, containingDeclarations: List = emptyList(), ) : FirDefaultVisitor() { private val supertypeGenerationExtensions = session.extensionService.supertypeGenerators @@ -225,7 +228,8 @@ open class FirSupertypeResolverVisitor( } } - private inline fun withFile(file: FirFile, block: () -> R): R { + @OptIn(PrivateForInline::class) + inline fun withFile(file: FirFile, block: () -> R): R { val oldFile = useSiteFile try { useSiteFile = file @@ -345,6 +349,8 @@ open class FirSupertypeResolverVisitor( val scopes = prepareScopes(classLikeDeclaration) val transformer = FirSpecificTypeResolverTransformer(session, supertypeSupplier = supertypeComputationSession.supertypesSupplier) + + @OptIn(PrivateForInline::class) val resolvedTypesRefs = transformer.withFile(useSiteFile) { resolveSuperTypeRefs( transformer, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt index 1366a764fd1..d3cdcc95bd9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirPluginAnnotationsResolveTransformer.kt @@ -151,4 +151,10 @@ private class FirAnnotationResolveTransformer( predicateBasedProvider.registerAnnotatedDeclaration(declaration, owners) } } + + override fun transformFile(file: FirFile, data: Multimap): FirFile { + typeResolverTransformer.withFile(file) { + return super.transformFile(file, data) + } + } }