[LL FIR] LLFirLazyResolver: drop ScopeSession parameter

It can be inferred from `LLFirResolveTarget` inside
`LLFirTargetResolver`
This commit is contained in:
Dmitrii Gridin
2024-02-17 23:43:11 +01:00
committed by Space Team
parent 7d672cd474
commit efeffb45b7
15 changed files with 22 additions and 69 deletions
@@ -13,20 +13,18 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodie
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
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.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
internal abstract class LLFirAbstractBodyTargetResolver( internal abstract class LLFirAbstractBodyTargetResolver(
resolveTarget: LLFirResolveTarget, resolveTarget: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
private val scopeSession: ScopeSession,
resolvePhase: FirResolvePhase, resolvePhase: FirResolvePhase,
protected val llImplicitBodyResolveComputationSession: LLImplicitBodyResolveComputationSession = LLImplicitBodyResolveComputationSession(), protected val llImplicitBodyResolveComputationSession: LLImplicitBodyResolveComputationSession = LLImplicitBodyResolveComputationSession(),
isJumpingPhase: Boolean = false, isJumpingPhase: Boolean = false,
) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) { ) : LLFirTargetResolver(resolveTarget, lockProvider, resolvePhase, isJumpingPhase) {
protected fun createReturnTypeCalculator(): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump( protected fun createReturnTypeCalculator(): LLFirReturnTypeCalculatorWithJump = LLFirReturnTypeCalculatorWithJump(
scopeSession, resolveTargetScopeSession,
llImplicitBodyResolveComputationSession, llImplicitBodyResolveComputationSession,
lockProvider, lockProvider,
) )
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.isError import org.jetbrains.kotlin.fir.references.isError
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.transformers.plugin.FirAnnotationArgumentsTransformer import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirAnnotationArgumentsTransformer
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -33,8 +32,7 @@ internal object LLFirAnnotationArgumentsLazyResolver : LLFirLazyResolver(FirReso
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirAnnotationArgumentsTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirAnnotationArgumentsTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
if (target !is FirAnnotationContainer) return if (target !is FirAnnotationContainer) return
@@ -76,11 +74,9 @@ internal object LLFirAnnotationArgumentsLazyResolver : LLFirLazyResolver(FirReso
private class LLFirAnnotationArgumentsTargetResolver( private class LLFirAnnotationArgumentsTargetResolver(
resolveTarget: LLFirResolveTarget, resolveTarget: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
resolveTarget, resolveTarget,
lockProvider, lockProvider,
scopeSession,
FirResolvePhase.ANNOTATION_ARGUMENTS, FirResolvePhase.ANNOTATION_ARGUMENTS,
) { ) {
/** /**
@@ -97,7 +93,7 @@ private class LLFirAnnotationArgumentsTargetResolver(
*/ */
override val transformer = FirAnnotationArgumentsTransformer( override val transformer = FirAnnotationArgumentsTransformer(
resolveTargetSession, resolveTargetSession,
scopeSession, resolveTargetScopeSession,
resolverPhase, resolverPhase,
returnTypeCalculator = createReturnTypeCalculator(), returnTypeCalculator = createReturnTypeCalculator(),
) )
@@ -54,8 +54,7 @@ internal object LLFirBodyLazyResolver : LLFirLazyResolver(FirResolvePhase.BODY_R
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirBodyTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirBodyTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
when (target) { when (target) {
@@ -73,18 +72,16 @@ internal object LLFirBodyLazyResolver : LLFirLazyResolver(FirResolvePhase.BODY_R
private class LLFirBodyTargetResolver( private class LLFirBodyTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
target, target,
lockProvider, lockProvider,
scopeSession,
FirResolvePhase.BODY_RESOLVE, FirResolvePhase.BODY_RESOLVE,
) { ) {
override val transformer = object : FirBodyResolveTransformer( override val transformer = object : FirBodyResolveTransformer(
resolveTargetSession, resolveTargetSession,
phase = resolverPhase, phase = resolverPhase,
implicitTypeOnly = false, implicitTypeOnly = false,
scopeSession = scopeSession, scopeSession = resolveTargetScopeSession,
returnTypeCalculator = createReturnTypeCalculator(), returnTypeCalculator = createReturnTypeCalculator(),
) { ) {
override val preserveCFGForClasses: Boolean get() = false override val preserveCFGForClasses: Boolean get() = false
@@ -35,8 +35,7 @@ internal object LLFirCompilerAnnotationsLazyResolver : LLFirLazyResolver(FirReso
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirCompilerRequiredAnnotationsTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirCompilerRequiredAnnotationsTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
when (target) { when (target) {
@@ -49,7 +48,6 @@ internal object LLFirCompilerAnnotationsLazyResolver : LLFirLazyResolver(FirReso
private class LLFirCompilerRequiredAnnotationsTargetResolver( private class LLFirCompilerRequiredAnnotationsTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
computationSession: LLFirCompilerRequiredAnnotationsComputationSession? = null, computationSession: LLFirCompilerRequiredAnnotationsComputationSession? = null,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS, isJumpingPhase = false) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.COMPILER_REQUIRED_ANNOTATIONS, isJumpingPhase = false) {
inner class LLFirCompilerRequiredAnnotationsComputationSession : CompilerRequiredAnnotationsComputationSession() { inner class LLFirCompilerRequiredAnnotationsComputationSession : CompilerRequiredAnnotationsComputationSession() {
@@ -59,11 +57,9 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver(
symbol.lazyResolveToPhase(resolverPhase.previous) symbol.lazyResolveToPhase(resolverPhase.previous)
val designation = regularClass.collectDesignation().asResolveTarget() val designation = regularClass.collectDesignation().asResolveTarget()
val targetSession = designation.target.llFirSession
val resolver = LLFirCompilerRequiredAnnotationsTargetResolver( val resolver = LLFirCompilerRequiredAnnotationsTargetResolver(
designation, designation,
lockProvider, lockProvider,
targetSession.getScopeSession(),
this, this,
) )
@@ -75,7 +71,7 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver(
private val transformer = FirCompilerRequiredAnnotationsResolveTransformer( private val transformer = FirCompilerRequiredAnnotationsResolveTransformer(
resolveTargetSession, resolveTargetSession,
scopeSession, resolveTargetScopeSession,
computationSession ?: LLFirCompilerRequiredAnnotationsComputationSession(), computationSession ?: LLFirCompilerRequiredAnnotationsComputationSession(),
) )
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor
import org.jetbrains.kotlin.fir.isCopyCreatedInScope import org.jetbrains.kotlin.fir.isCopyCreatedInScope
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.contracts.FirContractResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.contracts.FirContractResolveTransformer
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
@@ -26,8 +25,7 @@ internal object LLFirContractsLazyResolver : LLFirLazyResolver(FirResolvePhase.C
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirContractsTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirContractsTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
if (target !is FirContractDescriptionOwner) return if (target !is FirContractDescriptionOwner) return
@@ -38,14 +36,12 @@ internal object LLFirContractsLazyResolver : LLFirLazyResolver(FirResolvePhase.C
private class LLFirContractsTargetResolver( private class LLFirContractsTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
target, target,
lockProvider, lockProvider,
scopeSession,
FirResolvePhase.CONTRACTS, FirResolvePhase.CONTRACTS,
) { ) {
override val transformer = FirContractResolveTransformer(resolveTargetSession, scopeSession) override val transformer = FirContractResolveTransformer(resolveTargetSession, resolveTargetScopeSession)
override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { override fun doLazyResolveUnderLock(target: FirElementWithResolveState) {
// There is no sense to resolve such declarations as they do not have contracts // There is no sense to resolve such declarations as they do not have contracts
@@ -14,7 +14,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.isCopyCreatedInScope import org.jetbrains.kotlin.fir.isCopyCreatedInScope
import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.mpp.FirExpectActualMatcherTransformer import org.jetbrains.kotlin.fir.resolve.transformers.mpp.FirExpectActualMatcherTransformer
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
@@ -22,8 +21,7 @@ internal object LLFirExpectActualMatcherLazyResolver : LLFirLazyResolver(FirReso
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirExpectActualMatchingTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirExpectActualMatchingTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
if (target.moduleData.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects) && if (target.moduleData.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects) &&
@@ -38,7 +36,6 @@ internal object LLFirExpectActualMatcherLazyResolver : LLFirLazyResolver(FirReso
private class LLFirExpectActualMatchingTargetResolver( private class LLFirExpectActualMatchingTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.EXPECT_ACTUAL_MATCHING) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.EXPECT_ACTUAL_MATCHING) {
private val enabled = resolveTargetSession.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects) private val enabled = resolveTargetSession.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)
@@ -52,7 +49,7 @@ private class LLFirExpectActualMatchingTargetResolver(
action() action()
} }
private val transformer = object : FirExpectActualMatcherTransformer(resolveTargetSession, scopeSession) { private val transformer = object : FirExpectActualMatcherTransformer(resolveTargetSession, resolveTargetScopeSession) {
override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): FirStatement { override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): FirStatement {
transformMemberDeclaration(regularClass) transformMemberDeclaration(regularClass)
return regularClass return regularClass
@@ -10,14 +10,12 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockPro
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirCompanionGenerationTransformer import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirCompanionGenerationTransformer
internal object LLFirGeneratedCompanionObjectLazyResolver : LLFirLazyResolver(FirResolvePhase.COMPANION_GENERATION) { internal object LLFirGeneratedCompanionObjectLazyResolver : LLFirLazyResolver(FirResolvePhase.COMPANION_GENERATION) {
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
): LLFirTargetResolver = LLFirCompanionGenerationTargetResolver(target, lockProvider) ): LLFirTargetResolver = LLFirCompanionGenerationTargetResolver(target, lockProvider)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {} override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {}
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.isCopyCreatedInScope import org.jetbrains.kotlin.fir.isCopyCreatedInScope
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@@ -31,8 +30,7 @@ internal object LLFirImplicitTypesLazyResolver : LLFirLazyResolver(FirResolvePha
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirImplicitBodyTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirImplicitBodyTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
if (target !is FirCallableDeclaration) return if (target !is FirCallableDeclaration) return
@@ -126,12 +124,10 @@ internal class LLImplicitBodyResolveComputationSession : ImplicitBodyResolveComp
internal class LLFirImplicitBodyTargetResolver( internal class LLFirImplicitBodyTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
llImplicitBodyResolveComputationSessionParameter: LLImplicitBodyResolveComputationSession? = null, llImplicitBodyResolveComputationSessionParameter: LLImplicitBodyResolveComputationSession? = null,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
target, target,
lockProvider, lockProvider,
scopeSession,
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
llImplicitBodyResolveComputationSession = llImplicitBodyResolveComputationSessionParameter ?: LLImplicitBodyResolveComputationSession(), llImplicitBodyResolveComputationSession = llImplicitBodyResolveComputationSessionParameter ?: LLImplicitBodyResolveComputationSession(),
isJumpingPhase = true, isJumpingPhase = true,
@@ -141,7 +137,7 @@ internal class LLFirImplicitBodyTargetResolver(
implicitBodyResolveComputationSession = llImplicitBodyResolveComputationSession, implicitBodyResolveComputationSession = llImplicitBodyResolveComputationSession,
phase = resolverPhase, phase = resolverPhase,
implicitTypeOnly = true, implicitTypeOnly = true,
scopeSession = scopeSession, scopeSession = resolveTargetScopeSession,
returnTypeCalculator = createReturnTypeCalculator(), returnTypeCalculator = createReturnTypeCalculator(),
) { ) {
override val preserveCFGForClasses: Boolean get() = false override val preserveCFGForClasses: Boolean get() = false
@@ -8,11 +8,9 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget
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.lazy.resolve.LLFirPhaseUpdater import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirPhaseUpdater
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
/** /**
@@ -23,8 +21,7 @@ import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
*/ */
internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) { internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
fun resolve(target: LLFirResolveTarget, lockProvider: LLFirLockProvider) { fun resolve(target: LLFirResolveTarget, lockProvider: LLFirLockProvider) {
val scopeSession = target.target.llFirSession.getScopeSession() val resolver = createTargetResolver(target, lockProvider)
val resolver = createTargetResolver(target, lockProvider, scopeSession)
requireWithAttachment( requireWithAttachment(
resolverPhase == resolver.resolverPhase, resolverPhase == resolver.resolverPhase,
{ {
@@ -41,7 +38,6 @@ internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
protected abstract fun createTargetResolver( protected abstract fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
): LLFirTargetResolver ): LLFirTargetResolver
fun checkIsResolved(target: FirElementWithResolveState) { fun checkIsResolved(target: FirElementWithResolveState) {
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignation
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarget
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.sessions.llFirSession
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.analysis.low.level.api.fir.transformers.LLImplicitBodyResolveComputationSession
@@ -32,12 +31,10 @@ internal class LLFirReturnTypeCalculatorWithJump(
declaration.lazyResolveToPhase(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE.previous) declaration.lazyResolveToPhase(FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE.previous)
val designation = declaration.collectDesignation().asResolveTarget() val designation = declaration.collectDesignation().asResolveTarget()
val targetSession = designation.target.llFirSession
val computationSession = implicitBodyResolveComputationSession as LLImplicitBodyResolveComputationSession val computationSession = implicitBodyResolveComputationSession as LLImplicitBodyResolveComputationSession
val resolver = LLFirImplicitBodyTargetResolver( val resolver = LLFirImplicitBodyTargetResolver(
designation, designation,
lockProvider = lockProvider, lockProvider = lockProvider,
scopeSession = targetSession.getScopeSession(),
llImplicitBodyResolveComputationSessionParameter = computationSession, llImplicitBodyResolveComputationSessionParameter = computationSession,
) )
@@ -9,13 +9,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveT
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.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.ScopeSession
internal object LLFirSealedClassInheritorsLazyResolver : LLFirLazyResolver(FirResolvePhase.SEALED_CLASS_INHERITORS) { internal object LLFirSealedClassInheritorsLazyResolver : LLFirLazyResolver(FirResolvePhase.SEALED_CLASS_INHERITORS) {
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
): LLFirTargetResolver = LLFirSealedClassInheritorsDesignatedResolver(target, lockProvider) ): LLFirTargetResolver = LLFirSealedClassInheritorsDesignatedResolver(target, lockProvider)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {} override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {}
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarg
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.session import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.session
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignation
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.sessions.llFirSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDeclarationStatusIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDeclarationStatusIsResolved
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
@@ -33,11 +32,9 @@ internal object LLFirStatusLazyResolver : LLFirLazyResolver(FirResolvePhase.STAT
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
): LLFirTargetResolver = LLFirStatusTargetResolver( ): LLFirTargetResolver = LLFirStatusTargetResolver(
target = target, target = target,
lockProvider = lockProvider, lockProvider = lockProvider,
scopeSession = scopeSession,
resolveMode = target.resolveMode(), resolveMode = target.resolveMode(),
) )
@@ -102,11 +99,10 @@ private class LLStatusComputationSession(val useSiteSession: FirSession) : Statu
private class LLFirStatusTargetResolver( private class LLFirStatusTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
private val statusComputationSession: LLStatusComputationSession = LLStatusComputationSession(target.session), private val statusComputationSession: LLStatusComputationSession = LLStatusComputationSession(target.session),
private val resolveMode: StatusResolveMode, private val resolveMode: StatusResolveMode,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.STATUS, isJumpingPhase = false) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.STATUS, isJumpingPhase = false) {
private val transformer = Transformer(resolveTargetSession, scopeSession) private val transformer = Transformer(resolveTargetSession, resolveTargetScopeSession)
@Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR)
override fun withContainingRegularClass(firClass: FirRegularClass, action: () -> Unit) { override fun withContainingRegularClass(firClass: FirRegularClass, action: () -> Unit) {
@@ -252,11 +248,9 @@ private class LLFirStatusTargetResolver(
} }
val target = regularClass.tryCollectDesignation()?.asResolveTarget() ?: return false val target = regularClass.tryCollectDesignation()?.asResolveTarget() ?: return false
val targetSession = target.target.llFirSession
val resolver = LLFirStatusTargetResolver( val resolver = LLFirStatusTargetResolver(
target, target,
lockProvider, lockProvider,
targetSession.getScopeSession(),
computationSession, computationSession,
resolveMode = resolveMode, resolveMode = resolveMode,
) )
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.declarations.utils.isActual
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.fir.resolve.transformers.FirSupertypeResolverVisitor import org.jetbrains.kotlin.fir.resolve.transformers.FirSupertypeResolverVisitor
@@ -36,8 +35,7 @@ internal object LLFirSupertypeLazyResolver : LLFirLazyResolver(FirResolvePhase.S
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirSuperTypeTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirSuperTypeTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
when (target) { when (target) {
@@ -57,14 +55,13 @@ internal object LLFirSupertypeLazyResolver : LLFirLazyResolver(FirResolvePhase.S
private class LLFirSuperTypeTargetResolver( private class LLFirSuperTypeTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
private val scopeSession: ScopeSession,
private val supertypeComputationSession: LLFirSupertypeComputationSession = LLFirSupertypeComputationSession(target.session), private val supertypeComputationSession: LLFirSupertypeComputationSession = LLFirSupertypeComputationSession(target.session),
private val visitedElements: MutableSet<FirElementWithResolveState> = hashSetOf(), private val visitedElements: MutableSet<FirElementWithResolveState> = hashSetOf(),
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.SUPER_TYPES, isJumpingPhase = false) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.SUPER_TYPES, isJumpingPhase = false) {
private val supertypeResolver = object : FirSupertypeResolverVisitor( private val supertypeResolver = object : FirSupertypeResolverVisitor(
session = resolveTargetSession, session = resolveTargetSession,
supertypeComputationSession = supertypeComputationSession, supertypeComputationSession = supertypeComputationSession,
scopeSession = scopeSession, scopeSession = resolveTargetScopeSession,
) { ) {
/** /**
* We can do nothing here because at a call moment we've already resolved [outerClass] * We can do nothing here because at a call moment we've already resolved [outerClass]
@@ -108,7 +105,7 @@ private class LLFirSuperTypeTargetResolver(
resolver = { supertypeResolver.resolveSpecificClassLikeSupertypes(target, it) }, resolver = { supertypeResolver.resolveSpecificClassLikeSupertypes(target, it) },
superTypeUpdater = { superTypeUpdater = {
target.replaceSuperTypeRefs(it) target.replaceSuperTypeRefs(it)
resolveTargetSession.platformSupertypeUpdater?.updateSupertypesIfNeeded(target, scopeSession) resolveTargetSession.platformSupertypeUpdater?.updateSupertypesIfNeeded(target, resolveTargetScopeSession)
}, },
) )
is FirTypeAlias -> performResolve( is FirTypeAlias -> performResolve(
@@ -185,7 +182,6 @@ private class LLFirSuperTypeTargetResolver(
LLFirSuperTypeTargetResolver( LLFirSuperTypeTargetResolver(
target = target, target = target,
lockProvider = lockProvider, lockProvider = lockProvider,
scopeSession = target.session.getScopeSession(),
supertypeComputationSession = supertypeComputationSession, supertypeComputationSession = supertypeComputationSession,
visitedElements = visitedElements, visitedElements = visitedElements,
).resolveDesignation() ).resolveDesignation()
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.componentFunctionSymbol
import org.jetbrains.kotlin.fir.declarations.utils.correspondingValueParameterFromPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.utils.correspondingValueParameterFromPrimaryConstructor
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
import org.jetbrains.kotlin.fir.originalIfFakeOverrideOrDelegated import org.jetbrains.kotlin.fir.originalIfFakeOverrideOrDelegated
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
import org.jetbrains.kotlin.resolve.DataClassResolver import org.jetbrains.kotlin.resolve.DataClassResolver
@@ -43,6 +44,7 @@ internal abstract class LLFirTargetResolver(
private val isJumpingPhase: Boolean = false, private val isJumpingPhase: Boolean = false,
) : LLFirResolveTargetVisitor { ) : LLFirResolveTargetVisitor {
val resolveTargetSession: LLFirSession get() = resolveTarget.session val resolveTargetSession: LLFirSession get() = resolveTarget.session
val resolveTargetScopeSession: ScopeSession get() = resolveTargetSession.getScopeSession()
private val _containingDeclarations = mutableListOf<FirDeclaration>() private val _containingDeclarations = mutableListOf<FirDeclaration>()
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.session
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.lazy.resolve.FirLazyBodiesCalculator import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodiesCalculator
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkAnnotationTypeIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkAnnotationTypeIsResolved
@@ -19,7 +18,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
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.transformers.FirTypeResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
@@ -33,8 +31,7 @@ internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES)
override fun createTargetResolver( override fun createTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession, ): LLFirTargetResolver = LLFirTypeTargetResolver(target, lockProvider)
): LLFirTargetResolver = LLFirTypeTargetResolver(target, lockProvider, scopeSession)
override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) {
if (target is FirAnnotationContainer) { if (target is FirAnnotationContainer) {
@@ -66,9 +63,8 @@ internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES)
private class LLFirTypeTargetResolver( private class LLFirTypeTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
scopeSession: ScopeSession,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.TYPES) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.TYPES) {
private val transformer = object : FirTypeResolveTransformer(target.session, scopeSession) { private val transformer = object : FirTypeResolveTransformer(resolveTargetSession, resolveTargetScopeSession) {
override fun transformTypeRef(typeRef: FirTypeRef, data: Any?): FirResolvedTypeRef { override fun transformTypeRef(typeRef: FirTypeRef, data: Any?): FirResolvedTypeRef {
FirLazyBodiesCalculator.calculateAnnotations(typeRef, session) FirLazyBodiesCalculator.calculateAnnotations(typeRef, session)
return super.transformTypeRef(typeRef, data) return super.transformTypeRef(typeRef, data)