diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt index 4fc6abe7005..245f7d05319 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt @@ -148,13 +148,16 @@ private fun KtAnnotationEntry.getActualTargetList(): List { private fun KtClass.addAnnotationTargets(annotationTargets: List, psiFactory: KtPsiFactory) { val retentionAnnotationName = KotlinBuiltIns.FQ_NAMES.retention.shortName().asString() - if (annotationTargets.any { it == KotlinTarget.EXPRESSION } - && annotationEntries.none { it.typeReference?.text == retentionAnnotationName }) { - addAnnotationEntry( - psiFactory.createAnnotationEntry( - "@$retentionAnnotationName(${KotlinBuiltIns.FQ_NAMES.annotationRetention.shortName()}.${AnnotationRetention.SOURCE.name})" - ) + if (annotationTargets.any { it == KotlinTarget.EXPRESSION }) { + val retentionEntry = annotationEntries.firstOrNull { it.typeReference?.text == retentionAnnotationName } + val newRetentionEntry = psiFactory.createAnnotationEntry( + "@$retentionAnnotationName(${KotlinBuiltIns.FQ_NAMES.annotationRetention.shortName()}.${AnnotationRetention.SOURCE.name})" ) + if (retentionEntry == null) { + addAnnotationEntry(newRetentionEntry) + } else { + retentionEntry.replace(newRetentionEntry) + } } val targetAnnotationName = KotlinBuiltIns.FQ_NAMES.target.shortName().asString() diff --git a/idea/testData/quickfix/addAnnotationTarget/expression3.kt.after b/idea/testData/quickfix/addAnnotationTarget/expression3.kt.after index 3f709ace784..8060c88cff4 100644 --- a/idea/testData/quickfix/addAnnotationTarget/expression3.kt.after +++ b/idea/testData/quickfix/addAnnotationTarget/expression3.kt.after @@ -1,6 +1,6 @@ // "Add annotation target" "true" @Target(AnnotationTarget.EXPRESSION) -@Retention +@Retention(AnnotationRetention.SOURCE) annotation class Foo fun test() {