From f08057c3f5edaad56f153da5755987161cc3e5c7 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Fri, 2 Oct 2015 21:26:44 +0300 Subject: [PATCH] ui: preserve TextFieldWithHistory text on history update --- .../src/com/intellij/util/ui/SwingHelper.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 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 7881b8a7c96a..bf9e8a783adc 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java +++ b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java @@ -32,6 +32,7 @@ import com.intellij.ui.HyperlinkLabel; import com.intellij.ui.TextFieldWithHistory; import com.intellij.ui.TextFieldWithHistoryWithBrowseButton; import com.intellij.util.NotNullProducer; +import com.intellij.util.ObjectUtils; import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ComparatorUtil; import com.intellij.util.containers.ContainerUtil; @@ -295,7 +296,7 @@ public class SwingHelper { boolean mergeWithPrevHistory) { Set newHistorySet = ContainerUtil.newHashSet(history); List prevHistory = textFieldWithHistory.getHistory(); - List mergedHistory = ContainerUtil.newArrayList(); + List mergedHistory = ContainerUtil.newArrayListWithCapacity(history.size()); if (mergeWithPrevHistory) { for (String item : prevHistory) { if (!newHistorySet.contains(item)) { @@ -303,15 +304,20 @@ public class SwingHelper { } } } - else { - String currentText = textFieldWithHistory.getText(); - if (StringUtil.isNotEmpty(currentText) && !newHistorySet.contains(currentText)) { - mergedHistory.add(currentText); - } - } mergedHistory.addAll(history); + String oldText = StringUtil.notNullize(textFieldWithHistory.getText()); + String oldSelectedItem = ObjectUtils.tryCast(textFieldWithHistory.getSelectedItem(), String.class); + if (!mergedHistory.contains(oldSelectedItem)) { + oldSelectedItem = null; + } textFieldWithHistory.setHistory(mergedHistory); setLongestAsPrototype(textFieldWithHistory, mergedHistory); + if (oldSelectedItem != null) { + textFieldWithHistory.setSelectedItem(oldSelectedItem); + } + if (!oldText.equals(oldSelectedItem)) { + textFieldWithHistory.setText(oldText); + } } private static void setLongestAsPrototype(@NotNull JComboBox comboBox, @NotNull List variants) {