From 52c8ed922d0b938c19b31037caa9a2605160a782 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 24 Apr 2012 20:17:20 +0200 Subject: [PATCH] LookupElement classifier interface simplified --- .../completion/CompletionLookupArranger.java | 5 +-- .../impl/LiftShorterItemsClassifier.java | 42 +++++++------------ .../codeInsight/lookup/Classifier.java | 2 +- .../codeInsight/lookup/ClassifierFactory.java | 27 +----------- .../lookup/ComparingClassifier.java | 4 +- 5 files changed, 22 insertions(+), 58 deletions(-) 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 360cb847541e..97fab23f6b49 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java @@ -34,6 +34,7 @@ import com.intellij.psi.WeighingService; import com.intellij.psi.statistics.StatisticsInfo; import com.intellij.psi.statistics.StatisticsManager; import com.intellij.util.Alarm; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import gnu.trove.THashMap; import gnu.trove.TObjectHashingStrategy; @@ -147,9 +148,7 @@ public class CompletionLookupArranger extends LookupArranger { final List byRelevance = new ArrayList(); for (CompletionSorterImpl sorter : myClassifiers.keySet()) { - for (List elements : myClassifiers.get(sorter).classify((List)inputBySorter.get(sorter))) { - byRelevance.addAll(elements); - } + ContainerUtil.addAll(byRelevance, myClassifiers.get(sorter).classify((List)inputBySorter.get(sorter))); } LinkedHashSet model = new LinkedHashSet(); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java index e8de3d322ec8..41beadd8273f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/LiftShorterItemsClassifier.java @@ -73,44 +73,32 @@ class LiftShorterItemsClassifier extends Classifier { } @Override - public Iterable> classify(List source) { + public Iterable classify(List source) { return liftShorterElements(source, new THashSet(TObjectHashingStrategy.IDENTITY)); } - private Iterable> liftShorterElements(List source, THashSet lifted) { + private List liftShorterElements(List source, THashSet lifted) { final Set srcSet = new THashSet(source, TObjectHashingStrategy.IDENTITY); - final Iterable> classified = myNext.classify(source); final Set processed = new THashSet(TObjectHashingStrategy.IDENTITY); - final ArrayList> result = new ArrayList>(); - for (List list : classified) { - final ArrayList group = new ArrayList(); - for (LookupElement element : list) { - assert srcSet.contains(element) : myNext; - if (processed.add(element)) { - for (String prefix : getSortedPrefixes(element)) { - List shorter = new SmartList(); - for (LookupElement shorterElement : myElements.get(prefix)) { - if (srcSet.contains(shorterElement) && processed.add(shorterElement)) { - shorter.add(shorterElement); - } + final List result = new ArrayList(); + for (LookupElement element : myNext.classify(source)) { + assert srcSet.contains(element) : myNext; + if (processed.add(element)) { + for (String prefix : getSortedPrefixes(element)) { + List shorter = new SmartList(); + for (LookupElement shorterElement : myElements.get(prefix)) { + if (srcSet.contains(shorterElement) && processed.add(shorterElement)) { + shorter.add(shorterElement); } - - lifted.addAll(shorter); - - final Iterable> shorterClassified = myNext.classify(shorter); - if (group.isEmpty()) { - ContainerUtil.addAll(result, shorterClassified); - } else { - group.addAll(ContainerUtil.flatten(shorterClassified)); - } - } - group.add(element); + lifted.addAll(shorter); + + ContainerUtil.addAll(result, myNext.classify(shorter)); } + result.add(element); } - result.add(group); } return result; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/Classifier.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/Classifier.java index 3938e58702c7..7e177fd2ec57 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/Classifier.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/Classifier.java @@ -24,7 +24,7 @@ import java.util.List; public abstract class Classifier { public abstract void addElement(T t); - public abstract Iterable> classify(List source); + public abstract Iterable classify(List source); public abstract void describeItems(LinkedHashMap map); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/ClassifierFactory.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/ClassifierFactory.java index 67ef710a33f6..25a0a898c32d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/ClassifierFactory.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/ClassifierFactory.java @@ -40,8 +40,8 @@ public abstract class ClassifierFactory { } @Override - public Iterable> classify(List source) { - return Collections.singleton(source); + public Iterable classify(List source) { + return source; } @Override @@ -50,29 +50,6 @@ public abstract class ClassifierFactory { }; } - public static Classifier sortingListClassifier(final Comparator comparator) { - return new Classifier() { - @Override - public void addElement(T t) { - } - - @Override - public Iterable> classify(List source) { - final List copy = new ArrayList(source); - Collections.sort(source, comparator); - return Collections.singletonList(copy); - } - - @Override - public void describeItems(LinkedHashMap map) { - final String str = "sorted by " + comparator; - for (StringBuilder builder : map.values()) { - builder.append(str); - } - } - }; - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/ComparingClassifier.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/ComparingClassifier.java index c0e1630d7d12..2a2bf9f3ba88 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/ComparingClassifier.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/ComparingClassifier.java @@ -55,8 +55,8 @@ public abstract class ComparingClassifier extends Classifier { } @Override - public Iterable> classify(List source) { - List> result = new ArrayList>(); + public Iterable classify(List source) { + List result = new ArrayList(); for (List list : groupByWeights(source).values()) { ContainerUtil.addAll(result, myNext.classify(list)); }