diff --git a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/DataForConversion.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/DataForConversion.kt
index f3070f0131f..98236030562 100644
--- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/DataForConversion.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/DataForConversion.kt
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.TextRange
import com.intellij.psi.*
import org.jetbrains.kotlin.name.FqNameUnsafe
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
+import org.jetbrains.kotlin.psi.psiUtil.allChildren
import org.jetbrains.kotlin.psi.psiUtil.elementsInRange
import org.jetbrains.kotlin.psi.psiUtil.parents
import org.jetbrains.kotlin.psi.psiUtil.siblings
@@ -217,11 +218,16 @@ data class DataForConversion private(
}
else {
add(fileText.substring(range.start, elements.first().range.start))
- addAll(elements)
+ elements.flatMapTo(this) {
+ if (shouldExpandToChildren(it)) it.allChildren.toList() else listOf(it)
+ }
add(fileText.substring(elements.last().range.end, range.end))
}
}
+ // converting of PsiModifierList is not supported by converter, but converting of single annotations inside it is supported
+ private fun shouldExpandToChildren(element: PsiElement) = element is PsiModifierList
+
private fun buildImportsAndPackage(sourceFile: PsiJavaFile): String {
return StringBuilder {
val packageName = sourceFile.getPackageName()
diff --git a/idea/testData/copyPaste/conversion/CopyAnnotation.expected.kt b/idea/testData/copyPaste/conversion/CopyAnnotation.expected.kt
new file mode 100644
index 00000000000..c570051a471
--- /dev/null
+++ b/idea/testData/copyPaste/conversion/CopyAnnotation.expected.kt
@@ -0,0 +1,2 @@
+Ann(String::class)
+class X
\ No newline at end of file
diff --git a/idea/testData/copyPaste/conversion/CopyAnnotation.java b/idea/testData/copyPaste/conversion/CopyAnnotation.java
new file mode 100644
index 00000000000..703e61bd92c
--- /dev/null
+++ b/idea/testData/copyPaste/conversion/CopyAnnotation.java
@@ -0,0 +1,7 @@
+@interface Ann {
+ Class value();
+}
+
+@Ann(String.class)
+class C {
+}
\ No newline at end of file
diff --git a/idea/testData/copyPaste/conversion/CopyAnnotation.to.kt b/idea/testData/copyPaste/conversion/CopyAnnotation.to.kt
new file mode 100644
index 00000000000..7de642d202d
--- /dev/null
+++ b/idea/testData/copyPaste/conversion/CopyAnnotation.to.kt
@@ -0,0 +1 @@
+class X
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java
index 78ed2d9f22a..e70b7c18aaf 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java
@@ -95,6 +95,12 @@ public class JavaToKotlinCopyPasteConversionTestGenerated extends AbstractJavaTo
doTest(fileName);
}
+ @TestMetadata("CopyAnnotation.java")
+ public void testCopyAnnotation() throws Exception {
+ String fileName = JetTestUtils.navigationMetadata("idea/testData/copyPaste/conversion/CopyAnnotation.java");
+ doTest(fileName);
+ }
+
@TestMetadata("FieldWithNoEndComment.java")
public void testFieldWithNoEndComment() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/copyPaste/conversion/FieldWithNoEndComment.java");