Fixed bug in reference shortening + fixed test data for completion tests
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user