[LL FIR] introduce LLImplicitBodyResolveComputationSession

This class will be used in the next commit to have a custom logic
in Low Level FIR

^KT-63042
This commit is contained in:
Dmitrii Gridin
2023-11-29 13:26:44 +01:00
committed by Space Team
parent 9888cbbfcd
commit daaf30e056
4 changed files with 14 additions and 16 deletions
@@ -6,19 +6,16 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents
import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.SessionHolder
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.LLFirReturnTypeCalculatorWithJump
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLImplicitBodyResolveComputationSession
import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
import org.jetbrains.kotlin.fir.resolve.SessionHolder
internal object PersistentCheckerContextFactory {
fun createEmptyPersistenceCheckerContext(sessionHolder: SessionHolder): PersistentCheckerContext {
val returnTypeCalculator = LLFirReturnTypeCalculatorWithJump(
scopeSession = sessionHolder.scopeSession,
implicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(),
implicitBodyResolveComputationSession = LLImplicitBodyResolveComputationSession(),
lockProvider = LLFirGlobalResolveComponents.getInstance(sessionHolder.session).lockProvider,
towerDataContextCollector = null,
)
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.resolve.ResolutionMode
import org.jetbrains.kotlin.fir.resolve.ScopeSession
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
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.transformSingle
@@ -28,14 +27,14 @@ internal abstract class LLFirAbstractBodyTargetResolver(
lockProvider: LLFirLockProvider,
private val scopeSession: ScopeSession,
resolvePhase: FirResolvePhase,
protected val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(),
protected val llImplicitBodyResolveComputationSession: LLImplicitBodyResolveComputationSession = LLImplicitBodyResolveComputationSession(),
isJumpingPhase: Boolean = false,
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) {
protected fun createReturnTypeCalculator(
firResolveContextCollector: FirResolveContextCollector?,
): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump(
scopeSession,
implicitBodyResolveComputationSession,
llImplicitBodyResolveComputationSession,
lockProvider,
firResolveContextCollector,
)
@@ -40,24 +40,26 @@ internal object LLFirImplicitTypesLazyResolver : LLFirLazyResolver(FirResolvePha
}
}
internal class LLImplicitBodyResolveComputationSession : ImplicitBodyResolveComputationSession()
internal class LLFirImplicitBodyTargetResolver(
target: LLFirResolveTarget,
lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession,
firResolveContextCollector: FirResolveContextCollector?,
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession? = null,
llImplicitBodyResolveComputationSessionParameter: LLImplicitBodyResolveComputationSession? = null,
) : LLFirAbstractBodyTargetResolver(
target,
lockProvider,
scopeSession,
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
implicitBodyResolveComputationSession = implicitBodyResolveComputationSession ?: ImplicitBodyResolveComputationSession(),
llImplicitBodyResolveComputationSession = llImplicitBodyResolveComputationSessionParameter ?: LLImplicitBodyResolveComputationSession(),
isJumpingPhase = true,
) {
override val transformer = object : FirImplicitAwareBodyResolveTransformer(
session,
implicitBodyResolveComputationSession = this.implicitBodyResolveComputationSession,
implicitBodyResolveComputationSession = llImplicitBodyResolveComputationSession,
phase = resolverPhase,
implicitTypeOnly = true,
scopeSession = scopeSession,
@@ -10,10 +10,10 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarg
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirImplicitBodyTargetResolver
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirImplicitTypesLazyResolver
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLImplicitBodyResolveComputationSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession
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.ReturnTypeCalculatorWithJump
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
internal class LLFirReturnTypeCalculatorWithJump(
scopeSession: ScopeSession,
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
implicitBodyResolveComputationSession: LLImplicitBodyResolveComputationSession,
private val lockProvider: LLFirLockProvider,
private val towerDataContextCollector: FirResolveContextCollector?,
) : ReturnTypeCalculatorWithJump(scopeSession, implicitBodyResolveComputationSession) {
@@ -39,7 +39,7 @@ internal class LLFirReturnTypeCalculatorWithJump(
session = declaration.moduleData.session,
scopeSession = scopeSession,
firResolveContextCollector = towerDataContextCollector,
implicitBodyResolveComputationSession = implicitBodyResolveComputationSession,
llImplicitBodyResolveComputationSessionParameter = implicitBodyResolveComputationSession as LLImplicitBodyResolveComputationSession,
)
lockProvider.withGlobalPhaseLock(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) {