[LL FIR] unify annotation transformers

^KT-56550
This commit is contained in:
Dmitrii Gridin
2023-05-10 14:04:22 +02:00
committed by Space Team
parent 5ebba92a6e
commit a429367890
3 changed files with 45 additions and 31 deletions
@@ -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)
}
}
@@ -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
}
@@ -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)
}
}
}
}