diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java index 21b7f846a585..520763535c68 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/CompletionSortingTestCase.java @@ -53,7 +53,6 @@ public abstract class CompletionSortingTestCase extends LightFixtureCompletionTe protected static void refreshSorting(final LookupImpl lookup) { for (final LookupElement item : lookup.getItems()) { - item.putUserData(CompletionLookupArranger.WEIGHT, null); item.putUserData(CompletionLookupArranger.RELEVANCE_KEY, null); } lookup.setSelectionTouched(false); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java index 80fc1cd5d096..c0a85eb1c157 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java @@ -39,7 +39,6 @@ public class CompletionLookupArranger extends LookupArranger { private static final String SELECTED = "selected"; static final String IGNORED = "ignored"; private final CompletionLocation myLocation; - public static final Key WEIGHT = Key.create("WEIGHT"); private final Map mySortingWeights = new THashMap(TObjectHashingStrategy.IDENTITY); public CompletionLookupArranger(final CompletionParameters parameters) { @@ -95,16 +94,6 @@ public class CompletionLookupArranger extends LookupArranger { return info.getContext() + "###" + info.getValue(); } - public Comparable[] getRelevanceWeight(final LookupElement item) { - if (item.getUserData(WEIGHT) != null) return item.getUserData(WEIGHT); - - final Comparable[] result = new Comparable[]{WeighingService.weigh(CompletionService.RELEVANCE_KEY, item, myLocation)}; - - item.putUserData(WEIGHT, result); - - return result; - } - public Comparable getSortingWeight(final LookupElement item) { final Comparable comparable = mySortingWeights.get(item); if (comparable != null) return comparable; @@ -116,35 +105,13 @@ public class CompletionLookupArranger extends LookupArranger { } - public static int doCompare(final double priority1, final double priority2, final Comparable[] weight1, final Comparable[] weight2) { - if (priority1 != priority2) { - final double v = priority1 - priority2; - if (v > 0) return -1; - if (v < 0) return 1; - } - - for (int i = 0; i < weight1.length; i++) { - final Comparable w1 = weight1[i]; - final Comparable w2 = i < weight2.length ? weight2[i]:null; - if (w1 != null || w2 != null) { - if (w1 == null) return 1; - if (w2 == null) return -1; - //noinspection unchecked - final int res = w1.compareTo(w2); - if (res != 0) return -res; - } - } - - return 0; - } - @Override public LookupItemWeightComparable getRelevance(LookupElement item) { LookupItemWeightComparable result = item.getUserData(RELEVANCE_KEY); if (result != null) return result; final double priority = item instanceof LookupItem ? ((LookupItem)item).getPriority() : 0; - result = new LookupItemWeightComparable(priority, getRelevanceWeight(item)); + result = new LookupItemWeightComparable(priority, WeighingService.weigh(CompletionService.RELEVANCE_KEY, item, myLocation)); item.putUserData(RELEVANCE_KEY, result); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupItemWeightComparable.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupItemWeightComparable.java index 259773f915a8..80717934090b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupItemWeightComparable.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupItemWeightComparable.java @@ -15,27 +15,27 @@ */ package com.intellij.codeInsight.lookup.impl; -import com.intellij.codeInsight.completion.CompletionLookupArranger; - -import java.util.Arrays; - /** * @author peter */ public class LookupItemWeightComparable implements Comparable { private final double myPriority; - private final Comparable[] myWeight; + private final Comparable myWeight; - public LookupItemWeightComparable(final double priority, final Comparable[] weight) { + public LookupItemWeightComparable(final double priority, final Comparable weight) { myPriority = priority; myWeight = weight; } public int compareTo(final LookupItemWeightComparable o) { - return CompletionLookupArranger.doCompare(myPriority, o.myPriority, myWeight, o.myWeight); + if (myPriority != o.myPriority) { + return myPriority - o.myPriority > 0 ? -1 : 1; + } + + return -myWeight.compareTo(o.myWeight); } public String toString() { - return myPriority + " " + Arrays.toString(myWeight); + return myPriority + " " + myWeight; } } diff --git a/platform/lang-impl/src/com/intellij/internal/DumpLookupElementWeights.java b/platform/lang-impl/src/com/intellij/internal/DumpLookupElementWeights.java index ccdd719181a4..6018f722ba74 100644 --- a/platform/lang-impl/src/com/intellij/internal/DumpLookupElementWeights.java +++ b/platform/lang-impl/src/com/intellij/internal/DumpLookupElementWeights.java @@ -58,7 +58,7 @@ public class DumpLookupElementWeights extends AnAction implements DumbAware { Map values = new HashMap(); Set toExclude = new HashSet(); for (LookupElement item : items) { - final String weight = Arrays.toString(item.getUserData(CompletionLookupArranger.WEIGHT)); + final String weight = item.getUserData(CompletionLookupArranger.RELEVANCE_KEY).toString(); final Matcher matcher = pattern.matcher(weight); int start = 0; while (matcher.find(start)) { @@ -78,7 +78,7 @@ public class DumpLookupElementWeights extends AnAction implements DumbAware { for (int i = 0; i < items.size(); i++) { LookupElement item = items.get(i); - String weight = Arrays.toString(item.getUserData(CompletionLookupArranger.WEIGHT)); + String weight = item.getUserData(CompletionLookupArranger.RELEVANCE_KEY).toString(); for (String s : toExclude) { weight = StringUtil.replace(weight, s, "", false); } diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 02d9a3460ead..9ebbae7099bd 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -1700,7 +1700,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig final List strings = new ArrayList(); for (int i = 0; i < model.size(); i++) { final LookupElement item = model.get(i); - strings.add(item.getLookupString() + Arrays.toString(item.getUserData(CompletionLookupArranger.WEIGHT))); + strings.add(item.getLookupString() + item.getUserData(CompletionLookupArranger.RELEVANCE_KEY)); if (i == count - 1) { strings.add("---"); }