From f5097625fc948d6395d4a5127cda7cee021a6aeb Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 17 Jul 2015 13:27:40 +0200 Subject: [PATCH] avoid expensive LookupElement.isValid check on every repaint, just ignore invalid frozen items (EA-68259 - PIEAE: PsiUtilCore.ensureValid) --- .../codeInsight/completion/CompletionLookupArranger.java | 7 ++++++- .../com/intellij/codeInsight/lookup/LookupArranger.java | 9 +-------- 2 files changed, 7 insertions(+), 9 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 cb4ae3924c4d..c98aaf342115 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionLookupArranger.java @@ -256,7 +256,12 @@ public class CompletionLookupArranger extends LookupArranger { } private void addFrozenItems(Set items, LinkedHashSet model) { - myFrozenItems.retainAll(items); + for (Iterator iterator = myFrozenItems.iterator(); iterator.hasNext(); ) { + LookupElement element = iterator.next(); + if (!element.isValid() || !items.contains(element)) { + iterator.remove(); + } + } model.addAll(myFrozenItems); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java index 7ea82fba16d0..6342f0e2c55e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupArranger.java @@ -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 getMatchingItems() { - return ContainerUtil.filter(myMatchingItems, new Condition() { - @Override - public boolean value(LookupElement element) { - return element.isValid(); - } - }); + return myMatchingItems; } public Map getRelevanceStrings() {