From c9d335394d8a6523a95ec3dc9407e20f8bc2805c Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 18 Aug 2016 22:10:29 +0300 Subject: [PATCH] KT-13529 Java function is not always converted to Kotlin after paste #KT-13529 Fixed --- .../conversion/copy/ConvertJavaCopyPasteProcessor.kt | 5 ++++- .../copy/ConvertTextJavaCopyPasteProcessor.kt | 8 +++++--- .../plainTextConversion/KT13529.expected.kt | 9 +++++++++ .../copyPaste/plainTextConversion/KT13529.to.kt | 6 ++++++ .../copyPaste/plainTextConversion/KT13529.txt | 4 ++++ .../plainTextConversion/KT13529_1.expected.kt | 3 +++ .../copyPaste/plainTextConversion/KT13529_1.to.kt | 3 +++ .../copyPaste/plainTextConversion/KT13529_1.txt | 1 + ...JavaToKotlinCopyPasteConversionTestGenerated.java | 12 ++++++++++++ 9 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 idea/testData/copyPaste/plainTextConversion/KT13529.expected.kt create mode 100644 idea/testData/copyPaste/plainTextConversion/KT13529.to.kt create mode 100644 idea/testData/copyPaste/plainTextConversion/KT13529.txt create mode 100644 idea/testData/copyPaste/plainTextConversion/KT13529_1.expected.kt create mode 100644 idea/testData/copyPaste/plainTextConversion/KT13529_1.to.kt create mode 100644 idea/testData/copyPaste/plainTextConversion/KT13529_1.txt diff --git a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPasteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPasteProcessor.kt index 2567fe26e88..e94d117215c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPasteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPasteProcessor.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.j2k.AfterConversionPass import org.jetbrains.kotlin.j2k.ConverterSettings import org.jetbrains.kotlin.j2k.JavaToKotlinConverter import org.jetbrains.kotlin.j2k.ParseContext +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory @@ -247,7 +248,9 @@ internal fun isNoConversionPosition(file: KtFile, offset: Int): Boolean { if (token !is PsiWhiteSpace && token.endOffset != offset) return true // pasting into the middle of token for (element in token.parentsWithSelf) { - if (element is PsiComment) return true + if (element is PsiComment) { + return element.node.elementType == KtTokens.EOL_COMMENT || offset != element.endOffset + } if (element is KtStringTemplateEntryWithExpression) return false if (element is KtStringTemplateExpression) return true } diff --git a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt index 9d4e4a945ee..701f88e3773 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertTextJavaCopyPasteProcessor.kt @@ -31,7 +31,6 @@ import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiErrorElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiFileFactory -import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.LocalTimeCounter import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.idea.KotlinFileType @@ -39,6 +38,7 @@ import org.jetbrains.kotlin.idea.editor.KotlinEditorOptions import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.j2k.AfterConversionPass +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.KtClassBody import org.jetbrains.kotlin.psi.KtFile @@ -128,8 +128,10 @@ class ConvertTextJavaCopyPasteProcessor : CopyPastePostProcessor \ No newline at end of file diff --git a/idea/testData/copyPaste/plainTextConversion/KT13529.txt b/idea/testData/copyPaste/plainTextConversion/KT13529.txt new file mode 100644 index 00000000000..b39760f1511 --- /dev/null +++ b/idea/testData/copyPaste/plainTextConversion/KT13529.txt @@ -0,0 +1,4 @@ +public class BeatBox { + private static final String TAG = "BeatBox"; + private static final String SOUNDS_FOLDER = "sample_sounds"; +} \ No newline at end of file diff --git a/idea/testData/copyPaste/plainTextConversion/KT13529_1.expected.kt b/idea/testData/copyPaste/plainTextConversion/KT13529_1.expected.kt new file mode 100644 index 00000000000..334de42b719 --- /dev/null +++ b/idea/testData/copyPaste/plainTextConversion/KT13529_1.expected.kt @@ -0,0 +1,3 @@ +fun foo() { + bar(/*comment*/ArrayList()) +} diff --git a/idea/testData/copyPaste/plainTextConversion/KT13529_1.to.kt b/idea/testData/copyPaste/plainTextConversion/KT13529_1.to.kt new file mode 100644 index 00000000000..86886a8d875 --- /dev/null +++ b/idea/testData/copyPaste/plainTextConversion/KT13529_1.to.kt @@ -0,0 +1,3 @@ +fun foo() { + bar(/*comment*/) +} \ No newline at end of file diff --git a/idea/testData/copyPaste/plainTextConversion/KT13529_1.txt b/idea/testData/copyPaste/plainTextConversion/KT13529_1.txt new file mode 100644 index 00000000000..377d2c349c7 --- /dev/null +++ b/idea/testData/copyPaste/plainTextConversion/KT13529_1.txt @@ -0,0 +1 @@ +new ArrayList() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/TextJavaToKotlinCopyPasteConversionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/TextJavaToKotlinCopyPasteConversionTestGenerated.java index 642c80bf163..0806c5e32f1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/TextJavaToKotlinCopyPasteConversionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/TextJavaToKotlinCopyPasteConversionTestGenerated.java @@ -71,6 +71,18 @@ public class TextJavaToKotlinCopyPasteConversionTestGenerated extends AbstractTe doTest(fileName); } + @TestMetadata("KT13529.txt") + public void testKT13529() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/plainTextConversion/KT13529.txt"); + doTest(fileName); + } + + @TestMetadata("KT13529_1.txt") + public void testKT13529_1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/plainTextConversion/KT13529_1.txt"); + doTest(fileName); + } + @TestMetadata("MembersIntoClass.txt") public void testMembersIntoClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/plainTextConversion/MembersIntoClass.txt");