[LL FIR] LLFirLazyResolver: drop redundant FirSession argument

LLFirSession should be received from LLFirResolveTarget to avoid
potential wrong sessions
ScopeSession cannot be dropped yet as we should be able to use another
session during on-air resolution to avoid garbage in the original one

^KT-63547
This commit is contained in:
Dmitrii Gridin
2023-12-21 00:07:07 +01:00
committed by Space Team
parent 1538c125c3
commit 14082f6924
16 changed files with 39 additions and 68 deletions
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets package org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirResolvableSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
@@ -32,3 +33,5 @@ internal fun LLFirResolveTarget.resolve(phase: FirResolvePhase) {
val lazyDeclarationResolver = session.moduleComponents.firModuleLazyDeclarationResolver val lazyDeclarationResolver = session.moduleComponents.firModuleLazyDeclarationResolver
lazyDeclarationResolver.lazyResolveTarget(this, phase, towerDataContextCollector = null) lazyDeclarationResolver.lazyResolveTarget(this, phase, towerDataContextCollector = null)
} }
internal val LLFirResolveTarget.session: LLFirSession get() = target.llFirSession
@@ -35,11 +35,10 @@ internal object LLFirAnnotationArgumentsLazyResolver : LLFirLazyResolver(FirReso
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirAnnotationArgumentsTargetResolver(target, lockProvider, session, scopeSession, towerDataContextCollector) val resolver = LLFirAnnotationArgumentsTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -83,7 +82,6 @@ internal object LLFirAnnotationArgumentsLazyResolver : LLFirLazyResolver(FirReso
private class LLFirAnnotationArgumentsTargetResolver( private class LLFirAnnotationArgumentsTargetResolver(
resolveTarget: LLFirResolveTarget, resolveTarget: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
@@ -105,7 +103,7 @@ private class LLFirAnnotationArgumentsTargetResolver(
* @see org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher.transformForeignAnnotationCall * @see org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher.transformForeignAnnotationCall
*/ */
override val transformer = FirAnnotationArgumentsTransformer( override val transformer = FirAnnotationArgumentsTransformer(
session, resolveTargetSession,
scopeSession, scopeSession,
resolverPhase, resolverPhase,
returnTypeCalculator = createReturnTypeCalculator(firResolveContextCollector = firResolveContextCollector), returnTypeCalculator = createReturnTypeCalculator(firResolveContextCollector = firResolveContextCollector),
@@ -59,11 +59,10 @@ internal object LLFirBodyLazyResolver : LLFirLazyResolver(FirResolvePhase.BODY_R
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirBodyTargetResolver(target, lockProvider, session, scopeSession, towerDataContextCollector) val resolver = LLFirBodyTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -84,7 +83,6 @@ internal object LLFirBodyLazyResolver : LLFirLazyResolver(FirResolvePhase.BODY_R
private class LLFirBodyTargetResolver( private class LLFirBodyTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
@@ -94,7 +92,7 @@ private class LLFirBodyTargetResolver(
FirResolvePhase.BODY_RESOLVE, FirResolvePhase.BODY_RESOLVE,
) { ) {
override val transformer = object : FirBodyResolveTransformer( override val transformer = object : FirBodyResolveTransformer(
session, resolveTargetSession,
phase = resolverPhase, phase = resolverPhase,
implicitTypeOnly = false, implicitTypeOnly = false,
scopeSession = scopeSession, scopeSession = scopeSession,
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
import org.jetbrains.kotlin.fir.FirAnnotationContainer 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.FirSession
import org.jetbrains.kotlin.fir.caches.firCachesFactory import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.annotationPlatformSupport import org.jetbrains.kotlin.fir.declarations.annotationPlatformSupport
@@ -39,11 +38,10 @@ internal object LLFirCompilerAnnotationsLazyResolver : LLFirLazyResolver(FirReso
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirCompilerRequiredAnnotationsTargetResolver(target, lockProvider, session, scopeSession) val resolver = LLFirCompilerRequiredAnnotationsTargetResolver(target, lockProvider, scopeSession)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -58,7 +56,6 @@ internal object LLFirCompilerAnnotationsLazyResolver : LLFirLazyResolver(FirReso
private class LLFirCompilerRequiredAnnotationsTargetResolver( private class LLFirCompilerRequiredAnnotationsTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, 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) {
@@ -73,7 +70,6 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver(
val resolver = LLFirCompilerRequiredAnnotationsTargetResolver( val resolver = LLFirCompilerRequiredAnnotationsTargetResolver(
designation, designation,
lockProvider, lockProvider,
targetSession,
targetSession.getScopeSession(), targetSession.getScopeSession(),
this, this,
) )
@@ -85,7 +81,7 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver(
} }
private val transformer = FirCompilerRequiredAnnotationsResolveTransformer( private val transformer = FirCompilerRequiredAnnotationsResolveTransformer(
session, resolveTargetSession,
scopeSession, scopeSession,
computationSession ?: LLFirCompilerRequiredAnnotationsComputationSession(), computationSession ?: LLFirCompilerRequiredAnnotationsComputationSession(),
) )
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkContractDescrip
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isCallableWithSpecialBody import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isCallableWithSpecialBody
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.FirSession
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription 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
@@ -30,11 +29,10 @@ internal object LLFirContractsLazyResolver : LLFirLazyResolver(FirResolvePhase.C
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirContractsTargetResolver(target, lockProvider, session, scopeSession, towerDataContextCollector) val resolver = LLFirContractsTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -47,7 +45,6 @@ internal object LLFirContractsLazyResolver : LLFirLazyResolver(FirResolvePhase.C
private class LLFirContractsTargetResolver( private class LLFirContractsTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
) : LLFirAbstractBodyTargetResolver( ) : LLFirAbstractBodyTargetResolver(
@@ -57,7 +54,7 @@ private class LLFirContractsTargetResolver(
FirResolvePhase.CONTRACTS, FirResolvePhase.CONTRACTS,
) { ) {
override val transformer = FirContractResolveTransformer( override val transformer = FirContractResolveTransformer(
session, resolveTargetSession,
scopeSession, scopeSession,
firResolveContextCollector = firResolveContextCollector, firResolveContextCollector = firResolveContextCollector,
) )
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockPro
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkExpectForActualIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkExpectForActualIsResolved
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* 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
@@ -24,11 +23,10 @@ internal object LLFirExpectActualMatcherLazyResolver : LLFirLazyResolver(FirReso
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirExpectActualMatchingTargetResolver(target, lockProvider, session, scopeSession) val resolver = LLFirExpectActualMatchingTargetResolver(target, lockProvider, scopeSession)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -45,10 +43,9 @@ internal object LLFirExpectActualMatcherLazyResolver : LLFirLazyResolver(FirReso
private class LLFirExpectActualMatchingTargetResolver( private class LLFirExpectActualMatchingTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.EXPECT_ACTUAL_MATCHING) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.EXPECT_ACTUAL_MATCHING) {
private val enabled = session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects) private val enabled = resolveTargetSession.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)
@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 withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) {
@@ -60,7 +57,7 @@ private class LLFirExpectActualMatchingTargetResolver(
action() action()
} }
private val transformer = object : FirExpectActualMatcherTransformer(session, scopeSession) { private val transformer = object : FirExpectActualMatcherTransformer(resolveTargetSession, scopeSession) {
override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): FirStatement { override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): FirStatement {
transformMemberDeclaration(regularClass) transformMemberDeclaration(regularClass)
return regularClass return regularClass
@@ -8,7 +8,6 @@ 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.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirSession
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.ScopeSession
@@ -19,11 +18,10 @@ internal object LLFirGeneratedCompanionObjectLazyResolver : LLFirLazyResolver(Fi
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirCompanionGenerationTargetResolver(target, lockProvider, session) val resolver = LLFirCompanionGenerationTargetResolver(target, lockProvider)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
} }
@@ -31,9 +29,8 @@ internal object LLFirGeneratedCompanionObjectLazyResolver : LLFirLazyResolver(Fi
private class LLFirCompanionGenerationTargetResolver( private class LLFirCompanionGenerationTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.COMPANION_GENERATION) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.COMPANION_GENERATION) {
private val transformer: FirCompanionGenerationTransformer = FirCompanionGenerationTransformer(session) private val transformer: FirCompanionGenerationTransformer = FirCompanionGenerationTransformer(resolveTargetSession)
override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { override fun doLazyResolveUnderLock(target: FirElementWithResolveState) {
if (target !is FirRegularClass) return if (target !is FirRegularClass) return
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDecl
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptDependentDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isScriptDependentDeclaration
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.FirSession
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
@@ -35,11 +34,10 @@ internal object LLFirImplicitTypesLazyResolver : LLFirLazyResolver(FirResolvePha
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirImplicitBodyTargetResolver(target, lockProvider, session, scopeSession, towerDataContextCollector) val resolver = LLFirImplicitBodyTargetResolver(target, lockProvider, scopeSession, towerDataContextCollector)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -112,7 +110,6 @@ internal class LLImplicitBodyResolveComputationSession : ImplicitBodyResolveComp
internal class LLFirImplicitBodyTargetResolver( internal class LLFirImplicitBodyTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
firResolveContextCollector: FirResolveContextCollector?, firResolveContextCollector: FirResolveContextCollector?,
llImplicitBodyResolveComputationSessionParameter: LLImplicitBodyResolveComputationSession? = null, llImplicitBodyResolveComputationSessionParameter: LLImplicitBodyResolveComputationSession? = null,
@@ -125,7 +122,7 @@ internal class LLFirImplicitBodyTargetResolver(
isJumpingPhase = true, isJumpingPhase = true,
) { ) {
override val transformer = object : FirImplicitAwareBodyResolveTransformer( override val transformer = object : FirImplicitAwareBodyResolveTransformer(
session, resolveTargetSession,
implicitBodyResolveComputationSession = llImplicitBodyResolveComputationSession, implicitBodyResolveComputationSession = llImplicitBodyResolveComputationSession,
phase = resolverPhase, phase = resolverPhase,
implicitTypeOnly = true, implicitTypeOnly = true,
@@ -11,18 +11,14 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirPhaseUp
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.analysis.low.level.api.fir.util.forEachDependentDeclaration import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirSession
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
internal abstract class LLFirLazyResolver( internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
val resolverPhase: FirResolvePhase,
) {
abstract fun resolve( abstract fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) )
@@ -20,10 +20,9 @@ internal object LLFirLazyResolverRunner {
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val lazyResolver = LLFirLazyPhaseResolverByPhase.getByPhase(phase) val lazyResolver = LLFirLazyPhaseResolverByPhase.getByPhase(phase)
val session = target.target.moduleData.session
lockProvider.withGlobalLock { lockProvider.withGlobalLock {
lockProvider.withGlobalPhaseLock(phase) { lockProvider.withGlobalPhaseLock(phase) {
lazyResolver.resolve(target, lockProvider, session, scopeSession, towerDataContextCollector) lazyResolver.resolve(target, lockProvider, scopeSession, towerDataContextCollector)
} }
} }
@@ -38,7 +38,6 @@ internal class LLFirReturnTypeCalculatorWithJump(
val resolver = LLFirImplicitBodyTargetResolver( val resolver = LLFirImplicitBodyTargetResolver(
designation, designation,
lockProvider = lockProvider, lockProvider = lockProvider,
session = targetSession,
scopeSession = targetSession.getScopeSession(), scopeSession = targetSession.getScopeSession(),
firResolveContextCollector = towerDataContextCollector, firResolveContextCollector = towerDataContextCollector,
llImplicitBodyResolveComputationSessionParameter = implicitBodyResolveComputationSession as LLImplicitBodyResolveComputationSession, llImplicitBodyResolveComputationSessionParameter = implicitBodyResolveComputationSession as LLImplicitBodyResolveComputationSession,
@@ -8,7 +8,6 @@ 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.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirSession
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.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
@@ -17,7 +16,6 @@ internal object LLFirSealedClassInheritorsLazyResolver : LLFirLazyResolver(FirRe
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
@@ -8,6 +8,7 @@ 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.LLFirSingleResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirSingleResolveTarget
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.api.targets.session
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile
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.sessions.llFirSession
@@ -34,14 +35,12 @@ internal object LLFirStatusLazyResolver : LLFirLazyResolver(FirResolvePhase.STAT
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirStatusTargetResolver( val resolver = LLFirStatusTargetResolver(
target = target, target = target,
lockProvider = lockProvider, lockProvider = lockProvider,
session = session,
scopeSession = scopeSession, scopeSession = scopeSession,
resolveMode = target.resolveMode(), resolveMode = target.resolveMode(),
) )
@@ -110,12 +109,11 @@ private class LLStatusComputationSession(val useSiteSession: FirSession) : Statu
private class LLFirStatusTargetResolver( private class LLFirStatusTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
private val statusComputationSession: LLStatusComputationSession = LLStatusComputationSession(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(session, scopeSession) private val transformer = Transformer(resolveTargetSession, scopeSession)
@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 withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) {
@@ -266,7 +264,6 @@ private class LLFirStatusTargetResolver(
val resolver = LLFirStatusTargetResolver( val resolver = LLFirStatusTargetResolver(
target, target,
lockProvider, lockProvider,
targetSession,
targetSession.getScopeSession(), targetSession.getScopeSession(),
computationSession, computationSession,
resolveMode = resolveMode, resolveMode = resolveMode,
@@ -8,6 +8,7 @@ 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.LLFirSingleResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirSingleResolveTarget
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.api.targets.session
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile
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.util.checkTypeRefIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkTypeRefIsResolved
@@ -32,11 +33,10 @@ internal object LLFirSupertypeLazyResolver : LLFirLazyResolver(FirResolvePhase.S
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirSuperTypeTargetResolver(target, lockProvider, session, scopeSession) val resolver = LLFirSuperTypeTargetResolver(target, lockProvider, scopeSession)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -58,13 +58,12 @@ internal object LLFirSupertypeLazyResolver : LLFirLazyResolver(FirResolvePhase.S
private class LLFirSuperTypeTargetResolver( private class LLFirSuperTypeTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
private val session: FirSession,
private val scopeSession: ScopeSession, private val scopeSession: ScopeSession,
private val supertypeComputationSession: LLFirSupertypeComputationSession = LLFirSupertypeComputationSession(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 = session, session = resolveTargetSession,
supertypeComputationSession = supertypeComputationSession, supertypeComputationSession = supertypeComputationSession,
scopeSession = scopeSession, scopeSession = scopeSession,
) { ) {
@@ -110,7 +109,7 @@ private class LLFirSuperTypeTargetResolver(
resolver = { supertypeResolver.resolveSpecificClassLikeSupertypes(target, it) }, resolver = { supertypeResolver.resolveSpecificClassLikeSupertypes(target, it) },
superTypeUpdater = { superTypeUpdater = {
target.replaceSuperTypeRefs(it) target.replaceSuperTypeRefs(it)
session.platformSupertypeUpdater?.updateSupertypesIfNeeded(target, scopeSession) resolveTargetSession.platformSupertypeUpdater?.updateSupertypesIfNeeded(target, scopeSession)
}, },
) )
is FirTypeAlias -> performResolve( is FirTypeAlias -> performResolve(
@@ -176,7 +175,7 @@ private class LLFirSuperTypeTargetResolver(
} }
private fun FirClassLikeDeclaration.asResolveTarget(): LLFirSingleResolveTarget? { private fun FirClassLikeDeclaration.asResolveTarget(): LLFirSingleResolveTarget? {
return takeIf { it.canHaveLoopInSupertypesHierarchy(session) } return takeIf { it.canHaveLoopInSupertypesHierarchy(resolveTargetSession) }
?.tryCollectDesignationWithFile() ?.tryCollectDesignationWithFile()
?.asResolveTarget() ?.asResolveTarget()
} }
@@ -185,7 +184,6 @@ private class LLFirSuperTypeTargetResolver(
LLFirSuperTypeTargetResolver( LLFirSuperTypeTargetResolver(
target = target, target = target,
lockProvider = lockProvider, lockProvider = lockProvider,
session = session,
scopeSession = scopeSession, scopeSession = scopeSession,
supertypeComputationSession = supertypeComputationSession, supertypeComputationSession = supertypeComputationSession,
visitedElements = visitedElements, visitedElements = visitedElements,
@@ -199,14 +197,14 @@ private class LLFirSuperTypeTargetResolver(
* So we crawl the resolved supertypes of visited designations to find more designations to collect. * So we crawl the resolved supertypes of visited designations to find more designations to collect.
*/ */
private fun crawlSupertype(type: ConeKotlinType) { private fun crawlSupertype(type: ConeKotlinType) {
val classLikeDeclaration = type.toSymbol(session)?.fir val classLikeDeclaration = type.toSymbol(resolveTargetSession)?.fir
if (classLikeDeclaration !is FirClassLikeDeclaration) return if (classLikeDeclaration !is FirClassLikeDeclaration) return
if (classLikeDeclaration in visitedElements) return if (classLikeDeclaration in visitedElements) return
if (classLikeDeclaration is FirJavaClass) { if (classLikeDeclaration is FirJavaClass) {
if (!classLikeDeclaration.canHaveLoopInSupertypesHierarchy(session)) return if (!classLikeDeclaration.canHaveLoopInSupertypesHierarchy(resolveTargetSession)) return
visitedElements += classLikeDeclaration visitedElements += classLikeDeclaration
val parentClass = classLikeDeclaration.outerClass(session) val parentClass = classLikeDeclaration.outerClass(resolveTargetSession)
if (parentClass != null) { if (parentClass != null) {
crawlSupertype(parentClass.defaultType()) crawlSupertype(parentClass.defaultType())
} }
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.* import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.*
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.checkPhase import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
@@ -37,6 +38,8 @@ internal abstract class LLFirTargetResolver(
protected val resolverPhase: FirResolvePhase, protected val resolverPhase: FirResolvePhase,
private val isJumpingPhase: Boolean = false, private val isJumpingPhase: Boolean = false,
) : LLFirResolveTargetVisitor { ) : LLFirResolveTargetVisitor {
val resolveTargetSession: LLFirSession get() = resolveTarget.session
private val _nestedClassesStack = mutableListOf<FirRegularClass>() private val _nestedClassesStack = mutableListOf<FirRegularClass>()
val nestedClassesStack: List<FirRegularClass> get() = _nestedClassesStack val nestedClassesStack: List<FirRegularClass> get() = _nestedClassesStack
@@ -6,6 +6,7 @@
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
@@ -18,8 +19,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDecl
import org.jetbrains.kotlin.fir.FirAnnotationContainer 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.FirSession
import org.jetbrains.kotlin.util.PrivateForInline
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.FirTypeResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.FirTypeResolveTransformer
@@ -29,17 +28,17 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.util.PrivateForInline
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES) { internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES) {
override fun resolve( override fun resolve(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
towerDataContextCollector: FirResolveContextCollector?, towerDataContextCollector: FirResolveContextCollector?,
) { ) {
val resolver = LLFirTypeTargetResolver(target, lockProvider, session, scopeSession) val resolver = LLFirTypeTargetResolver(target, lockProvider, scopeSession)
resolver.resolveDesignation() resolver.resolveDesignation()
} }
@@ -73,10 +72,9 @@ internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES)
private class LLFirTypeTargetResolver( private class LLFirTypeTargetResolver(
target: LLFirResolveTarget, target: LLFirResolveTarget,
lockProvider: LLFirLockProvider, lockProvider: LLFirLockProvider,
session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.TYPES) { ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.TYPES) {
private val transformer = object : FirTypeResolveTransformer(session, scopeSession) { private val transformer = object : FirTypeResolveTransformer(target.session, scopeSession) {
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)