From f687a4013611a085fd1573a01632b6a6623dd93a Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 27 May 2015 19:42:18 +0300 Subject: [PATCH] Conversion to Kotlin on paste: supported for annotation --- .../kotlin/idea/conversion/copy/DataForConversion.kt | 8 +++++++- .../copyPaste/conversion/CopyAnnotation.expected.kt | 2 ++ idea/testData/copyPaste/conversion/CopyAnnotation.java | 7 +++++++ idea/testData/copyPaste/conversion/CopyAnnotation.to.kt | 1 + .../JavaToKotlinCopyPasteConversionTestGenerated.java | 6 ++++++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 idea/testData/copyPaste/conversion/CopyAnnotation.expected.kt create mode 100644 idea/testData/copyPaste/conversion/CopyAnnotation.java create mode 100644 idea/testData/copyPaste/conversion/CopyAnnotation.to.kt 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");