From 32e3b674168cf5767dd6fe318363093d1716f816 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Sun, 30 Jul 2023 00:46:09 +0200 Subject: [PATCH] [LL FIR] LLFirTargetResolver: add default implementation to withFile and withRegularClassImpl To drop redundant implementations in resolvers ^KT-60728 --- .../LLFirAnnotationArgumentsLazyResolver.kt | 45 ++++++++++--------- .../LLFirCompilerAnnotationsLazyResolver.kt | 8 +--- .../LLFirExpectActualMatcherLazyResolver.kt | 10 ----- ...FirGeneratedCompanionObjectLazyResolver.kt | 12 +---- .../LLFirSealedClassInheritorsLazyResolver.kt | 14 +----- .../transformers/LLFirStatusLazyResolver.kt | 4 -- .../LLFirSupertypeLazyResolver.kt | 4 -- .../fir/transformers/LLFirTargetResolver.kt | 8 +++- .../fir/transformers/LLFirTypeLazyResolver.kt | 4 +- 9 files changed, 36 insertions(+), 73 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt index b966460e505..62138a8fe88 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt @@ -54,36 +54,41 @@ private class LLFirAnnotationArgumentsTargetResolver( firResolveContextCollector = firResolveContextCollector, ) - override fun withScript(firScript: FirScript, action: () -> Unit) { - super.withScript(firScript) { - transformer.firResolveContextCollector?.let { collector -> - collector.addDeclarationContext(firScript, transformer.context) - } - + private inline fun actionWithContextCollector( + noinline action: () -> Unit, + crossinline collect: (FirResolveContextCollector, BodyResolveContext) -> Unit, + ): () -> Unit { + val collector = transformer.firResolveContextCollector ?: return action + return { + collect(collector, transformer.context) action() } } - override fun withFile(firFile: FirFile, action: () -> Unit) { - super.withFile(firFile) { - transformer.firResolveContextCollector?.let { collector -> - collector.addFileContext(firFile, transformer.context.towerDataContext) - } - - action() + override fun withScript(firScript: FirScript, action: () -> Unit) { + val actionWithCollector = actionWithContextCollector(action) { collector, context -> + collector.addDeclarationContext(firScript, context) } + + super.withScript(firScript, actionWithCollector) + } + + override fun withFile(firFile: FirFile, action: () -> Unit) { + val actionWithCollector = actionWithContextCollector(action) { collector, context -> + collector.addFileContext(firFile, context.towerDataContext) + } + + super.withFile(firFile, actionWithCollector) } @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { - @Suppress("DEPRECATION_ERROR") - super.withRegularClassImpl(firClass) { - transformer.firResolveContextCollector?.let { collector -> - collector.addDeclarationContext(firClass, transformer.context) - } - - action() + val actionWithCollector = actionWithContextCollector(action) { collector, context -> + collector.addDeclarationContext(firClass, context) } + + @Suppress("DEPRECATION_ERROR") + super.withRegularClassImpl(firClass, actionWithCollector) } override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt index 51f9cdeb134..edec9750dd4 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirCompilerAnnotationsLazyResolver.kt @@ -91,16 +91,12 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( get() = transformer.annotationTransformer.computationSession as LLFirCompilerRequiredAnnotationsComputationSession override fun withFile(firFile: FirFile, action: () -> Unit) { - transformer.annotationTransformer.withFileAndFileScopes(firFile) { - action() - } + transformer.annotationTransformer.withFileAndFileScopes(firFile, action) } @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { - transformer.annotationTransformer.withRegularClass(firClass) { - action() - } + transformer.annotationTransformer.withRegularClass(firClass, action) } override fun doResolveWithoutLock(target: FirElementWithResolveState): Boolean { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirExpectActualMatcherLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirExpectActualMatcherLazyResolver.kt index a45ed2835e9..438d2353595 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirExpectActualMatcherLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirExpectActualMatcherLazyResolver.kt @@ -47,21 +47,11 @@ private class LLFirExpectActualMatchingTargetResolver( } } - override fun withFile(firFile: FirFile, action: () -> Unit) { - action() - } - - @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) - override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { - action() - } - override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { if (target !is FirMemberDeclaration) return if (!target.canHaveExpectCounterPart()) return transformer.transformMemberDeclaration(target) } - } private fun FirMemberDeclaration.canHaveExpectCounterPart(): Boolean = when (this) { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirGeneratedCompanionObjectLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirGeneratedCompanionObjectLazyResolver.kt index 27abced46f0..42d7aca2cb0 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirGeneratedCompanionObjectLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirGeneratedCompanionObjectLazyResolver.kt @@ -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.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.resolve.ScopeSession @@ -36,17 +35,8 @@ private class LLFirCompanionGenerationTargetResolver( ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.COMPANION_GENERATION) { private val transformer: FirCompanionGenerationTransformer = FirCompanionGenerationTransformer(session) - override fun withFile(firFile: FirFile, action: () -> Unit) { - action() - } - - @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) - override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { - action() - } - override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { if (target !is FirRegularClass) return transformer.generateAndUpdateCompanion(target) } -} \ No newline at end of file +} diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSealedClassInheritorsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSealedClassInheritorsLazyResolver.kt index 5d9fc08539b..e1ece667e03 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSealedClassInheritorsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSealedClassInheritorsLazyResolver.kt @@ -9,8 +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.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirFile -import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirResolveContextCollector @@ -33,17 +31,7 @@ private class LLFirSealedClassInheritorsDesignatedResolver( target: LLFirResolveTarget, lockProvider: LLFirLockProvider, ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.SEALED_CLASS_INHERITORS) { - - override fun withFile(firFile: FirFile, action: () -> Unit) { - action() - } - - @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) - override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { - action() - } - override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { // just update the phase } -} \ No newline at end of file +} diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt index 7d3d3ba5714..3287ca461a5 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirStatusLazyResolver.kt @@ -91,10 +91,6 @@ private class LLFirStatusTargetResolver( ) : LLFirTargetResolver(target, lockProvider, FirResolvePhase.STATUS, isJumpingPhase = false) { private val transformer = Transformer(session, scopeSession) - override fun withFile(firFile: FirFile, action: () -> Unit) { - action() - } - @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { doResolveWithoutLock(firClass) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSupertypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSupertypeLazyResolver.kt index 5bde95cdd5a..850a89633a1 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSupertypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirSupertypeLazyResolver.kt @@ -87,10 +87,6 @@ private class LLFirSuperTypeTargetResolver( } } - override fun withFile(firFile: FirFile, action: () -> Unit) { - action() - } - @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) override fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { supertypeResolver.withClass(firClass) { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt index 890262f6180..36083de2f66 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTargetResolver.kt @@ -28,14 +28,18 @@ internal abstract class LLFirTargetResolver( val nestedClassesStack: List get() = _nestedClassesStack.toList() - protected abstract fun withFile(firFile: FirFile, action: () -> Unit) + protected open fun withFile(firFile: FirFile, action: () -> Unit) { + action() + } protected open fun withScript(firScript: FirScript, action: () -> Unit) { action() } @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR) - protected abstract fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) + protected open fun withRegularClassImpl(firClass: FirRegularClass, action: () -> Unit) { + action() + } @Suppress("DEPRECATION_ERROR") protected fun withRegularClass(firClass: FirRegularClass, action: () -> Unit) { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt index 377cd2942ea..002fcef97be 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt @@ -81,9 +81,7 @@ private class LLFirTypeTargetResolver( } override fun withFile(firFile: FirFile, action: () -> Unit) { - transformer.withFileScope(firFile) { - action() - } + transformer.withFileScope(firFile, action) } @Deprecated("Should never be called directly, only for override purposes, please use withRegularClass", level = DeprecationLevel.ERROR)