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.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)
}
}
@@ -1,5 +1,7 @@
import java.util
class SortedSet
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;
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;
@@ -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");