diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KtPrimaryConstructor.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/KtPrimaryConstructor.kt index de02d8092da..459f608b11c 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KtPrimaryConstructor.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KtPrimaryConstructor.kt @@ -62,9 +62,8 @@ class KtPrimaryConstructor : KtConstructor { return if (modifierList != null) { modifierList.addBefore(annotationEntry, modifierList.firstChild) as KtAnnotationEntry } else { - val parameterList = valueParameterList!! val newModifierList = KtPsiFactory(project).createModifierList(annotationEntry.text) - (addBefore(newModifierList, parameterList) as KtModifierList).annotationEntries.first() + (addBefore(newModifierList, getOrCreateConstructorKeyword()) as KtModifierList).annotationEntries.first() } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationFix.kt index e50c4b9e879..5fec160e630 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddAnnotationFix.kt @@ -7,10 +7,11 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.idea.util.addAnnotation +import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtPsiFactory open class AddAnnotationFix( element: KtDeclaration, @@ -26,6 +27,13 @@ open class AddAnnotationFix( override fun getFamilyName(): String = "Add annotation" override fun invoke(project: Project, editor: Editor?, file: KtFile) { - element?.addAnnotation(annotationFqName, annotationInnerText = argumentClassFqName?.let { "$it::class" }) + val factory = KtPsiFactory(project) + val annotationInnerText = argumentClassFqName?.let { "$it::class" } + val annotationText = when (annotationInnerText) { + null -> "@${annotationFqName.asString()}" + else -> "@${annotationFqName.asString()}($annotationInnerText)" + } + val addedAnnotation = element?.addAnnotationEntry(factory.createAnnotationEntry(annotationText)) + addedAnnotation?.let { ShortenReferences.DEFAULT.process(it) } } } \ No newline at end of file diff --git a/idea/testData/quickfix/experimental/propertyInConstructor.kt b/idea/testData/quickfix/experimental/propertyInConstructor.kt new file mode 100644 index 00000000000..e1ebe4deb31 --- /dev/null +++ b/idea/testData/quickfix/experimental/propertyInConstructor.kt @@ -0,0 +1,12 @@ +// "Add '@PropertyTypeMarker' annotation to 'PropertyTypeContainer'" "true" +// COMPILER_ARGUMENTS: -Xuse-experimental=kotlin.Experimental +// WITH_RUNTIME +// ACTION: Add '@PropertyTypeMarker' annotation to containing class 'PropertyTypeContainer' + +@Experimental +annotation class PropertyTypeMarker + +@PropertyTypeMarker +class PropertyTypeMarked + +class PropertyTypeContainer(val subject: PropertyTypeMarked) \ No newline at end of file diff --git a/idea/testData/quickfix/experimental/propertyInConstructor.kt.after b/idea/testData/quickfix/experimental/propertyInConstructor.kt.after new file mode 100644 index 00000000000..0737c4c2fbb --- /dev/null +++ b/idea/testData/quickfix/experimental/propertyInConstructor.kt.after @@ -0,0 +1,12 @@ +// "Add '@PropertyTypeMarker' annotation to 'PropertyTypeContainer'" "true" +// COMPILER_ARGUMENTS: -Xuse-experimental=kotlin.Experimental +// WITH_RUNTIME +// ACTION: Add '@PropertyTypeMarker' annotation to containing class 'PropertyTypeContainer' + +@Experimental +annotation class PropertyTypeMarker + +@PropertyTypeMarker +class PropertyTypeMarked + +class PropertyTypeContainer @PropertyTypeMarker constructor(val subject: PropertyTypeMarked) \ 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 fc9d5b25141..da91aa6b372 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6234,6 +6234,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { runTest("idea/testData/quickfix/experimental/override.kt"); } + @TestMetadata("propertyInConstructor.kt") + public void testPropertyInConstructor() throws Exception { + runTest("idea/testData/quickfix/experimental/propertyInConstructor.kt"); + } + @TestMetadata("switchOn.kt") public void testSwitchOn() throws Exception { runTest("idea/testData/quickfix/experimental/switchOn.kt");