[LL FIR] drop forEachDependentDeclaration

Now this function is redundant

^KT-65344
This commit is contained in:
Dmitrii Gridin
2024-02-05 14:55:19 +01:00
committed by Space Team
parent 5de5f70ec9
commit 697f1477fd
10 changed files with 3 additions and 64 deletions
@@ -12,7 +12,6 @@ import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.KtFakeSourceElementKind import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignation
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.withFirDesignationEntry import org.jetbrains.kotlin.analysis.low.level.api.fir.api.withFirDesignationEntry
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder import org.jetbrains.kotlin.fir.builder.PsiRawFirBuilder
import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription import org.jetbrains.kotlin.fir.contracts.FirRawContractDescription
@@ -668,10 +667,6 @@ private object FirTargetLazyAnnotationCalculatorTransformer : FirLazyAnnotationT
override fun transformScript(script: FirScript, data: FirLazyAnnotationTransformerData): FirScript { override fun transformScript(script: FirScript, data: FirLazyAnnotationTransformerData): FirScript {
script.transformAnnotations(this, data) script.transformAnnotations(this, data)
script.forEachDependentDeclaration {
it.transformSingle(this, data)
}
return script return script
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve package org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isElementWhichShouldBeResolvedAsPartOfScript import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isElementWhichShouldBeResolvedAsPartOfScript
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirElementWithResolveState
@@ -64,7 +63,6 @@ internal object LLFirPhaseUpdater {
} }
when (element) { when (element) {
is FirScript -> element.forEachDependentDeclaration { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) }
is FirFunction -> element.valueParameters.forEach { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } is FirFunction -> element.valueParameters.forEach { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) }
is FirProperty -> { is FirProperty -> {
element.getter?.let { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) } element.getter?.let { updatePhaseForNonLocals(it, newPhase, isTargetDeclaration = false) }
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodie
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.analysis.low.level.api.fir.util.AnnotationVisitorVoid import org.jetbrains.kotlin.analysis.low.level.api.fir.util.AnnotationVisitorVoid
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkAnnotationsAreResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkAnnotationsAreResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
@@ -193,16 +192,7 @@ private class LLFirAnnotationArgumentsTargetResolver(
} }
} }
target is FirScript -> { target is FirScript -> target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent)
target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent)
transformer.declarationsTransformer.withScript(target) {
target.forEachDependentDeclaration {
it.transformSingle(transformer, ResolutionMode.ContextIndependent)
}
target
}
}
target.isRegularDeclarationWithAnnotation -> target.transformSingle(transformer, ResolutionMode.ContextIndependent) target.isRegularDeclarationWithAnnotation -> target.transformSingle(transformer, ResolutionMode.ContextIndependent)
target is FirCodeFragment || target is FirFile -> {} target is FirCodeFragment || target is FirFile -> {}
else -> throwUnexpectedFirElementError(target) else -> throwUnexpectedFirElementError(target)
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockPro
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.sessions.llFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDeprecationProviderIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDeprecationProviderIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance 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
@@ -244,8 +243,6 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver(
target.setter?.let(::publishResult) target.setter?.let(::publishResult)
target.backingField?.let(::publishResult) target.backingField?.let(::publishResult)
} }
is FirScript -> target.forEachDependentDeclaration(::publishResult)
} }
} }
} }
@@ -268,10 +265,6 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver(
setter?.annotationsForTransformationTo(map) setter?.annotationsForTransformationTo(map)
backingField?.annotationsForTransformationTo(map) backingField?.annotationsForTransformationTo(map)
} }
is FirScript -> {
forEachDependentDeclaration { it.annotationsForTransformationTo(map) }
}
} }
if (annotations.isEmpty()) return if (annotations.isEmpty()) return
@@ -10,13 +10,11 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirEle
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.file.structure.LLFirDeclarationModificationService import org.jetbrains.kotlin.analysis.low.level.api.fir.file.structure.LLFirDeclarationModificationService
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved
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.FirFileAnnotationsContainer 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.ResolutionMode
import org.jetbrains.kotlin.fir.resolve.ScopeSession 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.FirResolveContextCollector import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector
@@ -27,7 +25,6 @@ import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.util.setMultimapOf import org.jetbrains.kotlin.fir.util.setMultimapOf
import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry
import org.jetbrains.kotlin.fir.utils.exceptions.withFirSymbolEntry import org.jetbrains.kotlin.fir.utils.exceptions.withFirSymbolEntry
import org.jetbrains.kotlin.fir.visitors.transformSingle
import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment
import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment import org.jetbrains.kotlin.utils.exceptions.requireWithAttachment
@@ -227,20 +224,7 @@ internal class LLFirImplicitBodyTargetResolver(
} }
override fun rawResolve(target: FirElementWithResolveState) { override fun rawResolve(target: FirElementWithResolveState) {
when { super.rawResolve(target)
target is FirScript -> {
transformer.declarationsTransformer.withScript(target) {
target.forEachDependentDeclaration {
it.transformSingle(transformer, ResolutionMode.ContextIndependent)
}
target
}
}
else -> super.rawResolve(target)
}
LLFirDeclarationModificationService.bodyResolved(target, resolverPhase) LLFirDeclarationModificationService.bodyResolved(target, resolverPhase)
} }
} }
@@ -9,7 +9,6 @@ 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.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.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.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.fir.resolve.ScopeSession
@@ -54,7 +53,6 @@ internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
checkFunctionParametersAreResolved(target) checkFunctionParametersAreResolved(target)
checkVariableSubDeclarationsAreResolved(target) checkVariableSubDeclarationsAreResolved(target)
checkTypeParametersAreResolved(target) checkTypeParametersAreResolved(target)
checkScriptDependentDeclarationsAreResolved(target)
} }
private fun checkVariableSubDeclarationsAreResolved(declaration: FirDeclaration) { private fun checkVariableSubDeclarationsAreResolved(declaration: FirDeclaration) {
@@ -81,10 +79,4 @@ internal abstract class LLFirLazyResolver(val resolverPhase: FirResolvePhase) {
checkIsResolved(parameter) checkIsResolved(parameter)
} }
} }
private fun checkScriptDependentDeclarationsAreResolved(declaration: FirDeclaration) {
if (declaration !is FirScript) return
declaration.forEachDependentDeclaration(::checkIsResolved)
}
} }
@@ -13,7 +13,6 @@ 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.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.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.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
@@ -189,8 +188,7 @@ private class LLFirStatusTargetResolver(
override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { override fun doLazyResolveUnderLock(target: FirElementWithResolveState) {
when (target) { when (target) {
is FirRegularClass -> error("should be resolved in doResolveWithoutLock") is FirRegularClass -> error("should be resolved in doResolveWithoutLock")
// It is fine to call status transformer under lock, because declarations can't have a containing class is FirScript -> {}
is FirScript -> target.forEachDependentDeclaration { it.transformSingle(transformer, data = null) }
else -> target.transformSingle(transformer, data = null) else -> target.transformSingle(transformer, data = null)
} }
} }
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReceiverTypeRef
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkTypeRefIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkTypeRefIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration
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
@@ -181,7 +180,6 @@ private class LLFirTypeTargetResolver(
private fun resolveScriptTypes(firScript: FirScript) { private fun resolveScriptTypes(firScript: FirScript) {
firScript.annotations.forEach { it.accept(transformer, null) } firScript.annotations.forEach { it.accept(transformer, null) }
firScript.contextReceivers.forEach { it.accept(transformer, null) } firScript.contextReceivers.forEach { it.accept(transformer, null) }
firScript.forEachDependentDeclaration { it.accept(transformer, null) }
} }
private fun resolveClassTypes(firClass: FirRegularClass) { private fun resolveClassTypes(firClass: FirRegularClass) {
@@ -5,13 +5,11 @@
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.util.forEachDependentDeclaration
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isLocalForLazyResolutionPurposes import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isLocalForLazyResolutionPurposes
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataKey import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataKey
import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataRegistry import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataRegistry
import org.jetbrains.kotlin.fir.declarations.FirScript
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
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
@@ -70,9 +68,6 @@ internal fun FirBasedSymbol<*>.cannotResolveAnnotationsOnDemand(): Boolean {
internal fun FirDeclaration.forEachDeclarationWhichCanHavePostponedSymbols(action: (FirCallableDeclaration) -> Unit) { internal fun FirDeclaration.forEachDeclarationWhichCanHavePostponedSymbols(action: (FirCallableDeclaration) -> Unit) {
when (this) { when (this) {
is FirCallableDeclaration -> action(this) is FirCallableDeclaration -> action(this)
is FirScript -> forEachDependentDeclaration {
it.forEachDeclarationWhichCanHavePostponedSymbols(action)
}
else -> {} else -> {}
} }
} }
@@ -241,10 +241,6 @@ internal val FirCallableSymbol<*>.isLocalForLazyResolutionPurposes: Boolean
else -> callableId.isLocal || fir.status.visibility == Visibilities.Local else -> callableId.isLocal || fir.status.visibility == Visibilities.Local
} }
internal inline fun FirScript.forEachDependentDeclaration(@Suppress("unused") action: (FirDeclaration) -> Unit) {
}
val PsiElement.parentsWithSelfCodeFragmentAware: Sequence<PsiElement> val PsiElement.parentsWithSelfCodeFragmentAware: Sequence<PsiElement>
get() = generateSequence(this) { element -> get() = generateSequence(this) { element ->
when (element) { when (element) {