From a429367890b6e3f646c1f23e5038efe9421ef47b Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 10 May 2023 14:04:22 +0200 Subject: [PATCH] [LL FIR] unify annotation transformers ^KT-56550 --- ...irAnnotationArgumentMappingLazyResolver.kt | 12 +----- .../LLFirAnnotationArgumentsLazyResolver.kt | 41 ++++++++++++++----- .../LLFirCompilerAnnotationsLazyResolver.kt | 23 +++++++---- 3 files changed, 45 insertions(+), 31 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentMappingLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentMappingLazyResolver.kt index c07771ea15b..98885293953 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentMappingLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentMappingLazyResolver.kt @@ -72,16 +72,6 @@ private class LLFirAnnotationArgumentsMappingTargetResolver( override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { FirLazyBodiesCalculator.calculateAnnotations(target) - when (target) { - is FirRegularClass -> { - target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) - target.transformTypeParameters(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) - target.transformSuperTypeRefs(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) - } - is FirCallableDeclaration, is FirAnonymousInitializer, is FirDanglingModifierList, is FirFileAnnotationsContainer, is FirTypeAlias, is FirScript -> { - target.transformSingle(transformer, ResolutionMode.ContextIndependent) - } - else -> throwUnexpectedFirElementError(target) - } + transformer.transformAnnotations(target) } } 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 1ca4ef13374..d72387290dc 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 @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* 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.FirTowerDataContextCollector import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirAnnotationArgumentsResolveTransformer import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef @@ -83,16 +84,34 @@ private class LLFirAnnotationArgumentsTargetResolver( override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { FirLazyBodiesCalculator.calculateAnnotations(target) - when (target) { - is FirRegularClass -> { - target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) - target.transformTypeParameters(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) - target.transformSuperTypeRefs(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) - } - is FirCallableDeclaration, is FirAnonymousInitializer, is FirDanglingModifierList, is FirFileAnnotationsContainer, is FirTypeAlias, is FirScript -> { - target.transformSingle(transformer, ResolutionMode.ContextIndependent) - } - else -> throwUnexpectedFirElementError(target) - } + transformer.transformAnnotations(target) } } + +internal fun FirAbstractBodyResolveTransformerDispatcher.transformAnnotations(target: FirElementWithResolveState) { + when { + target is FirRegularClass -> { + target.transformAnnotations(declarationsTransformer, ResolutionMode.ContextIndependent) + target.transformTypeParameters(declarationsTransformer, ResolutionMode.ContextIndependent) + target.transformSuperTypeRefs(declarationsTransformer, ResolutionMode.ContextIndependent) + } + + target.isRegularDeclarationWithAnnotation -> { + target.transformSingle(this, ResolutionMode.ContextIndependent) + } + + else -> throwUnexpectedFirElementError(target) + } +} + +internal val FirElementWithResolveState.isRegularDeclarationWithAnnotation: Boolean + get() = when (this) { + is FirCallableDeclaration, + is FirAnonymousInitializer, + is FirDanglingModifierList, + is FirFileAnnotationsContainer, + is FirTypeAlias, + is FirScript, + -> true + else -> false + } \ No newline at end of file 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 107cb898851..bfc64db7743 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 @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDesignationWithFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveTarget import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarget +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError 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.LLFirPhaseUpdater @@ -15,11 +16,7 @@ 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.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.declarations.FirTypeAlias -import org.jetbrains.kotlin.fir.declarations.resolvePhase +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector import org.jetbrains.kotlin.fir.resolve.transformers.plugin.CompilerRequiredAnnotationsComputationSession @@ -97,11 +94,13 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( override fun doLazyResolveUnderLock(target: FirElementWithResolveState) { FirLazyBodiesCalculator.calculateCompilerAnnotations(target) - when (target) { - is FirTypeAlias -> { + + when { + target is FirTypeAlias -> { transformer.transformTypeAlias(target, null) } - is FirRegularClass -> { + + target is FirRegularClass -> { transformer.annotationTransformer.resolveRegularClass( target, transformChildren = { @@ -112,6 +111,12 @@ private class LLFirCompilerRequiredAnnotationsTargetResolver( } ) } + + target.isRegularDeclarationWithAnnotation -> { + + } + + else -> throwUnexpectedFirElementError(target) } } -} \ No newline at end of file +}