From 1569db4b76f0aba0e191c0fdcfd915baa014cc8f Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 5 Nov 2015 23:07:19 +0300 Subject: [PATCH] [ui] fix separators in list popup with speed-search --- .../com/intellij/ui/popup/list/ListPopupModel.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupModel.java b/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupModel.java index 498c797cc422..068e8b5167e2 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupModel.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupModel.java @@ -20,11 +20,14 @@ import com.intellij.openapi.ui.popup.ListSeparator; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.speedSearch.ElementFilter; import com.intellij.ui.speedSearch.SpeedSearch; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ListPopupModel extends AbstractListModel { @@ -37,6 +40,7 @@ public class ListPopupModel extends AbstractListModel { private int myFullMatchIndex = -1; private int myStartsWithIndex = -1; private final SpeedSearch mySpeedSearch; + private final Map mySeparators = new HashMap(); public ListPopupModel(ElementFilter filter, SpeedSearch speedSearch, ListPopupStep step) { myFilter = filter; @@ -66,12 +70,20 @@ public class ListPopupModel extends AbstractListModel { private void rebuildLists() { myFilteredList.clear(); + mySeparators.clear(); myFullMatchIndex = -1; myStartsWithIndex = -1; + ListSeparator lastSeparator = null; for (Object each : myOriginalList) { + lastSeparator = ObjectUtils.chooseNotNull(myStep.getSeparatorAbove(each), lastSeparator); + if (myFilter.shouldBeShowing(each)) { addToFiltered(each); + if (lastSeparator != null) { + mySeparators.put(each, lastSeparator); + lastSeparator = null; + } } } } @@ -115,7 +127,7 @@ public class ListPopupModel extends AbstractListModel { } private ListSeparator getSeparatorAbove(Object value) { - return myStep.getSeparatorAbove(value); + return mySeparators.get(value); } public void refilter() {