diff --git a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt index c60b05bd41b..660e350fe6a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/ImportInsertHelperImpl.kt @@ -183,12 +183,14 @@ public class ImportInsertHelperImpl(private val project: Project) : ImportInsert val name = target.getName() val topLevelScope = resolutionFacade.getFileTopLevelScope(file) + val targetFqName = target.importableFqName ?: return ImportDescriptorResult.FAIL + // check if import is not needed when (target) { - is ClassDescriptor -> { if (topLevelScope.getClassifier(name) == target) return ImportDescriptorResult.ALREADY_IMPORTED } - is PackageViewDescriptor -> { if (topLevelScope.getPackage(name) == target) return ImportDescriptorResult.ALREADY_IMPORTED } - is FunctionDescriptor -> { if (topLevelScope.getFunctions(name).contains(target)) return ImportDescriptorResult.ALREADY_IMPORTED } - is PropertyDescriptor -> { if (topLevelScope.getProperties(name).contains(target)) return ImportDescriptorResult.ALREADY_IMPORTED } + is ClassDescriptor -> { if (topLevelScope.getClassifier(name)?.importableFqName == targetFqName) return ImportDescriptorResult.ALREADY_IMPORTED } + is PackageViewDescriptor -> { if (topLevelScope.getPackage(name)?.importableFqName == targetFqName) return ImportDescriptorResult.ALREADY_IMPORTED } + is FunctionDescriptor -> { if (topLevelScope.getFunctions(name).map { it.importableFqName }.contains(targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED } + is PropertyDescriptor -> { if (topLevelScope.getProperties(name).map { it.importableFqName }.contains(targetFqName)) return ImportDescriptorResult.ALREADY_IMPORTED } else -> return ImportDescriptorResult.FAIL } diff --git a/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.dependency.kt b/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.dependency.kt new file mode 100644 index 00000000000..ecf07f60974 --- /dev/null +++ b/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.dependency.kt @@ -0,0 +1,4 @@ +package bar + +class Class1 +class Class2 \ No newline at end of file diff --git a/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt b/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt new file mode 100644 index 00000000000..0ee7c09c966 --- /dev/null +++ b/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt @@ -0,0 +1,4 @@ +// ALL_UNDER_IMPORTS: true +package foo + +fun foo(p: bar.Class1): bar.Class2 { } diff --git a/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt.after b/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt.after new file mode 100644 index 00000000000..361ebfc9de9 --- /dev/null +++ b/idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt.after @@ -0,0 +1,6 @@ +// ALL_UNDER_IMPORTS: true +package foo + +import bar.* + +fun foo(p: Class1): Class2 { } diff --git a/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java b/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java index 39763f74873..a1ba3272b1d 100644 --- a/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/shortenRefs/ShortenRefsTestGenerated.java @@ -49,6 +49,12 @@ public class ShortenRefsTestGenerated extends AbstractShortenRefsTest { doTest(fileName); } + @TestMetadata("descriptorsChangeAfterImportInsertion.kt") + public void testDescriptorsChangeAfterImportInsertion() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/shortenRefs/descriptorsChangeAfterImportInsertion.kt"); + doTest(fileName); + } + @TestMetadata("JavaStaticMethod.kt") public void testJavaStaticMethod() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/shortenRefs/JavaStaticMethod.kt");