[FIR] Don't recreate transformer in FirImplicitTypeBodyResolveTransformerAdapter
This commit is contained in:
+1
-1
@@ -29,7 +29,7 @@ fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession:
|
|||||||
TYPES -> FirTypeResolveTransformer(session, scopeSession)
|
TYPES -> FirTypeResolveTransformer(session, scopeSession)
|
||||||
STATUS -> FirStatusResolveTransformer(session)
|
STATUS -> FirStatusResolveTransformer(session)
|
||||||
CONTRACTS -> FirContractResolveTransformerAdapter(session, scopeSession)
|
CONTRACTS -> FirContractResolveTransformerAdapter(session, scopeSession)
|
||||||
IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveTransformerAdapter(scopeSession)
|
IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveTransformerAdapter(session, scopeSession)
|
||||||
BODY_RESOLVE -> FirBodyResolveTransformerAdapter(scopeSession)
|
BODY_RESOLVE -> FirBodyResolveTransformerAdapter(scopeSession)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-11
@@ -31,24 +31,25 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
|||||||
import org.jetbrains.kotlin.fir.visitors.compose
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
|
||||||
@AdapterForResolvePhase
|
@AdapterForResolvePhase
|
||||||
class FirImplicitTypeBodyResolveTransformerAdapter(private val scopeSession: ScopeSession) : FirTransformer<Nothing?>() {
|
class FirImplicitTypeBodyResolveTransformerAdapter(session: FirSession, scopeSession: ScopeSession) : FirTransformer<Nothing?>() {
|
||||||
private val implicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession()
|
private val implicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession()
|
||||||
|
private val returnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession, implicitBodyResolveComputationSession).also {
|
||||||
|
scopeSession.returnTypeCalculator = it
|
||||||
|
}
|
||||||
|
|
||||||
|
private val transformer = FirImplicitAwareBodyResolveTransformer(
|
||||||
|
session,
|
||||||
|
scopeSession,
|
||||||
|
implicitBodyResolveComputationSession,
|
||||||
|
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, implicitTypeOnly = true,
|
||||||
|
returnTypeCalculator
|
||||||
|
)
|
||||||
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
|
override fun <E : FirElement> transformElement(element: E, data: Nothing?): CompositeTransformResult<E> {
|
||||||
return element.compose()
|
return element.compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
val session = file.session
|
|
||||||
val returnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession, implicitBodyResolveComputationSession)
|
|
||||||
scopeSession.returnTypeCalculator = returnTypeCalculator
|
|
||||||
val transformer = FirImplicitAwareBodyResolveTransformer(
|
|
||||||
session,
|
|
||||||
scopeSession,
|
|
||||||
implicitBodyResolveComputationSession,
|
|
||||||
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, implicitTypeOnly = true,
|
|
||||||
returnTypeCalculator
|
|
||||||
)
|
|
||||||
return file.transform(transformer, ResolutionMode.ContextIndependent)
|
return file.transform(transformer, ResolutionMode.ContextIndependent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user