From c77c554aacfbcc84a367573371e0ab1feb4a5269 Mon Sep 17 00:00:00 2001 From: Ivan Semenov Date: Mon, 23 Apr 2018 16:07:31 +0300 Subject: [PATCH] [vcs] Clone dialog completion urls in combobox Duplicate completion list in autocomplete and combobox Do not show previously cloned urls --- .../com/intellij/dvcs/ui/CloneDvcsDialog.java | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/ui/CloneDvcsDialog.java b/platform/dvcs-impl/src/com/intellij/dvcs/ui/CloneDvcsDialog.java index 4ce33d7c207c..08a7a2146877 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/ui/CloneDvcsDialog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/ui/CloneDvcsDialog.java @@ -90,7 +90,8 @@ public abstract class CloneDvcsDialog extends DialogWrapper { } private ComboBox myRepositoryUrlCombobox; - private EditorTextField myRepositoryUrlField; + private CollectionComboBoxModel myRepositoryUrlComboboxModel; + private TextFieldWithAutoCompletion myRepositoryUrlField; private ComponentVisibilityProgressManager mySpinnerProgressManager; private JButton myTestButton; // test repository private MyTextFieldWithBrowseButton myDirectoryField; @@ -105,7 +106,7 @@ public abstract class CloneDvcsDialog extends DialogWrapper { @NotNull private final List myLoadedRepositoryHostingServicesNames; @Nullable private Alarm myRepositoryUrlAutoCompletionTooltipAlarm; - @NotNull private final List myAvailableRepositories; + @NotNull private final Set myUniqueAvailableRepositories; public CloneDvcsDialog(@NotNull Project project, @NotNull String displayName, @NotNull String vcsDirectoryName) { this(project, displayName, vcsDirectoryName, null); @@ -119,7 +120,7 @@ public abstract class CloneDvcsDialog extends DialogWrapper { myProject = project; myVcsDirectoryName = vcsDirectoryName; myLoadedRepositoryHostingServicesNames = new ArrayList<>(); - myAvailableRepositories = new ArrayList<>(); + myUniqueAvailableRepositories = new HashSet<>(); initComponents(defaultUrl); initUrlAutocomplete(); @@ -168,11 +169,11 @@ public abstract class CloneDvcsDialog extends DialogWrapper { } private void initComponents(@Nullable String defaultUrl) { - DvcsRememberedInputs rememberedInputs = getRememberedInputs(); - String parentDirectory = rememberedInputs.getCloneParentDir(); + String parentDirectory = getRememberedInputs().getCloneParentDir(); + myRepositoryUrlComboboxModel = new CollectionComboBoxModel<>(); myRepositoryUrlField = TextFieldWithAutoCompletion.create(myProject, - myAvailableRepositories, + myRepositoryUrlComboboxModel.getItems(), false, ""); @@ -186,6 +187,7 @@ public abstract class CloneDvcsDialog extends DialogWrapper { myRepositoryUrlCombobox.setEditable(true); myRepositoryUrlCombobox.setEditor(ComboBoxCompositeEditor.withComponents(myRepositoryUrlField, repositoryUrlFieldSpinner)); + myRepositoryUrlCombobox.setModel(myRepositoryUrlComboboxModel); myRepositoryUrlField.addDocumentListener(new DocumentListener() { @Override @@ -226,18 +228,11 @@ public abstract class CloneDvcsDialog extends DialogWrapper { } }); - boolean defaultAlreadyAdded = false; - for (String url : rememberedInputs.getVisitedUrls()) { - myRepositoryUrlCombobox.addItem(url); - if (defaultUrl != null) { - defaultAlreadyAdded = defaultUrl.equalsIgnoreCase(url); - } - } - if (defaultUrl != null && !defaultAlreadyAdded) { - myRepositoryUrlCombobox.addItem(defaultUrl); + if (defaultUrl != null) { myRepositoryUrlField.setText(defaultUrl); + myRepositoryUrlField.selectAll(); + myTestButton.setEnabled(true); } - myTestButton.setEnabled(!getCurrentUrlText().isEmpty()); } private void initUrlAutocomplete() { @@ -285,16 +280,25 @@ public abstract class CloneDvcsDialog extends DialogWrapper { private void schedule(@NotNull String serviceDisplayName, @NotNull RepositoryListLoader loader) { mySpinnerProgressManager.run(new Task.Backgroundable(myProject, "Not Visible") { - private List myLoadedRepositories; + private final List myNewRepositories = new ArrayList<>(); @Override public void run(@NotNull ProgressIndicator indicator) { - myLoadedRepositories = loader.getAvailableRepositories(indicator); + for (String repository : loader.getAvailableRepositories(indicator)) { + if (myUniqueAvailableRepositories.add(repository)) { + myNewRepositories.add(repository); + } + } } @Override public void onSuccess() { - myAvailableRepositories.addAll(myLoadedRepositories); + if (!myNewRepositories.isEmpty()) { + // otherwise editor content will be reset + myRepositoryUrlCombobox.setSelectedItem(myRepositoryUrlField.getText()); + myRepositoryUrlComboboxModel.addAll(myRepositoryUrlComboboxModel.getSize(), myNewRepositories); + myRepositoryUrlField.setVariants(myRepositoryUrlComboboxModel.getItems()); + } myLoadedRepositoryHostingServicesNames.add(serviceDisplayName); showRepositoryUrlAutoCompletionTooltip(); }