Don't recreate FirSpecificTypeResolverTransformer during type resolve stage

This commit is contained in:
Mikhail Glukhikh
2019-11-06 13:07:01 +03:00
parent 3dd3421437
commit 3b4edb3901
2 changed files with 6 additions and 3 deletions
@@ -21,7 +21,7 @@ class FirSpecificTypeResolverTransformer(
) : FirAbstractTreeTransformer<Nothing?>(phase = FirResolvePhase.SUPER_TYPES) {
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
val typeResolver = FirTypeResolver.getInstance(session)
typeRef.transformChildren(FirSpecificTypeResolverTransformer(towerScope, session), null)
typeRef.transformChildren(this, null)
return transformType(typeRef, typeResolver.resolveType(typeRef, towerScope))
}
@@ -16,17 +16,20 @@ import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.compose
open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
phase = FirResolvePhase.TYPES,
reversedScopePriority = true
) {
override lateinit var session: FirSession
private lateinit var typeResolverTransformer: FirSpecificTypeResolverTransformer
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
session = file.session
val scopeSession = ScopeSession()
return withScopeCleanup {
towerScope.addImportingScopes(file, session, scopeSession)
typeResolverTransformer = FirSpecificTypeResolverTransformer(towerScope, session)
transformElement(file, data)
}
}
@@ -77,7 +80,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
}
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
return FirSpecificTypeResolverTransformer(towerScope, session).transformTypeRef(typeRef, data)
return typeResolverTransformer.transformTypeRef(typeRef, data)
}
override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult<FirStatement> {