AddAnnotationTargetTest: replace retention annotation if needed

This fixes testExpression3 from this test group
This commit is contained in:
Mikhail Glukhikh
2018-09-12 17:21:20 +03:00
parent 2bba4f5aa8
commit 39d28f1c92
2 changed files with 10 additions and 7 deletions
@@ -148,13 +148,16 @@ private fun KtAnnotationEntry.getActualTargetList(): List<KotlinTarget> {
private fun KtClass.addAnnotationTargets(annotationTargets: List<KotlinTarget>, psiFactory: KtPsiFactory) { private fun KtClass.addAnnotationTargets(annotationTargets: List<KotlinTarget>, psiFactory: KtPsiFactory) {
val retentionAnnotationName = KotlinBuiltIns.FQ_NAMES.retention.shortName().asString() val retentionAnnotationName = KotlinBuiltIns.FQ_NAMES.retention.shortName().asString()
if (annotationTargets.any { it == KotlinTarget.EXPRESSION } if (annotationTargets.any { it == KotlinTarget.EXPRESSION }) {
&& annotationEntries.none { it.typeReference?.text == retentionAnnotationName }) { val retentionEntry = annotationEntries.firstOrNull { it.typeReference?.text == retentionAnnotationName }
addAnnotationEntry( val newRetentionEntry = psiFactory.createAnnotationEntry(
psiFactory.createAnnotationEntry( "@$retentionAnnotationName(${KotlinBuiltIns.FQ_NAMES.annotationRetention.shortName()}.${AnnotationRetention.SOURCE.name})"
"@$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() val targetAnnotationName = KotlinBuiltIns.FQ_NAMES.target.shortName().asString()
@@ -1,6 +1,6 @@
// "Add annotation target" "true" // "Add annotation target" "true"
@Target(AnnotationTarget.EXPRESSION) @Target(AnnotationTarget.EXPRESSION)
@Retention @Retention(AnnotationRetention.SOURCE)
annotation class Foo annotation class Foo
fun test() { fun test() {