[FIR] Don't rewrite session in FirImportResolveTransformer

This commit is contained in:
Dmitriy Novozhilov
2020-05-19 11:19:35 +03:00
parent 67a259a903
commit f60c8eac71
3 changed files with 15 additions and 14 deletions
@@ -34,6 +34,7 @@ abstract class FirAbstractPhaseTransformer<D>(
}
override fun transformFile(file: FirFile, data: D): CompositeTransformResult<FirFile> {
checkSessionConsistency(file)
file.replaceResolvePhase(transformerPhase)
@Suppress("UNCHECKED_CAST")
@@ -45,6 +46,12 @@ abstract class FirAbstractPhaseTransformer<D>(
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) {
@@ -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<Nothing?>(phase) {
constructor() : this(FirResolvePhase.IMPORTS)
open class FirImportResolveTransformer protected constructor(
final override val session: FirSession,
phase: FirResolvePhase
) : FirAbstractTreeTransformer<Nothing?>(phase) {
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
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<FirFile> {
checkSessionConsistency(file)
file.replaceResolvePhase(transformerPhase)
session = file.session
symbolProvider = file.session.firSymbolProvider
return file.also { it.transformChildren(this, null) }.compose()
}
@@ -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)