diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt index be3a44214c6..3b32e31e140 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/AbstractFirSpecificAnnotationResolveTransformer.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.StandardClassIds.Annotations import org.jetbrains.kotlin.name.StandardClassIds.Annotations.Deprecated import org.jetbrains.kotlin.name.StandardClassIds.Annotations.DeprecatedSinceKotlin import org.jetbrains.kotlin.name.StandardClassIds.Annotations.JvmRecord @@ -49,7 +50,19 @@ internal abstract class AbstractFirSpecificAnnotationResolveTransformer( containingDeclarations: List = emptyList() ) : FirDefaultTransformer() { companion object { - private val REQUIRED_ANNOTATIONS: Set = setOf(Deprecated, DeprecatedSinceKotlin, WasExperimental, JvmRecord) + private val REQUIRED_ANNOTATIONS_WITH_ARGUMENTS: Set = setOf( + Deprecated, + Annotations.Retention, + Annotations.Target, + ) + + private val REQUIRED_ANNOTATIONS: Set = REQUIRED_ANNOTATIONS_WITH_ARGUMENTS + setOf( + DeprecatedSinceKotlin, + WasExperimental, + JvmRecord, + Annotations.Repeatable, + Annotations.Java.Repeatable, + ) private val REQUIRED_ANNOTATION_NAMES: Set = REQUIRED_ANNOTATIONS.mapTo(mutableSetOf()) { it.shortClassName } } @@ -104,9 +117,10 @@ internal abstract class AbstractFirSpecificAnnotationResolveTransformer( annotationCall.replaceAnnotationTypeRef(transformedAnnotationType) annotationCall.replaceAnnotationResolvePhase(FirAnnotationResolvePhase.CompilerRequiredAnnotations) // TODO: what if we have type alias here? - if (transformedAnnotationType.coneTypeSafe()?.lookupTag?.classId == Deprecated) { + if (transformedAnnotationType.coneTypeSafe()?.lookupTag?.classId in REQUIRED_ANNOTATIONS_WITH_ARGUMENTS) { argumentsTransformer.transformAnnotation(annotationCall, ResolutionMode.ContextDependent) } + return annotationCall }