diff options
author | Mickael Istria | 2019-09-10 10:49:24 +0000 |
---|---|---|
committer | Mickael Istria | 2019-09-13 18:20:39 +0000 |
commit | ae4dd6aea39dc6a4b2ef24c4939fb8151b3e947c (patch) | |
tree | 47fe77820fbb7b64224f778f5a99d2a795270591 /bundles/org.eclipse.ui.workbench/Eclipse UI | |
parent | 84b2a293678617e8523b21ff342f77732cc9d815 (diff) | |
download | eclipse.platform.ui-ae4dd6aea39dc6a4b2ef24c4939fb8151b3e947c.tar.gz eclipse.platform.ui-ae4dd6aea39dc6a4b2ef24c4939fb8151b3e947c.tar.xz eclipse.platform.ui-ae4dd6aea39dc6a4b2ef24c4939fb8151b3e947c.zip |
Bug 550881 - [Quick Access] Missing Previous Pick when incremental
Change-Id: I25447ed3dee4ad42980270f85560218b47451fda
Signed-off-by: Mickael Istria <mistria@redhat.com>
Diffstat (limited to 'bundles/org.eclipse.ui.workbench/Eclipse UI')
13 files changed, 69 insertions, 73 deletions
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreviousPicksProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreviousPicksProvider.java index 8524d17df1d..0d195ea158a 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreviousPicksProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/PreviousPicksProvider.java @@ -32,7 +32,7 @@ class PreviousPicksProvider extends QuickAccessProvider { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { return null; } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java index 337c2fae1c7..6d30382ebfe 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessContents.java @@ -263,7 +263,7 @@ public abstract class QuickAccessContents { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { return null; } @@ -484,6 +484,9 @@ public abstract class QuickAccessContents { } if (filter.length() > 0 || provider.isAlwaysPresent() || showAllMatches) { QuickAccessElement[] sortedElements = provider.getElementsSorted(filter, aMonitor); + if (sortedElements == null) { + sortedElements = new QuickAccessElement[0]; + } if (!(provider instanceof PreviousPicksProvider)) { for (QuickAccessElement element : sortedElements) { elementsToProviders.put(element, provider); @@ -493,7 +496,7 @@ public abstract class QuickAccessContents { // count previous picks and store ids if (isPreviousPickProvider) { prevPick = sortedElements.length; - Stream.of(sortedElements).forEach(e -> prevPickIds.add(e.getId())); + Stream.of(sortedElements).map(QuickAccessElement::getId).forEach(prevPickIds::add); } int j = indexPerProvider[i]; @@ -523,7 +526,7 @@ public abstract class QuickAccessContents { } } - if (entryEnabled(provider, entry)) { + if (entry != null) { entries[i].add(entry); count++; countTotal++; @@ -551,7 +554,7 @@ public abstract class QuickAccessContents { if (!perfectMatchAdded) { QuickAccessEntry entry = getMatcherFor(perfectMatch).match(filter, providers[0]); - if (entryEnabled(providers[0], entry)) { + if (entry != null) { if (entries[0] == null) { entries[0] = new ArrayList<>(); indexPerProvider[0] = 0; @@ -590,28 +593,6 @@ public abstract class QuickAccessContents { return categoryPattern; } - /** - * @param provider - * @param entry - * @return <code>true</code> if the entry is enabled - */ - private boolean entryEnabled(QuickAccessProvider provider, QuickAccessEntry entry) { - if (entry == null) { - return false; - } - - // For a previous pick provider, check that the original provider does - // also provide the element - if (provider instanceof PreviousPicksProvider) { - QuickAccessElement element = entry.element; - final QuickAccessProvider originalProvider = getProviderFor(element); - QuickAccessElement match = originalProvider.getElementForId(element.getId()); - return match != null; - } - - return true; - } - private void doDispose() { if (textLayout != null && !textLayout.isDisposed()) { textLayout.dispose(); diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java index 0fea44c458f..705b4225edb 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessDialog.java @@ -17,6 +17,7 @@ package org.eclipse.ui.internal.quickaccess; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -85,7 +86,7 @@ public class QuickAccessDialog extends PopupDialog { private Set<ModifyListener> toRemoveTextListeners; private Text filterText; private IWorkbenchWindow window; - private static final String TEXT_ARRAY = "textArray"; //$NON-NLS-1$ + private static final String USER_INPUT_TEXTS = "textArray"; //$NON-NLS-1$ private static final String TEXT_ENTRIES = "textEntries"; //$NON-NLS-1$ private static final String ORDERED_PROVIDERS = "orderedProviders"; //$NON-NLS-1$ private static final String ORDERED_ELEMENTS = "orderedElements"; //$NON-NLS-1$ @@ -389,7 +390,7 @@ public class QuickAccessDialog extends PopupDialog { dialogSettings.put(ORDERED_ELEMENTS, orderedElements); dialogSettings.put(ORDERED_PROVIDERS, orderedProviders); dialogSettings.put(TEXT_ENTRIES, textEntries); - dialogSettings.put(TEXT_ARRAY, textArray); + dialogSettings.put(USER_INPUT_TEXTS, textArray); } private void restorePreviousEntries() { @@ -399,22 +400,31 @@ public class QuickAccessDialog extends PopupDialog { } String[] orderedElements = dialogSettings.getArray(ORDERED_ELEMENTS); String[] orderedProviders = dialogSettings.getArray(ORDERED_PROVIDERS); - String[] textEntries = dialogSettings.getArray(TEXT_ENTRIES); - String[] textArray = dialogSettings.getArray(TEXT_ARRAY); + String[] rawTextEntriesCountByElement = dialogSettings.getArray(TEXT_ENTRIES); + String[] userInputTexts = dialogSettings.getArray(USER_INPUT_TEXTS); elementMap = new HashMap<>(); textMap = new HashMap<>(); - if (orderedElements != null && orderedProviders != null && textEntries != null && textArray != null) { - int arrayIndex = 0; + if (orderedElements != null && orderedProviders != null && rawTextEntriesCountByElement != null + && userInputTexts != null) { + Integer[] textEntriesCountByElement = Arrays.stream(rawTextEntriesCountByElement).map(Integer::parseInt) + .toArray(Integer[]::new); + int inputTextIndex = 0; for (int i = 0; i < orderedElements.length; i++) { + int numberOfMatchingTextsForCurrentElement = textEntriesCountByElement[i].intValue(); QuickAccessProvider quickAccessProvider = providerMap.get(orderedProviders[i]); - int numTexts = Integer.parseInt(textEntries[i]); if (quickAccessProvider != null) { - QuickAccessElement quickAccessElement = quickAccessProvider.getElementForId(orderedElements[i]); + String firstText = null; + if (inputTextIndex < userInputTexts.length && numberOfMatchingTextsForCurrentElement >= 1) { + firstText = userInputTexts[inputTextIndex]; + } + QuickAccessElement quickAccessElement = quickAccessProvider.findElement(orderedElements[i], + firstText); if (quickAccessElement != null) { contents.registerProviderFor(quickAccessElement, quickAccessProvider); ArrayList<String> arrayList = new ArrayList<>(); - for (int j = arrayIndex; j < arrayIndex + numTexts; j++) { - String text = textArray[j]; + for (int j = inputTextIndex; j < inputTextIndex + + numberOfMatchingTextsForCurrentElement; j++) { + String text = userInputTexts[j]; // text length can be zero for old workspaces, // see bug 190006 if (!text.isEmpty()) { @@ -426,7 +436,7 @@ public class QuickAccessDialog extends PopupDialog { previousPicksProvider.elements.add(quickAccessElement); } } - arrayIndex += numTexts; + inputTextIndex += numberOfMatchingTextsForCurrentElement; } } } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessExtensionManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessExtensionManager.java index 41b9108a9e0..d86590e8494 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessExtensionManager.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessExtensionManager.java @@ -163,9 +163,12 @@ public class QuickAccessExtensionManager { } @Override - public QuickAccessElement getElementForId(String id) { - getElementsSorted(null, new NullProgressMonitor()); // initialize content - return super.getElementForId(id); + public QuickAccessElement findElement(String id, String filterText) { + QuickAccessElement[] elementsSorted = getElementsSorted(filterText, new NullProgressMonitor()); + return Arrays.stream(elementsSorted) + .filter(element -> element.getId().equals(id)) + .findAny() + .orElse(null); } } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java index 04636559e9d..da920689911 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/QuickAccessProvider.java @@ -75,12 +75,15 @@ public abstract class QuickAccessProvider { * @return this provider's elements */ public QuickAccessElement[] getElements(String filter, IProgressMonitor monitor) { - return null; + return new QuickAccessElement[0]; } public QuickAccessElement[] getElementsSorted(String filter, IProgressMonitor monitor) { if (cacheSortedElements == null) { cacheSortedElements = getElements(); + if (cacheSortedElements == null) { + cacheSortedElements = new QuickAccessElement[0]; + } Arrays.sort(cacheSortedElements, Comparator.comparing(QuickAccessElement::getSortLabel)); } if (filter == null) { @@ -100,10 +103,12 @@ public abstract class QuickAccessProvider { * Returns the element for the given ID if available, or null if no matching * element is available. * - * @param id the ID of an element + * @param id the ID of an element + * @param filterText optional, user filter that was used to find this element + * first. May be null. * @return the element with the given ID, or null if not found. */ - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { if (id == null) { return null; } @@ -145,4 +150,5 @@ public abstract class QuickAccessProvider { public boolean requiresUiAccess() { return false; } + } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ActionProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ActionProvider.java index 4a378bb9b74..5350020126f 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ActionProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ActionProvider.java @@ -38,7 +38,7 @@ import org.eclipse.ui.quickaccess.QuickAccessElement; */ public class ActionProvider extends QuickAccessProvider { - private Map idToElement; + private Map<String, ActionElement> idToElement; @Override public String getId() { @@ -46,32 +46,31 @@ public class ActionProvider extends QuickAccessProvider { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { getElements(); - return (ActionElement) idToElement.get(id); + return idToElement.get(id); } @Override public QuickAccessElement[] getElements() { if (idToElement == null) { - idToElement = new HashMap(); + idToElement = new HashMap<>(); IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window instanceof WorkbenchWindow) { MenuManager menu = ((WorkbenchWindow) window).getMenuManager(); - Set result = new HashSet(); + Set<ActionContributionItem> result = new HashSet<>(); collectContributions(menu, result); - ActionContributionItem[] actions = (ActionContributionItem[]) result - .toArray(new ActionContributionItem[result.size()]); + ActionContributionItem[] actions = result.toArray(new ActionContributionItem[result.size()]); for (ActionContributionItem action : actions) { ActionElement actionElement = new ActionElement(action); idToElement.put(actionElement.getId(), actionElement); } } } - return (ActionElement[]) idToElement.values().toArray(new ActionElement[idToElement.values().size()]); + return idToElement.values().toArray(new ActionElement[idToElement.values().size()]); } - private void collectContributions(MenuManager menu, Set result) { + private void collectContributions(MenuManager menu, Set<ActionContributionItem> result) { for (IContributionItem item : menu.getItems()) { if (item instanceof SubContributionItem) { item = ((SubContributionItem) item).getInnerItem(); @@ -79,7 +78,7 @@ public class ActionProvider extends QuickAccessProvider { if (item instanceof MenuManager) { collectContributions((MenuManager) item, result); } else if (item instanceof ActionContributionItem && item.isEnabled()) { - result.add(item); + result.add((ActionContributionItem) item); } } } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/CommandProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/CommandProvider.java index e9023e251ac..fb527c6f9a9 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/CommandProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/CommandProvider.java @@ -69,7 +69,7 @@ public class CommandProvider extends QuickAccessProvider { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { retrieveCommand(id); return idToCommand.get(id); } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/EditorProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/EditorProvider.java index 89dff69b738..addb41419ac 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/EditorProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/EditorProvider.java @@ -32,18 +32,18 @@ import org.eclipse.ui.quickaccess.QuickAccessElement; */ public class EditorProvider extends QuickAccessProvider { - private Map idToElement; + private Map<String, EditorElement> idToElement; @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { getElements(); - return (EditorElement) idToElement.get(id); + return idToElement.get(id); } @Override public QuickAccessElement[] getElements() { if (idToElement == null) { - idToElement = new HashMap(); + idToElement = new HashMap<>(); IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); if (activePage == null) { return new QuickAccessElement[0]; @@ -53,7 +53,7 @@ public class EditorProvider extends QuickAccessProvider { idToElement.put(editorElement.getId(), editorElement); } } - return (QuickAccessElement[]) idToElement.values().toArray(new QuickAccessElement[idToElement.values().size()]); + return idToElement.values().toArray(new QuickAccessElement[idToElement.values().size()]); } @Override diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PerspectiveProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PerspectiveProvider.java index 52ea4bfe5e9..9f60e643b03 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PerspectiveProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PerspectiveProvider.java @@ -42,7 +42,7 @@ public class PerspectiveProvider extends QuickAccessProvider { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { getElements(); return idToElement.get(id); } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PreferenceProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PreferenceProvider.java index ea8fecb706f..b405a1107aa 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PreferenceProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PreferenceProvider.java @@ -44,7 +44,7 @@ public class PreferenceProvider extends QuickAccessProvider { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { getElements(); return idToElement.get(id); } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PropertiesProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PropertiesProvider.java index 853292ca7ba..b23376149b0 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PropertiesProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/PropertiesProvider.java @@ -15,7 +15,6 @@ package org.eclipse.ui.internal.quickaccess.providers; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.eclipse.jface.preference.IPreferenceNode; import org.eclipse.jface.preference.PreferenceManager; @@ -38,18 +37,18 @@ import org.eclipse.ui.quickaccess.QuickAccessElement; */ public class PropertiesProvider extends QuickAccessProvider { - private Map idToElement; + private Map<String, PropertiesElement> idToElement; @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filterText) { getElements(); - return (PropertiesElement) idToElement.get(id); + return idToElement.get(id); } @Override public QuickAccessElement[] getElements() { if (idToElement == null) { - idToElement = new HashMap(); + idToElement = new HashMap<>(); IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); if (activePage != null) { PropertyPageManager pageManager = new PropertyPageManager(); @@ -57,16 +56,14 @@ public class PropertiesProvider extends QuickAccessProvider { if (selection instanceof IStructuredSelection && !selection.isEmpty()) { Object element = ((IStructuredSelection) selection).getFirstElement(); PropertyPageContributorManager.getManager().contribute(pageManager, element); - List list = pageManager.getElements(PreferenceManager.PRE_ORDER); - IPreferenceNode[] properties = (IPreferenceNode[]) list.toArray(new IPreferenceNode[list.size()]); - for (IPreferenceNode property : properties) { + for (IPreferenceNode property : pageManager.getElements(PreferenceManager.PRE_ORDER)) { PropertiesElement propertiesElement = new PropertiesElement(element, property); idToElement.put(propertiesElement.getId(), propertiesElement); } } } } - return (QuickAccessElement[]) idToElement.values().toArray(new QuickAccessElement[idToElement.values().size()]); + return idToElement.values().toArray(new QuickAccessElement[idToElement.values().size()]); } @Override diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ViewProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ViewProvider.java index 0e49de1d1b6..94f4b91c60b 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ViewProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/ViewProvider.java @@ -58,7 +58,7 @@ public class ViewProvider extends QuickAccessProvider { } @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filter) { getElements(); return idToElement.get(id); } diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/WizardProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/WizardProvider.java index c43e151eb35..8aef983f541 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/WizardProvider.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/quickaccess/providers/WizardProvider.java @@ -41,7 +41,7 @@ public class WizardProvider extends QuickAccessProvider { private Map<String, WizardElement> idToElement = new HashMap<>(); @Override - public QuickAccessElement getElementForId(String id) { + public QuickAccessElement findElement(String id, String filter) { getElements(); return idToElement.get(id); } |