IDEA-83302 Click To Sort variants alphabetically for packages names

This commit is contained in:
peter
2012-04-25 22:12:41 +02:00
parent d4c373c81c
commit bb18a176a5
4 changed files with 34 additions and 23 deletions
@@ -0,0 +1,6 @@
class Goo {
{
new Foox<caret>
}
}
@@ -8,6 +8,7 @@ import com.intellij.codeInsight.completion.impl.CompletionServiceImpl;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupManager;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.ide.ui.UISettings;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.annotations.NonNls;
@@ -26,6 +27,7 @@ public abstract class CompletionSortingTestCase extends LightFixtureCompletionTe
@Override
protected void tearDown() throws Exception {
LookupManager.getInstance(getProject()).hideActiveLookup();
UISettings.getInstance().SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = false;
super.tearDown();
}
@@ -12,6 +12,7 @@ import com.intellij.codeInsight.lookup.impl.LookupImpl
import com.intellij.ide.ui.UISettings
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiMethod
import com.intellij.codeInsight.lookup.LookupElementPresentation
public class NormalCompletionOrderingTest extends CompletionSortingTestCase {
private static final String BASE_PATH = "/codeInsight/completion/normalSorting";
@@ -251,29 +252,32 @@ public class NormalCompletionOrderingTest extends CompletionSortingTestCase {
public void testPreselectMostRelevantInTheMiddleAlpha() {
UISettings.getInstance().SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = true;
try {
myFixture.addClass("package foo; public class Elaaaaaaaaaaaaaaaaaaaa {}");
invokeCompletion(getTestName(false) + ".java");
myFixture.completeBasic();
LookupImpl lookup = getLookup();
assertPreferredItems(lookup.getList().getSelectedIndex());
assertEquals("Elaaaaaaaaaaaaaaaaaaaa", lookup.getItems().get(0).getLookupString());
assertEquals("ELEMENT_A", lookup.getCurrentItem().getLookupString());
}
finally {
UISettings.getInstance().SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = false;
}
myFixture.addClass("package foo; public class Elaaaaaaaaaaaaaaaaaaaa {}");
invokeCompletion(getTestName(false) + ".java");
myFixture.completeBasic();
LookupImpl lookup = getLookup();
assertPreferredItems(lookup.getList().getSelectedIndex());
assertEquals("Elaaaaaaaaaaaaaaaaaaaa", lookup.getItems().get(0).getLookupString());
assertEquals("ELEMENT_A", lookup.getCurrentItem().getLookupString());
}
public void testReallyAlphaSorting() {
UISettings.getInstance().SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = true;
try {
invokeCompletion(getTestName(false) + ".java");
assert myFixture.lookupElementStrings.sort() == myFixture.lookupElementStrings
invokeCompletion(getTestName(false) + ".java");
assert myFixture.lookupElementStrings.sort() == myFixture.lookupElementStrings
}
public void testAlphaSortPackages() {
UISettings.getInstance().SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = true
def pkgs = ['bar', 'foo', 'goo', 'roo', 'zoo']
for (s in pkgs) {
myFixture.addClass("package $s; public class Foox {}")
}
finally {
UISettings.getInstance().SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = false;
invokeCompletion(getTestName(false) + ".java")
for (i in 0..<pkgs.size()) {
assert LookupElementPresentation.renderElement(myFixture.lookupElements[i]).tailText?.contains(pkgs[i])
}
}
@@ -139,6 +139,11 @@ public class CompletionLookupArranger extends LookupArranger {
List<LookupElement> items = matchingItems(lookup);
Collections.sort(items, new Comparator<LookupElement>() {
public int compare(LookupElement o1, LookupElement o2) {
if (isAlphaSorted()) {
String invariant = PRESENTATION_INVARIANT.get(o1);
assert invariant != null;
return invariant.compareToIgnoreCase(PRESENTATION_INVARIANT.get(o2));
}
//noinspection unchecked
return mySortingWeights.get(o1).compareTo(mySortingWeights.get(o2));
}
@@ -175,12 +180,6 @@ public class CompletionLookupArranger extends LookupArranger {
}
if (isAlphaSorted()) {
Collections.sort(items, new Comparator<LookupElement>() {
@Override
public int compare(LookupElement o1, LookupElement o2) {
return o1.getLookupString().compareToIgnoreCase(o2.getLookupString());
}
});
model.addAll(items);
} else {
model.addAll(byRelevance);