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