From 503a8deef126b0a68ea8360a29bec7cd78fe13e7 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 8 Oct 2014 18:54:14 +0400 Subject: [PATCH] Fixed bug in reference shortening + fixed test data for completion tests --- .../plugin/codeInsight/ShortenReferences.kt | 20 +++++++++---------- .../handlers/InsertFqnForJavaClass.kt.after | 4 +++- .../handlers/NonStandardArray.kt.after | 4 +++- .../testData/shortenRefs/ClassNameConflict.kt | 1 + .../shortenRefs/ClassNameConflict.kt.after | 3 +++ .../JvmBasicCompletionTestGenerated.java | 5 ++++- .../shortenRefs/ShortenRefsTestGenerated.java | 11 ++++++---- 7 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 idea/testData/shortenRefs/ClassNameConflict.kt create mode 100644 idea/testData/shortenRefs/ClassNameConflict.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt index 4300f574992..3444d51f1b6 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt @@ -20,7 +20,6 @@ import com.intellij.psi.PsiElement; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.plugin.project.ResolveSessionForBodies; import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -34,6 +33,8 @@ import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall import org.jetbrains.jet.renderer.DescriptorRenderer.FQ_NAMES_IN_TYPES import org.jetbrains.jet.lang.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.jet.lang.resolve.DescriptorUtils +import org.jetbrains.jet.lang.resolve.ImportPath public object ShortenReferences { public fun process(element: JetElement) { @@ -170,7 +171,7 @@ public object ShortenReferences { if (targetByName == null) { if (target.getContainingDeclaration() is ClassDescriptor) return false - addImportIfNeeded(target, file) + addImport(target, file) return true } else if (target.asString() == targetByName.asString()) { @@ -297,7 +298,7 @@ public object ShortenReferences { if (isUsageInImport || isClassMember || !isClassOrPackage) return newExpression.replace(copy) // revert shortening - addImportIfNeeded(targetDescriptor, file) + addImport(targetDescriptor, file) return newExpression } @@ -327,14 +328,13 @@ public object ShortenReferences { } } - private fun DeclarationDescriptor.asString() = DescriptorRenderer.FQ_NAMES_IN_TYPES.render(this) + private fun DeclarationDescriptor.asString() + = DescriptorRenderer.FQ_NAMES_IN_TYPES.render(this) - private fun ResolvedCall<*>.asString(): String { - return "${getExtensionReceiver()}, ${getDispatchReceiver()} -> ${getResultingDescriptor()?.let {FQ_NAMES_IN_TYPES.render(it)}}" - } + private fun ResolvedCall<*>.asString() + = "${getExtensionReceiver()}, ${getDispatchReceiver()} -> ${getResultingDescriptor()?.let {FQ_NAMES_IN_TYPES.render(it)}}" - //TODO: do we need this "IfNeeded" check? - private fun addImportIfNeeded(descriptor: DeclarationDescriptor, file: JetFile) { - ImportInsertHelper.addImportDirectiveIfNeeded(DescriptorUtils.getFqNameSafe(descriptor), file, false) + private fun addImport(descriptor: DeclarationDescriptor, file: JetFile) { + ImportInsertHelper.writeImportToFile(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false), file) } } diff --git a/idea/testData/completion/handlers/InsertFqnForJavaClass.kt.after b/idea/testData/completion/handlers/InsertFqnForJavaClass.kt.after index e36d8a11185..9bd9194d682 100644 --- a/idea/testData/completion/handlers/InsertFqnForJavaClass.kt.after +++ b/idea/testData/completion/handlers/InsertFqnForJavaClass.kt.after @@ -1,5 +1,7 @@ +import java.util + class SortedSet fun test() { - val a = java.util.SortedSet + val a = util.SortedSet } diff --git a/idea/testData/completion/handlers/NonStandardArray.kt.after b/idea/testData/completion/handlers/NonStandardArray.kt.after index 4b09502ebf7..e933f56738a 100644 --- a/idea/testData/completion/handlers/NonStandardArray.kt.after +++ b/idea/testData/completion/handlers/NonStandardArray.kt.after @@ -1 +1,3 @@ -val x : java.lang.reflect.Array \ No newline at end of file +import java.lang.reflect + +val x : reflect.Array \ No newline at end of file diff --git a/idea/testData/shortenRefs/ClassNameConflict.kt b/idea/testData/shortenRefs/ClassNameConflict.kt new file mode 100644 index 00000000000..f1614b5c7eb --- /dev/null +++ b/idea/testData/shortenRefs/ClassNameConflict.kt @@ -0,0 +1 @@ +val v: java.lang.reflect.Array \ No newline at end of file diff --git a/idea/testData/shortenRefs/ClassNameConflict.kt.after b/idea/testData/shortenRefs/ClassNameConflict.kt.after new file mode 100644 index 00000000000..8630ba09b22 --- /dev/null +++ b/idea/testData/shortenRefs/ClassNameConflict.kt.after @@ -0,0 +1,3 @@ +import java.lang.reflect + +val v: reflect.Array \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java index 38e26febc85..aa308f57a50 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java @@ -17,10 +17,13 @@ package org.jetbrains.jet.completion; import com.intellij.testFramework.TestDataPath; +import junit.framework.Test; +import junit.framework.TestSuite; +import org.junit.runner.RunWith; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.junit.runner.RunWith; +import org.jetbrains.jet.JUnit3RunnerWithInners; import java.io.File; import java.util.regex.Pattern; diff --git a/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java b/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java index 50a8037c0c7..92b57d24c03 100644 --- a/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/shortenRefs/ShortenRefsTestGenerated.java @@ -17,13 +17,10 @@ package org.jetbrains.jet.shortenRefs; import com.intellij.testFramework.TestDataPath; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.junit.runner.RunWith; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.JUnit3RunnerWithInners; +import org.junit.runner.RunWith; import java.io.File; import java.util.regex.Pattern; @@ -39,6 +36,12 @@ public class ShortenRefsTestGenerated extends AbstractShortenRefsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/shortenRefs"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } + @TestMetadata("ClassNameConflict.kt") + public void testClassNameConflict() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/shortenRefs/ClassNameConflict.kt"); + doTest(fileName); + } + @TestMetadata("classObject.kt") public void testClassObject() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/shortenRefs/classObject.kt");