diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt index 7a3b6b51dfa..124ee0bd89b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession: ScopeSession): FirTransformer { return when (this) { RAW_FIR -> throw AssertionError("Raw FIR building phase does not have a transformer") - ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(scopeSession) + ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(session, scopeSession) FIRST_PLUGIN_GENERATION -> FirFirstGenerationTransformer() IMPORTS -> FirImportResolveTransformer(session) SUPER_TYPES -> FirSupertypeResolverTransformer(scopeSession) 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 41a9d9b65e0..2c51e7fafb9 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 @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.extensions.extensionsService import org.jetbrains.kotlin.fir.extensions.fqName import org.jetbrains.kotlin.fir.extensions.hasExtensions import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.transformers.FirAbstractPhaseTransformer import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.FirSpecificTypeResolverTransformer import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -25,13 +26,21 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.compose import org.jetbrains.kotlin.name.FqName -class FirPluginAnnotationsResolveTransformer(private val scopeSession: ScopeSession) : FirTransformer() { +class FirPluginAnnotationsResolveTransformer( + override val session: FirSession, + scopeSession: ScopeSession +) : FirAbstractPhaseTransformer(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS) { + private val annotationTransformer = FirAnnotationResolveTransformer(session, scopeSession) + private val importTransformer = FirPartialImportResolveTransformer(session) + + private val extensionPointService = session.extensionsService + override fun transformElement(element: E, data: Nothing?): CompositeTransformResult { throw IllegalStateException("Should not be here") } - override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - val extensionPointService = file.session.extensionsService + override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { + checkSessionConsistency(file) if (!extensionPointService.hasExtensions) return file.compose() file.replaceResolvePhase(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS) val newAnnotations = file.resolveAnnotations(extensionPointService.annotations, extensionPointService.metaAnnotations) @@ -49,10 +58,10 @@ class FirPluginAnnotationsResolveTransformer(private val scopeSession: ScopeSess annotations: Set, metaAnnotations: Set ): Multimap { - val importTransformer = FirPartialImportResolveTransformer(annotations) - this.transform(importTransformer, null) + importTransformer.acceptableFqNames = annotations + this.transformImports(importTransformer, null) - val annotationTransformer = FirAnnotationResolveTransformer(metaAnnotations, session, scopeSession) + annotationTransformer.metaAnnotations = metaAnnotations val newAnnotations = LinkedHashMultimap.create() this.transform>(annotationTransformer, newAnnotations) return newAnnotations @@ -60,17 +69,20 @@ class FirPluginAnnotationsResolveTransformer(private val scopeSession: ScopeSess } private class FirPartialImportResolveTransformer( - private val acceptableFqNames: Set -) : FirImportResolveTransformer(FirResolvePhase.ANNOTATIONS_FOR_PLUGINS) { + session: FirSession +) : FirImportResolveTransformer(session, FirResolvePhase.ANNOTATIONS_FOR_PLUGINS) { + var acceptableFqNames: Set = emptySet() + override val FqName.isAcceptable: Boolean get() = this in acceptableFqNames } private class FirAnnotationResolveTransformer( - private val metaAnnotations: Set, session: FirSession, scopeSession: ScopeSession ) : FirAbstractAnnotationResolveTransformer>(session, scopeSession) { + var metaAnnotations: Set = emptySet() + private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer( towerScope, session,