From a520e93b5bb0f8c9a3c35bdb73be387ed8008b69 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 15 Dec 2015 15:13:05 +0300 Subject: [PATCH] J2K: don't automatically convert Java code when pasting to a string literal in Kotlin #KT-7759 Fixed --- .../copy/ConvertJavaCopyPastePostProcessor.kt | 11 +++++++++-- .../copyPaste/conversion/InsertIntoString.expected.kt | 3 +++ .../copyPaste/conversion/InsertIntoString.java | 7 +++++++ .../copyPaste/conversion/InsertIntoString.to.kt | 3 +++ .../JavaToKotlinCopyPasteConversionTestGenerated.java | 6 ++++++ 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 idea/testData/copyPaste/conversion/InsertIntoString.expected.kt create mode 100644 idea/testData/copyPaste/conversion/InsertIntoString.java create mode 100644 idea/testData/copyPaste/conversion/InsertIntoString.to.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt index 18fd9d9434b..ba384eba174 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt @@ -29,6 +29,7 @@ import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiJavaFile +import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.codeInsight.KotlinCopyPasteReferenceProcessor @@ -43,8 +44,9 @@ import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.j2k.JavaToKotlinConverter import org.jetbrains.kotlin.j2k.ParseContext import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.psi.psiUtil.parents +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.awt.datatransfer.Transferable import java.util.* @@ -80,6 +82,11 @@ public class ConvertJavaCopyPastePostProcessor : CopyPastePostProcessor, val explicitImports: Set) fun doConversion(): Result { diff --git a/idea/testData/copyPaste/conversion/InsertIntoString.expected.kt b/idea/testData/copyPaste/conversion/InsertIntoString.expected.kt new file mode 100644 index 00000000000..e9b353c9760 --- /dev/null +++ b/idea/testData/copyPaste/conversion/InsertIntoString.expected.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + println("String s = 1;") +} \ No newline at end of file diff --git a/idea/testData/copyPaste/conversion/InsertIntoString.java b/idea/testData/copyPaste/conversion/InsertIntoString.java new file mode 100644 index 00000000000..b0801bafe94 --- /dev/null +++ b/idea/testData/copyPaste/conversion/InsertIntoString.java @@ -0,0 +1,7 @@ +class A { + public static void main(String[] args) { + String s = 1; + } +} + +// NO_CONVERSION_EXPECTED \ No newline at end of file diff --git a/idea/testData/copyPaste/conversion/InsertIntoString.to.kt b/idea/testData/copyPaste/conversion/InsertIntoString.to.kt new file mode 100644 index 00000000000..dfbaee899c3 --- /dev/null +++ b/idea/testData/copyPaste/conversion/InsertIntoString.to.kt @@ -0,0 +1,3 @@ +fun main(args: Array) { + println("") +} \ 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 5e8c5727577..2c4c038f542 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java @@ -173,6 +173,12 @@ public class JavaToKotlinCopyPasteConversionTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("InsertIntoString.java") + public void testInsertIntoString() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/conversion/InsertIntoString.java"); + doTest(fileName); + } + @TestMetadata("MethodDeclarationWithNoBody.java") public void testMethodDeclarationWithNoBody() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/conversion/MethodDeclarationWithNoBody.java");