[FIR] Don't recreate transformers in FirSupertypeResolverTransformer

This commit is contained in:
Dmitriy Novozhilov
2020-05-19 11:32:20 +03:00
parent dc30bf5d09
commit ca4deec10e
2 changed files with 7 additions and 5 deletions
@@ -25,10 +25,12 @@ import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class FirSupertypeResolverTransformer( class FirSupertypeResolverTransformer(
private val scopeSession: ScopeSession override val session: FirSession,
) : FirTransformer<Nothing?>() { scopeSession: ScopeSession
) : FirAbstractPhaseTransformer<Nothing?>(FirResolvePhase.SUPER_TYPES) {
private val supertypeComputationSession = SupertypeComputationSession() private val supertypeComputationSession = SupertypeComputationSession()
private val supertypeResolverVisitor = FirSupertypeResolverVisitor(session, supertypeComputationSession, scopeSession)
private val applySupertypesTransformer = FirApplySupertypesTransformer(supertypeComputationSession) private val applySupertypesTransformer = FirApplySupertypesTransformer(supertypeComputationSession)
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> { override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
@@ -36,9 +38,9 @@ class FirSupertypeResolverTransformer(
} }
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> { override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
val supertypeResolverVisitor = FirSupertypeResolverVisitor(file.session, supertypeComputationSession, scopeSession) checkSessionConsistency(file)
file.accept(supertypeResolverVisitor) file.accept(supertypeResolverVisitor)
supertypeComputationSession.breakLoops(file.session) supertypeComputationSession.breakLoops(session)
return file.transform(applySupertypesTransformer, null) return file.transform(applySupertypesTransformer, null)
} }
} }
@@ -24,7 +24,7 @@ fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession:
ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(session, scopeSession) ANNOTATIONS_FOR_PLUGINS -> FirPluginAnnotationsResolveTransformer(session, scopeSession)
FIRST_PLUGIN_GENERATION -> FirFirstGenerationTransformer() FIRST_PLUGIN_GENERATION -> FirFirstGenerationTransformer()
IMPORTS -> FirImportResolveTransformer(session) IMPORTS -> FirImportResolveTransformer(session)
SUPER_TYPES -> FirSupertypeResolverTransformer(scopeSession) SUPER_TYPES -> FirSupertypeResolverTransformer(session, scopeSession)
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer() SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer()
TYPES -> FirTypeResolveTransformerAdapter(scopeSession) TYPES -> FirTypeResolveTransformerAdapter(scopeSession)
STATUS -> FirStatusResolveTransformerAdapter() STATUS -> FirStatusResolveTransformerAdapter()