avoid expensive LookupElement.isValid check on every repaint, just ignore invalid frozen items (EA-68259 - PIEAE: PsiUtilCore.ensureValid)

This commit is contained in:
peter
2015-07-17 13:34:57 +02:00
parent 419e8cde7f
commit f5097625fc
2 changed files with 7 additions and 9 deletions
@@ -256,7 +256,12 @@ public class CompletionLookupArranger extends LookupArranger {
}
private void addFrozenItems(Set<LookupElement> items, LinkedHashSet<LookupElement> model) {
myFrozenItems.retainAll(items);
for (Iterator<LookupElement> iterator = myFrozenItems.iterator(); iterator.hasNext(); ) {
LookupElement element = iterator.next();
if (!element.isValid() || !items.contains(element)) {
iterator.remove();
}
}
model.addAll(myFrozenItems);
}
@@ -20,9 +20,7 @@ import com.intellij.codeInsight.completion.PrefixMatcher;
import com.intellij.codeInsight.completion.impl.CompletionServiceImpl;
import com.intellij.codeInsight.lookup.impl.LookupImpl;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.*;
@@ -104,12 +102,7 @@ public abstract class LookupArranger {
}
protected List<LookupElement> getMatchingItems() {
return ContainerUtil.filter(myMatchingItems, new Condition<LookupElement>() {
@Override
public boolean value(LookupElement element) {
return element.isValid();
}
});
return myMatchingItems;
}
public Map<LookupElement,StringBuilder> getRelevanceStrings() {