[FIR] ReturnTypeCalculatorWithJump: use outer transformer instead of type calculator

This is a more flexible solution

^KT-63042
This commit is contained in:
Dmitrii Gridin
2023-12-01 12:28:57 +01:00
committed by Space Team
parent edb496f260
commit a7afd1fe01
2 changed files with 10 additions and 8 deletions
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ResolutionMode
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
@@ -34,7 +33,7 @@ internal abstract class LLFirAbstractBodyTargetResolver(
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) { ) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) {
protected fun createReturnTypeCalculator( protected fun createReturnTypeCalculator(
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
): ReturnTypeCalculator = LLFirReturnTypeCalculatorWithJump( ): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump(
scopeSession, scopeSession,
implicitBodyResolveComputationSession, implicitBodyResolveComputationSession,
lockProvider, lockProvider,
@@ -88,7 +88,7 @@ fun <F : FirClassLikeDeclaration> F.runContractAndBodiesResolutionForLocalClass(
components.scopeSession, components.scopeSession,
implicitBodyResolveComputationSession, implicitBodyResolveComputationSession,
designationMap, designationMap,
nonLocalDeclarationResolver = currentReturnTypeCalculator, outerTransformer = components.transformer,
) )
val newContext = components.context.createSnapshotForLocalClasses(returnTypeCalculator, targetedClasses) val newContext = components.context.createSnapshotForLocalClasses(returnTypeCalculator, targetedClasses)
@@ -103,8 +103,9 @@ fun <F : FirClassLikeDeclaration> F.runContractAndBodiesResolutionForLocalClass(
implicitTypeOnly = false, implicitTypeOnly = false,
returnTypeCalculator, returnTypeCalculator,
outerBodyResolveContext = newContext, outerBodyResolveContext = newContext,
firResolveContextCollector = firResolveContextCollector firResolveContextCollector = firResolveContextCollector,
) )
return this.transform(transformer, resolutionMode) return this.transform(transformer, resolutionMode)
} }
@@ -114,7 +115,7 @@ open class FirImplicitAwareBodyResolveTransformer(
private val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession, private val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
phase: FirResolvePhase, phase: FirResolvePhase,
implicitTypeOnly: Boolean, implicitTypeOnly: Boolean,
returnTypeCalculator: ReturnTypeCalculator, returnTypeCalculator: ReturnTypeCalculatorWithJump,
outerBodyResolveContext: BodyResolveContext? = null, outerBodyResolveContext: BodyResolveContext? = null,
firResolveContextCollector: FirResolveContextCollector? = null, firResolveContextCollector: FirResolveContextCollector? = null,
) : FirBodyResolveTransformer( ) : FirBodyResolveTransformer(
@@ -183,7 +184,7 @@ open class ReturnTypeCalculatorWithJump(
protected val scopeSession: ScopeSession, protected val scopeSession: ScopeSession,
val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession, val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
val designationMapForLocalClasses: Map<FirCallableDeclaration, List<FirClassLikeDeclaration>> = mapOf(), val designationMapForLocalClasses: Map<FirCallableDeclaration, List<FirClassLikeDeclaration>> = mapOf(),
private val nonLocalDeclarationResolver: ReturnTypeCalculatorWithJump? = null, val outerTransformer: FirAbstractBodyResolveTransformerDispatcher? = null,
) : ReturnTypeCalculator() { ) : ReturnTypeCalculator() {
override val callableCopyTypeCalculator: CallableCopyTypeCalculator = CallableCopyTypeCalculatorWithJump() override val callableCopyTypeCalculator: CallableCopyTypeCalculator = CallableCopyTypeCalculatorWithJump()
@@ -292,7 +293,9 @@ open class ReturnTypeCalculatorWithJump(
val (designation, outerBodyResolveContext) = if (declaration in designationMapForLocalClasses) { val (designation, outerBodyResolveContext) = if (declaration in designationMapForLocalClasses) {
designationMapForLocalClasses.getValue(declaration) to outerBodyResolveContext designationMapForLocalClasses.getValue(declaration) to outerBodyResolveContext
} else { } else {
nonLocalDeclarationResolver?.let { return it.resolveDeclaration(declaration) } (outerTransformer?.returnTypeCalculator as? ReturnTypeCalculatorWithJump)?.resolveDeclaration(declaration)?.let {
return it
}
val provider = session.firProvider val provider = session.firProvider
val file = provider.getFirCallableContainerFile(symbol) val file = provider.getFirCallableContainerFile(symbol)
@@ -349,7 +352,7 @@ open class FirDesignatedBodyResolveTransformerForReturnTypeCalculator(
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession, implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
returnTypeCalculator: ReturnTypeCalculator, returnTypeCalculator: ReturnTypeCalculatorWithJump,
outerBodyResolveContext: BodyResolveContext? = null outerBodyResolveContext: BodyResolveContext? = null
) : FirImplicitAwareBodyResolveTransformer( ) : FirImplicitAwareBodyResolveTransformer(
session, session,