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) {
|
) : FirAbstractTreeTransformer<Nothing?>(phase = FirResolvePhase.SUPER_TYPES) {
|
||||||
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
|
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
|
||||||
val typeResolver = FirTypeResolver.getInstance(session)
|
val typeResolver = FirTypeResolver.getInstance(session)
|
||||||
typeRef.transformChildren(FirSpecificTypeResolverTransformer(towerScope, session), null)
|
typeRef.transformChildren(this, null)
|
||||||
return transformType(typeRef, typeResolver.resolveType(typeRef, towerScope))
|
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.CompositeTransformResult
|
||||||
import org.jetbrains.kotlin.fir.visitors.compose
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
|
||||||
open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
|
class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
|
||||||
phase = FirResolvePhase.TYPES,
|
phase = FirResolvePhase.TYPES,
|
||||||
reversedScopePriority = true
|
reversedScopePriority = true
|
||||||
) {
|
) {
|
||||||
override lateinit var session: FirSession
|
override lateinit var session: FirSession
|
||||||
|
|
||||||
|
private lateinit var typeResolverTransformer: FirSpecificTypeResolverTransformer
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
session = file.session
|
session = file.session
|
||||||
val scopeSession = ScopeSession()
|
val scopeSession = ScopeSession()
|
||||||
return withScopeCleanup {
|
return withScopeCleanup {
|
||||||
towerScope.addImportingScopes(file, session, scopeSession)
|
towerScope.addImportingScopes(file, session, scopeSession)
|
||||||
|
typeResolverTransformer = FirSpecificTypeResolverTransformer(towerScope, session)
|
||||||
transformElement(file, data)
|
transformElement(file, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -77,7 +80,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
|
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> {
|
override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult<FirStatement> {
|
||||||
|
|||||||
Reference in New Issue
Block a user