Don't recreate FirSpecificTypeResolverTransformer during type resolve stage
This commit is contained in:
+1
-1
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
+5
-2
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user