[FIR] Get rid of FirTypeResolveTransformerAdapter

This commit is contained in:
Dmitriy Novozhilov
2020-05-19 11:35:36 +03:00
parent ca4deec10e
commit 93992d1d75
2 changed files with 5 additions and 20 deletions
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.resolve.transformers package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -17,36 +16,21 @@ import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.compose import org.jetbrains.kotlin.fir.visitors.compose
@AdapterForResolvePhase
class FirTypeResolveTransformerAdapter(
private val scopeSession: ScopeSession
) : FirTransformer<Nothing?>() {
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
error("Should not be called for ${element::class}, only for files")
}
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirDeclaration> {
val transformer = FirTypeResolveTransformer(scopeSession, file.session)
return file.transform(transformer, null)
}
}
fun <F : FirClass<F>> F.runTypeResolvePhaseForLocalClass( fun <F : FirClass<F>> F.runTypeResolvePhaseForLocalClass(
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
currentScopeList: List<FirScope>, currentScopeList: List<FirScope>,
): F { ): F {
val transformer = FirTypeResolveTransformer(scopeSession, session, currentScopeList) val transformer = FirTypeResolveTransformer(session, scopeSession, currentScopeList)
return this.transform<F, Nothing?>(transformer, null).single return this.transform<F, Nothing?>(transformer, null).single
} }
private class FirTypeResolveTransformer( class FirTypeResolveTransformer(
private val scopeSession: ScopeSession,
override val session: FirSession, override val session: FirSession,
private val scopeSession: ScopeSession,
initialScopes: List<FirScope> = emptyList() initialScopes: List<FirScope> = emptyList()
) : FirAbstractTreeTransformerWithSuperTypes( ) : FirAbstractTreeTransformerWithSuperTypes(
phase = FirResolvePhase.TYPES, phase = FirResolvePhase.TYPES,
@@ -60,6 +44,7 @@ private class FirTypeResolveTransformer(
private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer(towerScope, session) private val typeResolverTransformer: FirSpecificTypeResolverTransformer = FirSpecificTypeResolverTransformer(towerScope, session)
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> { override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
checkSessionConsistency(file)
return withScopeCleanup { return withScopeCleanup {
towerScope.addScopes(createImportingScopes(file, session, scopeSession)) towerScope.addScopes(createImportingScopes(file, session, scopeSession))
super.transformFile(file, data) super.transformFile(file, data)
@@ -26,7 +26,7 @@ fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession:
IMPORTS -> FirImportResolveTransformer(session) IMPORTS -> FirImportResolveTransformer(session)
SUPER_TYPES -> FirSupertypeResolverTransformer(session, scopeSession) SUPER_TYPES -> FirSupertypeResolverTransformer(session, scopeSession)
SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer() SEALED_CLASS_INHERITORS -> FirSealedClassInheritorsTransformer()
TYPES -> FirTypeResolveTransformerAdapter(scopeSession) TYPES -> FirTypeResolveTransformer(session, scopeSession)
STATUS -> FirStatusResolveTransformerAdapter() STATUS -> FirStatusResolveTransformerAdapter()
CONTRACTS -> FirContractResolveTransformerAdapter(scopeSession) CONTRACTS -> FirContractResolveTransformerAdapter(scopeSession)
IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveTransformerAdapter(scopeSession) IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveTransformerAdapter(scopeSession)