[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 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.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.element.builder.LLFirReturnTypeCalculatorWithJump
import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLImplicitBodyResolveComputationSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
import org.jetbrains.kotlin.fir.resolve.SessionHolder
internal object PersistentCheckerContextFactory { internal object PersistentCheckerContextFactory {
fun createEmptyPersistenceCheckerContext(sessionHolder: SessionHolder): PersistentCheckerContext { fun createEmptyPersistenceCheckerContext(sessionHolder: SessionHolder): PersistentCheckerContext {
val returnTypeCalculator = LLFirReturnTypeCalculatorWithJump( val returnTypeCalculator = LLFirReturnTypeCalculatorWithJump(
scopeSession = sessionHolder.scopeSession, scopeSession = sessionHolder.scopeSession,
implicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(), implicitBodyResolveComputationSession = LLImplicitBodyResolveComputationSession(),
lockProvider = LLFirGlobalResolveComponents.getInstance(sessionHolder.session).lockProvider, lockProvider = LLFirGlobalResolveComponents.getInstance(sessionHolder.session).lockProvider,
towerDataContextCollector = null, 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.ScopeSession
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.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
@@ -28,14 +27,14 @@ internal abstract class LLFirAbstractBodyTargetResolver(
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
private val scopeSession: ScopeSession, private val scopeSession: ScopeSession,
resolvePhase: FirResolvePhase, resolvePhase: FirResolvePhase,
protected val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(), protected val llImplicitBodyResolveComputationSession: LLImplicitBodyResolveComputationSession = LLImplicitBodyResolveComputationSession(),
isJumpingPhase: Boolean = false, isJumpingPhase: Boolean = false,
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) { ) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) {
protected fun createReturnTypeCalculator( protected fun createReturnTypeCalculator(
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump( ): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump(
scopeSession, scopeSession,
implicitBodyResolveComputationSession, llImplicitBodyResolveComputationSession,
lockProvider, lockProvider,
firResolveContextCollector, firResolveContextCollector,
) )
@@ -40,24 +40,26 @@ internal object LLFirImplicitTypesLazyResolver : LLFirLazyResolver(FirResolvePha
} }
} }
internal class LLImplicitBodyResolveComputationSession : ImplicitBodyResolveComputationSession()
internal class LLFirImplicitBodyTargetResolver( internal class LLFirImplicitBodyTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession? = null, llImplicitBodyResolveComputationSessionParameter: LLImplicitBodyResolveComputationSession? = null,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
target, target,
lockProvider, lockProvider,
scopeSession, scopeSession,
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
implicitBodyResolveComputationSession = implicitBodyResolveComputationSession ?: ImplicitBodyResolveComputationSession(), llImplicitBodyResolveComputationSession = llImplicitBodyResolveComputationSessionParameter ?: LLImplicitBodyResolveComputationSession(),
isJumpingPhase = true, isJumpingPhase = true,
) { ) {
override val transformer = object : FirImplicitAwareBodyResolveTransformer( override val transformer = object : FirImplicitAwareBodyResolveTransformer(
session, session,
implicitBodyResolveComputationSession = this.implicitBodyResolveComputationSession, implicitBodyResolveComputationSession = llImplicitBodyResolveComputationSession,
phase = resolverPhase, phase = resolverPhase,
implicitTypeOnly = true, implicitTypeOnly = true,
scopeSession = scopeSession, 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.file.builder.LLFirLockProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirImplicitBodyTargetResolver 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.LLFirImplicitTypesLazyResolver
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLImplicitBodyResolveComputationSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession 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.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.resolve.transformers.body.resolve.ReturnTypeCalculatorWithJump
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
internal class LLFirReturnTypeCalculatorWithJump( internal class LLFirReturnTypeCalculatorWithJump(
scopeSession: ScopeSession, scopeSession: ScopeSession,
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession, implicitBodyResolveComputationSession: LLImplicitBodyResolveComputationSession,
private val lockProvider: LLFirLockProvider, private val lockProvider: LLFirLockProvider,
private val towerDataContextCollector: FirResolveContextCollector?, private val towerDataContextCollector: FirResolveContextCollector?,
) : ReturnTypeCalculatorWithJump(scopeSession, implicitBodyResolveComputationSession) { ) : ReturnTypeCalculatorWithJump(scopeSession, implicitBodyResolveComputationSession) {
@@ -39,7 +39,7 @@ internal class LLFirReturnTypeCalculatorWithJump(
session = declaration.moduleData.session, session = declaration.moduleData.session,
scopeSession = scopeSession, scopeSession = scopeSession,
firResolveContextCollector = towerDataContextCollector, firResolveContextCollector = towerDataContextCollector,
implicitBodyResolveComputationSession = implicitBodyResolveComputationSession, llImplicitBodyResolveComputationSessionParameter = implicitBodyResolveComputationSession as LLImplicitBodyResolveComputationSession,
) )
lockProvider.withGlobalPhaseLock(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) { lockProvider.withGlobalPhaseLock(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE) {