From a7cfbe6d50b6558db9285e4afd664c66c6b258be Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 12 Dec 2023 15:55:29 +0100 Subject: [PATCH] [LL FIR] drop redundant usages of LLFirResolveTarget.firFile After 6893c44a 'target' can be used in many cases ^KT-64243 --- .../level/api/fir/api/targets/targetUtils.kt | 6 ++--- .../LLFirModuleLazyDeclarationResolver.kt | 2 +- .../LLFirAbstractBodyTargetResolver.kt | 7 +++-- .../fir/transformers/LLFirBodyLazyResolver.kt | 26 +++++++++---------- .../LLFirContractsLazyResolver.kt | 14 +++++----- .../transformers/LLFirLazyResolverRunner.kt | 3 +-- 6 files changed, 28 insertions(+), 30 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/targetUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/targetUtils.kt index 8d3ead1dc45..927c2fc3c9a 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/targetUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/targets/targetUtils.kt @@ -24,9 +24,9 @@ internal fun FirDesignationWithFile.asResolveTarget(): LLFirSingleResolveTarget * The owning session must be a resolvable one. */ internal fun LLFirResolveTarget.resolve(phase: FirResolvePhase) { - val session = firFile.llFirResolvableSession - ?: errorWithAttachment("Resolvable session expected, got '${firFile.llFirSession::class.java}'") { - withEntry("firSession", firFile.llFirSession) { it.toString() } + val session = target.llFirResolvableSession + ?: errorWithAttachment("Resolvable session expected, got '${target.llFirSession::class.java}'") { + withEntry("firSession", target.llFirSession) { it.toString() } } val lazyDeclarationResolver = session.moduleComponents.firModuleLazyDeclarationResolver diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt index 98de89bbf33..2d852a583ab 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/LLFirModuleLazyDeclarationResolver.kt @@ -253,7 +253,7 @@ private fun handleExceptionFromResolve( designation: LLFirResolveTarget, toPhase: FirResolvePhase, ): Nothing { - val session = designation.firFile.llFirSession + val session = designation.target.llFirSession val moduleData = session.llFirModuleData val module = moduleData.ktModule diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt index ec12b4831cc..7c751e16e3f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAbstractBodyTargetResolver.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.LLFirReturnTypeCalculatorWithJump import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformerDispatcher import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector -import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.ImplicitBodyResolveComputationSession import org.jetbrains.kotlin.fir.visitors.transformSingle internal abstract class LLFirAbstractBodyTargetResolver( @@ -68,8 +67,8 @@ internal abstract class LLFirAbstractBodyTargetResolver( } } - protected fun resolve(target: T, keeper: StateKeeper) { - val firDesignation = FirDesignationWithFile(nestedClassesStack, target, resolveTarget.firFile) + protected fun resolve(target: T, keeper: StateKeeper) { + val firDesignation = FirDesignation(nestedClassesStack, target) resolveWithKeeper(target, firDesignation, keeper, { FirLazyBodiesCalculator.calculateBodies(firDesignation) }) { rawResolve(target) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt index 17e8a7dd9b1..686ca4c0cc1 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirBodyLazyResolver.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getModule import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget @@ -325,7 +325,7 @@ private class LLFirBodyTargetResolver( LLFirDeclarationModificationService.bodyResolved(target, resolverPhase) } - protected fun resolveScript(script: FirScript) { + private fun resolveScript(script: FirScript) { transformer.declarationsTransformer.withScript(script) { script.parameters.forEach { it.transformSingle(transformer, ResolutionMode.ContextIndependent) } script.transformDeclarations( @@ -346,7 +346,7 @@ private class LLFirBodyTargetResolver( } internal object BodyStateKeepers { - val SCRIPT: StateKeeper = stateKeeper { script, designation -> + val SCRIPT: StateKeeper = stateKeeper { script, designation -> val oldDeclarations = script.declarations if (oldDeclarations.none { it.isElementWhichShouldBeResolvedAsPartOfScript }) return@stateKeeper @@ -365,7 +365,7 @@ internal object BodyStateKeepers { add(FirScript::controlFlowGraphReference, FirScript::replaceControlFlowGraphReference) } - private val RESULT_PROPERTY: StateKeeper = stateKeeper { script, _ -> + private val RESULT_PROPERTY: StateKeeper = stateKeeper { script, _ -> val resultedProperty = script.findResultProperty() ?: return@stateKeeper add( provider = { resultedProperty.bodyResolveState }, @@ -383,16 +383,16 @@ internal object BodyStateKeepers { ) } - val CODE_FRAGMENT: StateKeeper = stateKeeper { _, _ -> + val CODE_FRAGMENT: StateKeeper = stateKeeper { _, _ -> add(FirCodeFragment::block, FirCodeFragment::replaceBlock, ::blockGuard) } - val ANONYMOUS_INITIALIZER: StateKeeper = stateKeeper { _, _ -> + val ANONYMOUS_INITIALIZER: StateKeeper = stateKeeper { _, _ -> add(FirAnonymousInitializer::body, FirAnonymousInitializer::replaceBody, ::blockGuard) add(FirAnonymousInitializer::controlFlowGraphReference, FirAnonymousInitializer::replaceControlFlowGraphReference) } - val FUNCTION: StateKeeper = stateKeeper { function, designation -> + val FUNCTION: StateKeeper = stateKeeper { function, designation -> if (function.isCertainlyResolved) { if (!isCallableWithSpecialBody(function)) { entityList(function.valueParameters, VALUE_PARAMETER, designation) @@ -413,12 +413,12 @@ internal object BodyStateKeepers { add(FirFunction::controlFlowGraphReference, FirFunction::replaceControlFlowGraphReference) } - val CONSTRUCTOR: StateKeeper = stateKeeper { _, designation -> + val CONSTRUCTOR: StateKeeper = stateKeeper { _, designation -> add(FUNCTION, designation) add(FirConstructor::delegatedConstructor, FirConstructor::replaceDelegatedConstructor, ::delegatedConstructorCallGuard) } - val VARIABLE: StateKeeper = stateKeeper { variable, _ -> + val VARIABLE: StateKeeper = stateKeeper { variable, _ -> add(FirVariable::returnTypeRef, FirVariable::replaceReturnTypeRef) if (!isCallableWithSpecialBody(variable)) { @@ -427,7 +427,7 @@ internal object BodyStateKeepers { } } - private val VALUE_PARAMETER: StateKeeper = stateKeeper { valueParameter, _ -> + private val VALUE_PARAMETER: StateKeeper = stateKeeper { valueParameter, _ -> if (valueParameter.defaultValue != null) { add(FirValueParameter::defaultValue, FirValueParameter::replaceDefaultValue, ::expressionGuard) } @@ -435,12 +435,12 @@ internal object BodyStateKeepers { add(FirValueParameter::controlFlowGraphReference, FirValueParameter::replaceControlFlowGraphReference) } - val FIELD: StateKeeper = stateKeeper { _, designation -> + val FIELD: StateKeeper = stateKeeper { _, designation -> add(VARIABLE, designation) add(FirField::controlFlowGraphReference, FirField::replaceControlFlowGraphReference) } - val PROPERTY: StateKeeper = stateKeeper { property, designation -> + val PROPERTY: StateKeeper = stateKeeper { property, designation -> if (property.bodyResolveState >= FirPropertyBodyResolveState.ALL_BODIES_RESOLVED) { return@stateKeeper } @@ -459,7 +459,7 @@ internal object BodyStateKeepers { } context(StateKeeperBuilder) -private fun StateKeeperScope.preserveContractBlock(function: FirFunction) { +private fun StateKeeperScope.preserveContractBlock(function: FirFunction) { val oldBody = function.body if (oldBody == null || oldBody is FirLazyBlock) { return diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt index 62c259f7b8e..b747581fbef 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider @@ -193,11 +193,11 @@ private class LLFirContractsTargetResolver( } private object ContractStateKeepers { - private val CONTRACT_DESCRIPTION_OWNER: StateKeeper = stateKeeper { _, _ -> + private val CONTRACT_DESCRIPTION_OWNER: StateKeeper = stateKeeper { _, _ -> add(FirContractDescriptionOwner::contractDescription, FirContractDescriptionOwner::replaceContractDescription) } - private val BODY_OWNER: StateKeeper = stateKeeper { declaration, _ -> + private val BODY_OWNER: StateKeeper = stateKeeper { declaration, _ -> if (declaration is FirContractDescriptionOwner && declaration.contractDescription is FirRawContractDescription) { // No need to change the body, contract is declared separately return@stateKeeper @@ -208,22 +208,22 @@ private object ContractStateKeepers { } } - val SIMPLE_FUNCTION: StateKeeper = stateKeeper { _, designation -> + val SIMPLE_FUNCTION: StateKeeper = stateKeeper { _, designation -> add(CONTRACT_DESCRIPTION_OWNER, designation) add(BODY_OWNER, designation) } - val CONSTRUCTOR: StateKeeper = stateKeeper { _, designation -> + val CONSTRUCTOR: StateKeeper = stateKeeper { _, designation -> add(CONTRACT_DESCRIPTION_OWNER, designation) add(BODY_OWNER, designation) } - private val PROPERTY_ACCESSOR: StateKeeper = stateKeeper { _, designation -> + private val PROPERTY_ACCESSOR: StateKeeper = stateKeeper { _, designation -> add(CONTRACT_DESCRIPTION_OWNER, designation) add(BODY_OWNER, designation) } - val PROPERTY: StateKeeper = stateKeeper { property, designation -> + val PROPERTY: StateKeeper = stateKeeper { property, designation -> entity(property.getter, PROPERTY_ACCESSOR, designation) entity(property.setter, PROPERTY_ACCESSOR, designation) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolverRunner.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolverRunner.kt index 12cbde9fdee..08b59fd50ba 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolverRunner.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirLazyResolverRunner.kt @@ -20,8 +20,7 @@ internal object LLFirLazyResolverRunner { towerDataContextCollector: FirResolveContextCollector?, ) { val lazyResolver = LLFirLazyPhaseResolverByPhase.getByPhase(phase) - val firFile = target.firFile - val session = firFile.moduleData.session + val session = target.target.moduleData.session lockProvider.withGlobalLock { lockProvider.withGlobalPhaseLock(phase) { lazyResolver.resolve(target, lockProvider, session, scopeSession, towerDataContextCollector)