diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt index 58b8ec29571..06c8cf7a662 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirAbstractPhaseTransformer.kt @@ -34,6 +34,7 @@ abstract class FirAbstractPhaseTransformer( } override fun transformFile(file: FirFile, data: D): CompositeTransformResult { + checkSessionConsistency(file) file.replaceResolvePhase(transformerPhase) @Suppress("UNCHECKED_CAST") @@ -45,6 +46,12 @@ abstract class FirAbstractPhaseTransformer( return super.transformDeclaration(declaration, data) } + + protected fun checkSessionConsistency(file: FirFile) { + assert(session === file.session) { + "File ${file.name} and transformer ${this::class} have inconsistent sessions" + } + } } fun FirFile.runResolve(toPhase: FirResolvePhase, fromPhase: FirResolvePhase = FirResolvePhase.RAW_FIR) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt index 9ebe7b30e7b..868469a2a04 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirImportResolveTransformer.kt @@ -19,27 +19,21 @@ import org.jetbrains.kotlin.fir.visitors.compose import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -open class FirImportResolveTransformer protected constructor(phase: FirResolvePhase) : FirAbstractTreeTransformer(phase) { - constructor() : this(FirResolvePhase.IMPORTS) - +open class FirImportResolveTransformer protected constructor( + final override val session: FirSession, + phase: FirResolvePhase +) : FirAbstractTreeTransformer(phase) { override fun transformElement(element: E, data: Nothing?): CompositeTransformResult { return element.compose() } - private lateinit var symbolProvider: FirSymbolProvider + constructor(session: FirSession) : this(session, FirResolvePhase.IMPORTS) - final override lateinit var session: FirSession - - constructor(session: FirSession) : this() { - this.session = session - // TODO: clarify this - symbolProvider = session.firSymbolProvider - } + private val symbolProvider: FirSymbolProvider = session.firSymbolProvider override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { + checkSessionConsistency(file) file.replaceResolvePhase(transformerPhase) - session = file.session - symbolProvider = file.session.firSymbolProvider return file.also { it.transformChildren(this, null) }.compose() } 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 7856dfbb7e4..7a3b6b51dfa 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 @@ -23,7 +23,7 @@ fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession: RAW_FIR -> throw AssertionError("Raw FIR building phase does not have a transformer") ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(scopeSession) FIRST_PLUGIN_GENERATION -> FirFirstGenerationTransformer() - IMPORTS -> FirImportResolveTransformer() + IMPORTS -> FirImportResolveTransformer(session) SUPER_TYPES -> FirSupertypeResolverTransformer(scopeSession) SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer() TYPES -> FirTypeResolveTransformerAdapter(scopeSession)