[FIR] ReturnTypeCalculatorWithJump: use outer transformer instead of type calculator
This is a more flexible solution ^KT-63042
This commit is contained in:
committed by
Space Team
parent
edb496f260
commit
a7afd1fe01
+1
-2
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
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.FirResolveContextCollector
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
|
||||
@@ -34,7 +33,7 @@ internal abstract class LLFirAbstractBodyTargetResolver(
|
||||
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) {
|
||||
protected fun createReturnTypeCalculator(
|
||||
firResolveContextCollector: FirResolveContextCollector?,
|
||||
): ReturnTypeCalculator = LLFirReturnTypeCalculatorWithJump(
|
||||
): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump(
|
||||
scopeSession,
|
||||
implicitBodyResolveComputationSession,
|
||||
lockProvider,
|
||||
|
||||
+9
-6
@@ -88,7 +88,7 @@ fun <F : FirClassLikeDeclaration> F.runContractAndBodiesResolutionForLocalClass(
|
||||
components.scopeSession,
|
||||
implicitBodyResolveComputationSession,
|
||||
designationMap,
|
||||
nonLocalDeclarationResolver = currentReturnTypeCalculator,
|
||||
outerTransformer = components.transformer,
|
||||
)
|
||||
|
||||
val newContext = components.context.createSnapshotForLocalClasses(returnTypeCalculator, targetedClasses)
|
||||
@@ -103,8 +103,9 @@ fun <F : FirClassLikeDeclaration> F.runContractAndBodiesResolutionForLocalClass(
|
||||
implicitTypeOnly = false,
|
||||
returnTypeCalculator,
|
||||
outerBodyResolveContext = newContext,
|
||||
firResolveContextCollector = firResolveContextCollector
|
||||
firResolveContextCollector = firResolveContextCollector,
|
||||
)
|
||||
|
||||
return this.transform(transformer, resolutionMode)
|
||||
}
|
||||
|
||||
@@ -114,7 +115,7 @@ open class FirImplicitAwareBodyResolveTransformer(
|
||||
private val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
|
||||
phase: FirResolvePhase,
|
||||
implicitTypeOnly: Boolean,
|
||||
returnTypeCalculator: ReturnTypeCalculator,
|
||||
returnTypeCalculator: ReturnTypeCalculatorWithJump,
|
||||
outerBodyResolveContext: BodyResolveContext? = null,
|
||||
firResolveContextCollector: FirResolveContextCollector? = null,
|
||||
) : FirBodyResolveTransformer(
|
||||
@@ -183,7 +184,7 @@ open class ReturnTypeCalculatorWithJump(
|
||||
protected val scopeSession: ScopeSession,
|
||||
val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
|
||||
val designationMapForLocalClasses: Map<FirCallableDeclaration, List<FirClassLikeDeclaration>> = mapOf(),
|
||||
private val nonLocalDeclarationResolver: ReturnTypeCalculatorWithJump? = null,
|
||||
val outerTransformer: FirAbstractBodyResolveTransformerDispatcher? = null,
|
||||
) : ReturnTypeCalculator() {
|
||||
override val callableCopyTypeCalculator: CallableCopyTypeCalculator = CallableCopyTypeCalculatorWithJump()
|
||||
|
||||
@@ -292,7 +293,9 @@ open class ReturnTypeCalculatorWithJump(
|
||||
val (designation, outerBodyResolveContext) = if (declaration in designationMapForLocalClasses) {
|
||||
designationMapForLocalClasses.getValue(declaration) to outerBodyResolveContext
|
||||
} else {
|
||||
nonLocalDeclarationResolver?.let { return it.resolveDeclaration(declaration) }
|
||||
(outerTransformer?.returnTypeCalculator as? ReturnTypeCalculatorWithJump)?.resolveDeclaration(declaration)?.let {
|
||||
return it
|
||||
}
|
||||
|
||||
val provider = session.firProvider
|
||||
val file = provider.getFirCallableContainerFile(symbol)
|
||||
@@ -349,7 +352,7 @@ open class FirDesignatedBodyResolveTransformerForReturnTypeCalculator(
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
|
||||
returnTypeCalculator: ReturnTypeCalculator,
|
||||
returnTypeCalculator: ReturnTypeCalculatorWithJump,
|
||||
outerBodyResolveContext: BodyResolveContext? = null
|
||||
) : FirImplicitAwareBodyResolveTransformer(
|
||||
session,
|
||||
|
||||
Reference in New Issue
Block a user