From 9fb2a051b81ed22d1e821ac87aaf01ce0d730a80 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Tue, 16 Feb 2016 19:36:45 +0300 Subject: [PATCH] support preserving `null` selected value when updating combobox drop-down list --- .../src/com/intellij/util/ui/SwingHelper.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java index d79e2d659918..fc3676a4b157 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java +++ b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java @@ -270,23 +270,27 @@ public class SwingHelper { if (!shouldUpdate(comboBox, newItems)) { return; } - Object selectedItem = comboBox.getSelectedItem(); + Object itemToSelect = comboBox.getSelectedItem(); + boolean preserveSelection = true; //noinspection SuspiciousMethodCalls - if (selectedItem != null && !newItems.contains(selectedItem)) { - selectedItem = null; - } - if (selectedItem == null && newItems.contains(newSelectedItemIfSelectionCannotBePreserved)) { - selectedItem = newSelectedItemIfSelectionCannotBePreserved; + if (!newItems.contains(itemToSelect)) { + if (newItems.contains(newSelectedItemIfSelectionCannotBePreserved)) { + itemToSelect = newSelectedItemIfSelectionCannotBePreserved; + } + else { + itemToSelect = null; + preserveSelection = false; + } } comboBox.removeAllItems(); for (T newItem : newItems) { comboBox.addItem(newItem); } - if (selectedItem != null) { + if (preserveSelection) { int count = comboBox.getItemCount(); for (int i = 0; i < count; i++) { Object item = comboBox.getItemAt(i); - if (selectedItem.equals(item)) { + if (ComparatorUtil.equalsNullable(itemToSelect, item)) { comboBox.setSelectedIndex(i); break; }