diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt index 70cc9dcd9ff..c44f3f9a603 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationTargetFix.kt @@ -85,7 +85,9 @@ private fun KtAnnotationEntry.getRequiredAnnotationTargets(annotationClass: KtCl } private fun KtAnnotationEntry.getActualTargetList(): List { - val annotatedElement = getStrictParentOfType()?.owner as? KtElement ?: return emptyList() + val annotatedElement = getStrictParentOfType()?.owner as? KtElement + ?: getStrictParentOfType()?.baseExpression + ?: return emptyList() return AnnotationChecker.getDeclarationSiteActualTargetList(annotatedElement, null, BindingTraceContext()) } @@ -101,8 +103,7 @@ private fun KtClass.addAnnotationTargets(annotationTargets: List, if (valueArgumentList == null) { val text = annotationTargets.toArgumentListString() targetAnnotationEntry.add(psiFactory.createCallArguments(text)) - } - else { + } else { val arguments = targetAnnotationEntry.valueArguments.mapNotNull { it.getArgumentExpression()?.text } for (target in annotationTargets) { val text = target.asNameString() @@ -111,8 +112,6 @@ private fun KtClass.addAnnotationTargets(annotationTargets: List, } } -private fun List.toArgumentListString() = - joinToString(separator = ", ", prefix = "(", postfix = ")") { it.asNameString() } +private fun List.toArgumentListString() = joinToString(separator = ", ", prefix = "(", postfix = ")") { it.asNameString() } -private fun KotlinTarget.asNameString() = - "${KotlinBuiltIns.FQ_NAMES.annotationTarget.shortName().asString()}.$name" +private fun KotlinTarget.asNameString() = "${KotlinBuiltIns.FQ_NAMES.annotationTarget.shortName().asString()}.$name" diff --git a/idea/testData/quickfix/addAnnotationTarget/expression.kt b/idea/testData/quickfix/addAnnotationTarget/expression.kt new file mode 100644 index 00000000000..2e359226df1 --- /dev/null +++ b/idea/testData/quickfix/addAnnotationTarget/expression.kt @@ -0,0 +1,7 @@ +// "Add annotation target" "true" +annotation class Foo + +fun test() { + var v = 0 + @Foo v++ +} \ No newline at end of file diff --git a/idea/testData/quickfix/addAnnotationTarget/expression.kt.after b/idea/testData/quickfix/addAnnotationTarget/expression.kt.after new file mode 100644 index 00000000000..fe97eef27a4 --- /dev/null +++ b/idea/testData/quickfix/addAnnotationTarget/expression.kt.after @@ -0,0 +1,8 @@ +// "Add annotation target" "true" +@Target(AnnotationTarget.EXPRESSION) +annotation class Foo + +fun test() { + var v = 0 + @Foo v++ +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 90bbb46bdfc..95eecd98fcb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -258,6 +258,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("expression.kt") + public void testExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addAnnotationTarget/expression.kt"); + doTest(fileName); + } + @TestMetadata("fromLib.kt") public void testFromLib() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/addAnnotationTarget/fromLib.kt");