Fix for KT-14885 J2K on paste adds duplicated imports

This commit is contained in:
Simon Ogorodnik
2016-12-08 21:27:54 +03:00
parent 39de1a7659
commit fb5398cdcd
6 changed files with 42 additions and 13 deletions
@@ -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()
@@ -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");