[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.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,
|
||||||
|
|||||||
+9
-6
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user