From 2227452e7a2b6c4fe2c5ec34124056bbd01ebeaa Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 2 Apr 2015 20:59:19 +0300 Subject: [PATCH] KT-5203 Do not offer to convert from java on paste if conversion is trivial #KT-5203 Fixed --- .../copy/ConvertJavaCopyPastePostProcessor.kt | 82 ++++++++++++------- .../conversion/Arithmetic.expected.kt | 2 +- .../copyPaste/conversion/Arithmetic.to.kt | 2 +- ...ethodReferenceWithoutQualifier.expected.kt | 5 +- .../conversion/OnlyClosingBrace.expected.kt | 2 +- .../conversion/OnlyQualifier.expected.kt | 5 +- .../SingleWordFromIdentifier.expected.kt | 2 +- ...ctJavaToKotlinCopyPasteConversionTest.java | 24 +++++- 8 files changed, 83 insertions(+), 41 deletions(-) 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 cec9fe89035..a93c62640d0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/conversion/copy/ConvertJavaCopyPastePostProcessor.kt @@ -66,40 +66,54 @@ public class ConvertJavaCopyPastePostProcessor : CopyPastePostProcessor() for (i in code.startOffsets.indices) { list.collectElementsToConvert(sourceFile, sourceFileText, TextRange(code.startOffsets[i], code.endOffsets[i])) } + if (list.all { it is String }) return null // nothing to convert + val converter = JavaToKotlinConverter( sourceFile.getProject(), ConverterSettings.defaultSettings, @@ -110,24 +124,31 @@ public class ConvertJavaCopyPastePostProcessor : CopyPastePostProcessor().map { it to J2kPostProcessor(targetFile, formatCode = false) }) var resultIndex = 0 - val text = StringBuilder { - for (o in list) { - if (o is PsiElement) { - val result = results[resultIndex++] - if (!result.isEmpty()) { - append(result) - } - else { // failed to convert element to Kotlin, insert "as is" - append(o.getText()) - } + val convertedCodeBuilder = StringBuilder() + val originalCodeBuilder = StringBuilder() + for (o in list) { + if (o is PsiElement) { + val originalText = o.getText() + val result = results[resultIndex++] + if (!result.isEmpty()) { + convertedCodeBuilder.append(result) } - else { - append(o as String) + else { // failed to convert element to Kotlin, insert "as is" + convertedCodeBuilder.append(originalText) } + originalCodeBuilder.append(originalText) } - }.toString() + else { + convertedCodeBuilder.append(o as String) + originalCodeBuilder.append(o) + } + } - return StringUtil.convertLineSeparators(text) + val convertedCode = convertedCodeBuilder.toString() + val originalCode = originalCodeBuilder.toString() + if (convertedCode == originalCode) return null + + return convertedCode } // builds list consisting of PsiElement's to convert and plain String's @@ -178,4 +199,9 @@ public class ConvertJavaCopyPastePostProcessor : CopyPastePostProcessor \ No newline at end of file +val v = \ No newline at end of file diff --git a/idea/testData/copyPaste/conversion/MethodReferenceWithoutQualifier.expected.kt b/idea/testData/copyPaste/conversion/MethodReferenceWithoutQualifier.expected.kt index 636a2ba7a5d..00397435237 100644 --- a/idea/testData/copyPaste/conversion/MethodReferenceWithoutQualifier.expected.kt +++ b/idea/testData/copyPaste/conversion/MethodReferenceWithoutQualifier.expected.kt @@ -1,4 +1 @@ -fun main(args: Array) { - reference(arg) - somethingElse() -} \ No newline at end of file +No conversion performed \ No newline at end of file diff --git a/idea/testData/copyPaste/conversion/OnlyClosingBrace.expected.kt b/idea/testData/copyPaste/conversion/OnlyClosingBrace.expected.kt index ff30235f076..00397435237 100644 --- a/idea/testData/copyPaste/conversion/OnlyClosingBrace.expected.kt +++ b/idea/testData/copyPaste/conversion/OnlyClosingBrace.expected.kt @@ -1 +1 @@ -} \ No newline at end of file +No conversion performed \ No newline at end of file diff --git a/idea/testData/copyPaste/conversion/OnlyQualifier.expected.kt b/idea/testData/copyPaste/conversion/OnlyQualifier.expected.kt index 0c1766e04c4..00397435237 100644 --- a/idea/testData/copyPaste/conversion/OnlyQualifier.expected.kt +++ b/idea/testData/copyPaste/conversion/OnlyQualifier.expected.kt @@ -1,4 +1 @@ -fun main(args: Array) { - qualifier - somethingElse() -} \ No newline at end of file +No conversion performed \ No newline at end of file diff --git a/idea/testData/copyPaste/conversion/SingleWordFromIdentifier.expected.kt b/idea/testData/copyPaste/conversion/SingleWordFromIdentifier.expected.kt index 0bfdbcff9f7..00397435237 100644 --- a/idea/testData/copyPaste/conversion/SingleWordFromIdentifier.expected.kt +++ b/idea/testData/copyPaste/conversion/SingleWordFromIdentifier.expected.kt @@ -1 +1 @@ -class Some \ No newline at end of file +No conversion performed \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.java b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.java index 9e9044489cc..ba5cf5036dc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/AbstractJavaToKotlinCopyPasteConversionTest.java @@ -17,8 +17,10 @@ package org.jetbrains.kotlin.idea.conversion.copy; import com.intellij.openapi.actionSystem.IdeActions; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.command.CommandProcessor; +import com.intellij.openapi.editor.Document; import com.intellij.testFramework.LightProjectDescriptor; -import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.JetLightCodeInsightFixtureTestCase; import org.jetbrains.kotlin.idea.JetWithJdkAndRuntimeLightProjectDescriptor; @@ -55,8 +57,28 @@ public abstract class AbstractJavaToKotlinCopyPasteConversionTest extends JetLig String testName = getTestName(false); myFixture.configureByFile(testName + ".java"); myFixture.performEditorAction(IdeActions.ACTION_COPY); + + //noinspection AssignmentToStaticFieldFromInstanceMethod + ConvertJavaCopyPastePostProcessor.conversionPerformed = false; + myFixture.configureByFile(testName + ".to.kt"); myFixture.performEditorAction(IdeActions.ACTION_PASTE); + + if (!ConvertJavaCopyPastePostProcessor.conversionPerformed) { + CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() { + @Override + public void run() { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + Document document = myFixture.getEditor().getDocument(); + document.replaceString(0, document.getTextLength(), "No conversion performed"); + } + }); + } + }, "", null); + } + myFixture.checkResultByFile(testName + ".expected.kt"); } }