Fixed bug in reference shortening + fixed test data for completion tests

This commit is contained in:
Valentin Kipyatkov
2014-10-08 18:54:14 +04:00
parent d8b962c7f3
commit 503a8deef1
7 changed files with 31 additions and 17 deletions
@@ -20,7 +20,6 @@ import com.intellij.psi.PsiElement;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; 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.project.ResolveSessionForBodies;
import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper;
import org.jetbrains.jet.renderer.DescriptorRenderer; 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.lang.resolve.calls.model.ResolvedCall
import org.jetbrains.jet.renderer.DescriptorRenderer.FQ_NAMES_IN_TYPES 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.calls.callUtil.getResolvedCall
import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.resolve.ImportPath
public object ShortenReferences { public object ShortenReferences {
public fun process(element: JetElement) { public fun process(element: JetElement) {
@@ -170,7 +171,7 @@ public object ShortenReferences {
if (targetByName == null) { if (targetByName == null) {
if (target.getContainingDeclaration() is ClassDescriptor) return false if (target.getContainingDeclaration() is ClassDescriptor) return false
addImportIfNeeded(target, file) addImport(target, file)
return true return true
} }
else if (target.asString() == targetByName.asString()) { else if (target.asString() == targetByName.asString()) {
@@ -297,7 +298,7 @@ public object ShortenReferences {
if (isUsageInImport || isClassMember || !isClassOrPackage) return newExpression.replace(copy) // revert shortening if (isUsageInImport || isClassMember || !isClassOrPackage) return newExpression.replace(copy) // revert shortening
addImportIfNeeded(targetDescriptor, file) addImport(targetDescriptor, file)
return newExpression 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 { private fun ResolvedCall<*>.asString()
return "${getExtensionReceiver()}, ${getDispatchReceiver()} -> ${getResultingDescriptor()?.let {FQ_NAMES_IN_TYPES.render(it)}}" = "${getExtensionReceiver()}, ${getDispatchReceiver()} -> ${getResultingDescriptor()?.let {FQ_NAMES_IN_TYPES.render(it)}}"
}
//TODO: do we need this "IfNeeded" check? private fun addImport(descriptor: DeclarationDescriptor, file: JetFile) {
private fun addImportIfNeeded(descriptor: DeclarationDescriptor, file: JetFile) { ImportInsertHelper.writeImportToFile(ImportPath(DescriptorUtils.getFqNameSafe(descriptor), false), file)
ImportInsertHelper.addImportDirectiveIfNeeded(DescriptorUtils.getFqNameSafe(descriptor), file, false)
} }
} }
@@ -1,5 +1,7 @@
import java.util
class SortedSet class SortedSet
fun test() { fun test() {
val a = java.util.SortedSet val a = util.SortedSet<caret>
} }
@@ -1 +1,3 @@
val x : java.lang.reflect.Array import java.lang.reflect
val x : reflect.Array<caret>
@@ -0,0 +1 @@
val v: <selection>java.lang.reflect.Array</selection>
@@ -0,0 +1,3 @@
import java.lang.reflect
val v: reflect.Array
@@ -17,10 +17,13 @@
package org.jetbrains.jet.completion; package org.jetbrains.jet.completion;
import com.intellij.testFramework.TestDataPath; 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.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata; import org.jetbrains.jet.test.TestMetadata;
import org.junit.runner.RunWith; import org.jetbrains.jet.JUnit3RunnerWithInners;
import java.io.File; import java.io.File;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -17,13 +17,10 @@
package org.jetbrains.jet.shortenRefs; package org.jetbrains.jet.shortenRefs;
import com.intellij.testFramework.TestDataPath; 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.JetTestUtils;
import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.InnerTestClasses;
import org.jetbrains.jet.test.TestMetadata; import org.jetbrains.jet.test.TestMetadata;
import org.jetbrains.jet.JUnit3RunnerWithInners; import org.junit.runner.RunWith;
import java.io.File; import java.io.File;
import java.util.regex.Pattern; 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); 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") @TestMetadata("classObject.kt")
public void testClassObject() throws Exception { public void testClassObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/shortenRefs/classObject.kt"); String fileName = JetTestUtils.navigationMetadata("idea/testData/shortenRefs/classObject.kt");