diff options
author | Mickael Istria | 2019-09-23 15:32:04 +0000 |
---|---|---|
committer | Mickael Istria | 2019-10-14 08:21:43 +0000 |
commit | 4252e53c7d5373092cacd6128d39cea35618b21e (patch) | |
tree | 38a03a903b151cb8714f96a0ec2ddbab607284d3 | |
parent | 8df6b9afc574d825dba07a5c9d1019c7cef88929 (diff) | |
download | eclipse.platform.text-4252e53c7d5373092cacd6128d39cea35618b21e.tar.gz eclipse.platform.text-4252e53c7d5373092cacd6128d39cea35618b21e.tar.xz eclipse.platform.text-4252e53c7d5373092cacd6128d39cea35618b21e.zip |
Bug 551970 - Quick Test Search directly in Find Actions/Ctrl+3
Change-Id: I6d1f08938fc1a0903349f8d93fe19f9a0a399bb8
Signed-off-by: Mickael Istria <mistria@redhat.com>
6 files changed, 131 insertions, 2 deletions
diff --git a/org.eclipse.text.quicksearch/plugin.properties b/org.eclipse.text.quicksearch/plugin.properties index 35b84c91817..1e5d5466c06 100644 --- a/org.eclipse.text.quicksearch/plugin.properties +++ b/org.eclipse.text.quicksearch/plugin.properties @@ -17,3 +17,4 @@ searchMenu.label= Se&arch quickSearch.label= Quick Search quickSearch.ellipsis= &Quick Search... quickSearch.tooltip=Search for a text pattern in the workspace +quickAccess.category.label=File content diff --git a/org.eclipse.text.quicksearch/plugin.xml b/org.eclipse.text.quicksearch/plugin.xml index c46b2c7f73e..40f76acfad9 100644 --- a/org.eclipse.text.quicksearch/plugin.xml +++ b/org.eclipse.text.quicksearch/plugin.xml @@ -107,5 +107,13 @@ name="%quickSearch.label"> </page> </extension> + <extension + point="org.eclipse.ui.quickAccess"> + <computer + class="org.eclipse.text.quicksearch.internal.ui.QuickSearchQuickAccessComputer" + name="%quickAccess.category.label" + requiresUIAccess="false"> + </computer> + </extension> </plugin> diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/core/QuickTextSearcher.java b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/core/QuickTextSearcher.java index 2fd13aab36f..0fc64840e19 100644 --- a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/core/QuickTextSearcher.java +++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/core/QuickTextSearcher.java @@ -308,7 +308,7 @@ public class QuickTextSearcher { //Walker can be null if job was canceled because dialog closed. But stuff like //the job that shows 'Searching ...' doesn't instantly stop and may still //be asking the incremental update job whether its done. - return walker!=null && walker.isDone(); + return /*(incrementalUpdate != null && incrementalUpdate.getState() != Job.NONE) ||*/ (walker!=null && walker.isDone()); } public void requestMoreResults() { diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java index 7f92dfc60d1..7a22ba63d70 100644 --- a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java +++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/Messages.java @@ -40,6 +40,7 @@ public class Messages extends NLS { public static String QuickSearchDialog_caseInsensitive_label; public static String QuickSearchDialog_patternHint; public static String QuickTextSearch_updateMatchesJob; + public static String quickAccessMatch; static { // initialize resource bundle diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchQuickAccessComputer.java b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchQuickAccessComputer.java new file mode 100644 index 00000000000..96ca299a927 --- /dev/null +++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/QuickSearchQuickAccessComputer.java @@ -0,0 +1,118 @@ +/******************************************************************************* + * Copyright (c) 2019 Red Hat Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package org.eclipse.text.quicksearch.internal.ui; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.text.TextSelection; +import org.eclipse.osgi.util.NLS; +import org.eclipse.text.quicksearch.internal.core.LineItem; +import org.eclipse.text.quicksearch.internal.core.QuickTextQuery; +import org.eclipse.text.quicksearch.internal.core.QuickTextSearchRequestor; +import org.eclipse.text.quicksearch.internal.core.QuickTextSearcher; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.ide.IDE; +import org.eclipse.ui.quickaccess.IQuickAccessComputer; +import org.eclipse.ui.quickaccess.IQuickAccessComputerExtension; +import org.eclipse.ui.quickaccess.QuickAccessElement; +import org.eclipse.ui.texteditor.ITextEditor; + +public class QuickSearchQuickAccessComputer extends QuickTextSearchRequestor implements IQuickAccessComputer, IQuickAccessComputerExtension { + + private static final int MAX_ENTRIES = 20; + private QuickSearchContext context; + + public QuickSearchQuickAccessComputer() { + context = new QuickSearchContext(PlatformUI.getWorkbench().getActiveWorkbenchWindow()); + } + + @Override public QuickAccessElement[] computeElements(String query, IProgressMonitor monitor) { + List<LineItem> matches = Collections.synchronizedList(new ArrayList<>()); + QuickTextSearcher searcher = new QuickTextSearcher(new QuickTextQuery("", false), context.createPriorityFun(), 100, new QuickTextSearchRequestor() { //$NON-NLS-1$ + @Override public void add(LineItem match) { + matches.add(match); + } + + @Override public void clear() { + matches.clear(); + } + + @Override public void revoke(LineItem line) { + matches.remove(line); + } + }); + searcher.setMaxResults(MAX_ENTRIES); + searcher.setQuery(new QuickTextQuery(query, false), true); + long start = System.currentTimeMillis(); + while (matches.size() < 20 && !searcher.isDone() && System.currentTimeMillis() - start < 3000) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + QuickSearchActivator.log(e); + } + } + searcher.cancel(); + return matches.stream().map(LineItemQuickAccessElement::new).toArray(QuickAccessElement[]::new); + } + + @Override public QuickAccessElement[] computeElements() { + return new QuickAccessElement[0]; + } + + @Override public void resetState() { + // stateless + + } + + @Override public boolean needsRefresh() { + return false; + } + + private class LineItemQuickAccessElement extends QuickAccessElement { + + private final LineItem item; + + public LineItemQuickAccessElement(LineItem item) { + this.item = item; + } + + @Override public String getLabel() { + return NLS.bind(Messages.quickAccessMatch, item.getText(), item.getFile().getName()); + } + + @Override public ImageDescriptor getImageDescriptor() { + return null; + } + + @Override public String getId() { + return item.getFile().getFullPath().toString() + '[' + item.getOffset() + ':' + (item.getOffset() + item.getText().length() - 1) + ']'; + } + + @Override public void execute() { + IEditorPart part; + try { + part = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), item.getFile()); + if (part instanceof ITextEditor) { + ((ITextEditor) part).getSelectionProvider().setSelection(new TextSelection(item.getOffset(), item.getText().length())); + } + } catch (PartInitException e) { + QuickSearchActivator.log(e); + } + } + + } + +} diff --git a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties index 5b5c8f768ae..7166b95d725 100644 --- a/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties +++ b/org.eclipse.text.quicksearch/src/org/eclipse/text/quicksearch/internal/ui/messages.properties @@ -21,4 +21,5 @@ QuickSearchDialog_title=Quick Search QuickSearchDialog_caseSensitive_label=Case SENSITIVE QuickSearchDialog_caseInsensitive_label=Case INSENSITIVE QuickSearchDialog_patternHint=&Pattern (? = any character, * = any string) -QuickTextSearch_updateMatchesJob=Update matches
\ No newline at end of file +QuickTextSearch_updateMatchesJob=Update matches +quickAccessMatch=`{0}` in {1}
\ No newline at end of file |