Fix for KT-14885 J2K on paste adds duplicated imports
This commit is contained in:
+11
-10
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
import java.util.*
|
||||
|
||||
|
||||
class PlainTextPasteImportResolver(dataForConversion: DataForConversion, val targetFile: KtFile) {
|
||||
class PlainTextPasteImportResolver(val dataForConversion: DataForConversion, val targetFile: KtFile) {
|
||||
|
||||
private val file = dataForConversion.file
|
||||
private val project = targetFile.project
|
||||
@@ -91,21 +91,22 @@ class PlainTextPasteImportResolver(dataForConversion: DataForConversion, val tar
|
||||
|
||||
if (importPath.isAllUnder) {
|
||||
if (isClassReceiver)
|
||||
psiElementFactory.createImportStaticStatement(receiver as PsiClass, "*")
|
||||
addImport(psiElementFactory.createImportStaticStatement(receiver as PsiClass, "*"))
|
||||
else if (isPackageReceiver)
|
||||
psiElementFactory.createImportStatementOnDemand((receiver as PsiPackage).qualifiedName)
|
||||
addImport(psiElementFactory.createImportStatementOnDemand((receiver as PsiPackage).qualifiedName))
|
||||
}
|
||||
else {
|
||||
if (isPackageReceiver && isClassSelector)
|
||||
psiElementFactory.createImportStatement(selector as PsiClass)
|
||||
if (isClassSelector)
|
||||
addImport(psiElementFactory.createImportStatement(selector as PsiClass))
|
||||
else if (isClassReceiver)
|
||||
psiElementFactory.createImportStaticStatement(receiver as PsiClass, importPath.importedName!!.asString())
|
||||
addImport(psiElementFactory.createImportStaticStatement(receiver as PsiClass, importPath.importedName!!.asString()))
|
||||
}
|
||||
}
|
||||
}
|
||||
runWriteAction {
|
||||
targetFile.importDirectives.forEach(::tryConvertKotlinImport)
|
||||
}
|
||||
if (importList !in dataForConversion.elementsAndTexts.toList())
|
||||
runWriteAction {
|
||||
targetFile.importDirectives.forEach(::tryConvertKotlinImport)
|
||||
}
|
||||
}
|
||||
|
||||
fun tryResolveReferences() {
|
||||
@@ -163,7 +164,7 @@ class PlainTextPasteImportResolver(dataForConversion: DataForConversion, val tar
|
||||
}
|
||||
|
||||
runWriteAction {
|
||||
elementsWithUnresolvedRef.forEach {
|
||||
elementsWithUnresolvedRef.reversed().forEach {
|
||||
val reference = it.reference as PsiQualifiedReference
|
||||
if (!tryResolveReference(reference)) failedToResolveReferenceNames += reference.referenceName!!
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.example
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
|
||||
class ExampleClass {
|
||||
override fun toString(): String {
|
||||
return UUID.randomUUID().toString()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.example
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
|
||||
class ExampleClass {
|
||||
<caret>
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
@Override
|
||||
public String toString() {
|
||||
return UUID.randomUUID().toString();
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
import java.util.ArrayList
|
||||
import test.ToBeImportedJava.staticMethod
|
||||
import test.ToBeImportedJava.TO_BE_IMPORTED_CONST
|
||||
import test.ToBeImportedJava
|
||||
import test.ToBeImportedKotlin
|
||||
import java.util.HashMap
|
||||
import test.ToBeImportedJava.TO_BE_IMPORTED_CONST
|
||||
import test.ToBeImportedJava.staticMethod
|
||||
import java.util.ArrayList
|
||||
|
||||
class Target {
|
||||
var listOfPlatformType: List<String> = ArrayList()
|
||||
|
||||
+6
@@ -48,6 +48,12 @@ public class TextJavaToKotlinCopyPasteConversionTestGenerated extends AbstractTe
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("ImportFromTarget.txt")
|
||||
public void testImportFromTarget() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/plainTextConversion/ImportFromTarget.txt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("ImportResolve.txt")
|
||||
public void testImportResolve() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/copyPaste/plainTextConversion/ImportResolve.txt");
|
||||
|
||||
Reference in New Issue
Block a user