[FIR] Don't rewrite session in FirImportResolveTransformer
This commit is contained in:
+7
@@ -34,6 +34,7 @@ abstract class FirAbstractPhaseTransformer<D>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: D): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: D): CompositeTransformResult<FirFile> {
|
||||||
|
checkSessionConsistency(file)
|
||||||
file.replaceResolvePhase(transformerPhase)
|
file.replaceResolvePhase(transformerPhase)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -45,6 +46,12 @@ abstract class FirAbstractPhaseTransformer<D>(
|
|||||||
|
|
||||||
return super.transformDeclaration(declaration, data)
|
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) {
|
fun FirFile.runResolve(toPhase: FirResolvePhase, fromPhase: FirResolvePhase = FirResolvePhase.RAW_FIR) {
|
||||||
|
|||||||
+7
-13
@@ -19,27 +19,21 @@ import org.jetbrains.kotlin.fir.visitors.compose
|
|||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
open class FirImportResolveTransformer protected constructor(phase: FirResolvePhase) : FirAbstractTreeTransformer<Nothing?>(phase) {
|
open class FirImportResolveTransformer protected constructor(
|
||||||
constructor() : this(FirResolvePhase.IMPORTS)
|
final override val session: FirSession,
|
||||||
|
phase: FirResolvePhase
|
||||||
|
) : FirAbstractTreeTransformer<Nothing?>(phase) {
|
||||||
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
|
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
|
||||||
return element.compose()
|
return element.compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var symbolProvider: FirSymbolProvider
|
constructor(session: FirSession) : this(session, FirResolvePhase.IMPORTS)
|
||||||
|
|
||||||
final override lateinit var session: FirSession
|
private val symbolProvider: FirSymbolProvider = session.firSymbolProvider
|
||||||
|
|
||||||
constructor(session: FirSession) : this() {
|
|
||||||
this.session = session
|
|
||||||
// TODO: clarify this
|
|
||||||
symbolProvider = session.firSymbolProvider
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
|
checkSessionConsistency(file)
|
||||||
file.replaceResolvePhase(transformerPhase)
|
file.replaceResolvePhase(transformerPhase)
|
||||||
session = file.session
|
|
||||||
symbolProvider = file.session.firSymbolProvider
|
|
||||||
return file.also { it.transformChildren(this, null) }.compose()
|
return file.also { it.transformChildren(this, null) }.compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession:
|
|||||||
RAW_FIR -> throw AssertionError("Raw FIR building phase does not have a transformer")
|
RAW_FIR -> throw AssertionError("Raw FIR building phase does not have a transformer")
|
||||||
ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(scopeSession)
|
ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(scopeSession)
|
||||||
FIRST_PLUGIN_GENERATION -> FirFirstGenerationTransformer()
|
FIRST_PLUGIN_GENERATION -> FirFirstGenerationTransformer()
|
||||||
IMPORTS -> FirImportResolveTransformer()
|
IMPORTS -> FirImportResolveTransformer(session)
|
||||||
SUPER_TYPES -> FirSupertypeResolverTransformer(scopeSession)
|
SUPER_TYPES -> FirSupertypeResolverTransformer(scopeSession)
|
||||||
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer()
|
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer()
|
||||||
TYPES -> FirTypeResolveTransformerAdapter(scopeSession)
|
TYPES -> FirTypeResolveTransformerAdapter(scopeSession)
|
||||||
|
|||||||
Reference in New Issue
Block a user