From 46ff4f2bbf880408a84ab7b9158297d782d5c9ee Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Wed, 18 Apr 2018 20:46:24 +0300 Subject: [PATCH] 182: KotlinElementActionsFactory: "value"-parameters in generated java-annotations is putted without explicit parameter name #KT-23644 --- .../KotlinElementActionsFactory.kt.182 | 13 ++++-- .../CommonIntentionActionsTest.kt.182 | 44 +++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 index ca74d53ccb3..ad893eacc1d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/crossLanguage/KotlinElementActionsFactory.kt.182 @@ -436,13 +436,20 @@ class KotlinElementActionsFactory : JvmElementActionsFactory() { override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { val target = pointer.element ?: return + val kotlinAnnotation = JavaPsiFacade.getInstance(project).findClass( + request.qualifiedName, + target.resolveScope + )?.language == KotlinLanguage.INSTANCE val entry = target.addAnnotationEntry( KtPsiFactory(target) .createAnnotationEntry( "@${request.qualifiedName}${ - request.attributes.joinToString(", ", "(", ")") { p -> - "${p.name} = ${renderAttributeValue(p.value)}" - } + request.attributes.mapIndexed { i, p -> + if (!kotlinAnnotation && i == 0 && p.name == "value") + renderAttributeValue(p.value).toString() + else + "${p.name} = ${renderAttributeValue(p.value)}" + }.joinToString(", ", "(", ")") }" ) ) diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.182 b/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.182 index bb6bd1c8bfe..8a9d0e1ac80 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.182 +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/CommonIntentionActionsTest.kt.182 @@ -204,6 +204,50 @@ class CommonIntentionActionsTest : LightPlatformCodeInsightFixtureTestCase() { ) } + fun testAddJavaAnnotationValue() { + + myFixture.addFileToProject( + "pkg/myannotation/JavaAnnotation.java", """ + package pkg.myannotation + + public @interface JavaAnnotation { + String value(); + int param() default 0; + } + """.trimIndent() + ) + + myFixture.configureByText( + "foo.kt", """class Foo { + | fun bar(){} + | fun baz(){} + |}""".trim().trimMargin() + ) + + myFixture.launchAction( + createAddAnnotationActions( + myFixture.findElementByText("bar", KtModifierListOwner::class.java).toLightElements().single() as PsiMethod, + annotationRequest("pkg.myannotation.JavaAnnotation", stringAttribute("value", "foo"), intAttribute("param", 2)) + ).single() + ) + myFixture.launchAction( + createAddAnnotationActions( + myFixture.findElementByText("baz", KtModifierListOwner::class.java).toLightElements().single() as PsiMethod, + annotationRequest("pkg.myannotation.JavaAnnotation", intAttribute("param", 2), stringAttribute("value", "foo")) + ).single() + ) + myFixture.checkResult( + """import pkg.myannotation.JavaAnnotation + | + |class Foo { + | @JavaAnnotation("foo", param = 2) + | fun bar(){} + | @JavaAnnotation(param = 2, value = "foo") + | fun baz(){} + |}""".trim().trimMargin(), true + ) + } + fun testDontMakePublicPublic() { myFixture.configureByText( "foo.kt", """class Foo {