diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt index f9e5dc8abca..f67fbeb258d 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt @@ -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, 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 d205c3e55c1..9b641761363 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 @@ -88,7 +88,7 @@ fun F.runContractAndBodiesResolutionForLocalClass( components.scopeSession, implicitBodyResolveComputationSession, designationMap, - nonLocalDeclarationResolver = currentReturnTypeCalculator, + outerTransformer = components.transformer, ) val newContext = components.context.createSnapshotForLocalClasses(returnTypeCalculator, targetedClasses) @@ -103,8 +103,9 @@ fun 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> = 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,