From 4e07f8180b7c56dce2425ef4951e53aa1d9340cf Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 19 May 2020 11:44:20 +0300 Subject: [PATCH] [FIR] Don't recreate transformer in FirImplicitTypeBodyResolveTransformerAdapter --- .../resolve/transformers/ResolvePhaseUtils.kt | 2 +- .../body/resolve/FirImplicitBodyResolve.kt | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt index 0cd4fe6f89e..03bada2c99c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt @@ -29,7 +29,7 @@ fun FirResolvePhase.createTransformerByPhase(session: FirSession, scopeSession: TYPES -> FirTypeResolveTransformer(session, scopeSession) STATUS -> FirStatusResolveTransformer(session) CONTRACTS -> FirContractResolveTransformerAdapter(session, scopeSession) - IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveTransformerAdapter(scopeSession) + IMPLICIT_TYPES_BODY_RESOLVE -> FirImplicitTypeBodyResolveTransformerAdapter(session, scopeSession) BODY_RESOLVE -> FirBodyResolveTransformerAdapter(scopeSession) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt index e7396d91a26..df4489c59a7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirImplicitBodyResolve.kt @@ -31,24 +31,25 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.compose @AdapterForResolvePhase -class FirImplicitTypeBodyResolveTransformerAdapter(private val scopeSession: ScopeSession) : FirTransformer() { +class FirImplicitTypeBodyResolveTransformerAdapter(session: FirSession, scopeSession: ScopeSession) : FirTransformer() { 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 transformElement(element: E, data: Nothing?): CompositeTransformResult { return element.compose() } override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - 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) } }