Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2020-03-02 07:18:35 +0000
committerAndrey Loskutov2020-03-14 20:13:42 +0000
commitb7564aa1baedc14b7ca0b8204cb34aa2e3585c3c (patch)
tree040083ad4323692a2cca7fe95d2c2f3dd6228a1c
parent4c5f597747ad676c4d5700bf686e52a6f17c090f (diff)
downloadeclipse.jdt.ui-b7564aa1baedc14b7ca0b8204cb34aa2e3585c3c.tar.gz
eclipse.jdt.ui-b7564aa1baedc14b7ca0b8204cb34aa2e3585c3c.tar.xz
eclipse.jdt.ui-b7564aa1baedc14b7ca0b8204cb34aa2e3585c3c.zip
Bug 551676 - get rid of duplicated code in working set actionsI20200314-1800
Preparation for original fix - lot of duplicated code makes it hard to refactor. Change-Id: Id512969fa3bf740acd82925d03167c4b047bdd67 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java37
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java34
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java27
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java27
4 files changed, 59 insertions, 66 deletions
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java
index 9f10664d7c..9c32493d98 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindAction.java
@@ -17,6 +17,7 @@ import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
@@ -29,6 +30,7 @@ import org.eclipse.jface.window.Window;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IWorkbenchSite;
+import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.progress.IProgressService;
@@ -358,12 +360,47 @@ public abstract class FindAction extends SelectionDispatchAction {
* @throws InterruptedException thrown when the user interrupted the query selection
*/
QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
+ return createDefaultQuery(element);
+ }
+
+ QuerySpecification createDefaultQuery(IJavaElement element) {
JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
IJavaSearchScope scope= factory.createWorkspaceScope(true);
String description= factory.getWorkspaceScopeDescription(true);
return new ElementQuerySpecification(element, getLimitTo(), scope, description);
}
+ /**
+ * @param element non null
+ * @param action non null
+ * @param toUpdate working sets array reference that will be updated in this method
+ * @return {@link QuerySpecification} for given object and action, that depends on action state
+ * @throws InterruptedException if working sets query fail
+ */
+ static QuerySpecification createQueryWithWorkingSets(IJavaElement element, FindAction action, AtomicReference<IWorkingSet[]> toUpdate) throws InterruptedException {
+ JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
+
+ final IWorkingSet[] workingSets;
+ if (toUpdate.get() == null && action.isFirstElement()) {
+ workingSets= factory.queryWorkingSets();
+ if (workingSets == null) {
+ return action.createDefaultQuery(element); // workspace
+ }
+ if (action.isMultiSelect()) {
+ toUpdate.set(workingSets);
+ }
+ } else if (action.isMultiSelect() && action.isLastElement()) {
+ workingSets = toUpdate.get();
+ toUpdate.set(null);
+ } else {
+ workingSets = toUpdate.get();
+ }
+ SearchUtil.updateLRUWorkingSets(workingSets);
+ IJavaSearchScope scope= factory.createJavaSearchScope(workingSets, JavaSearchScopeFactory.NO_PROJ);
+ String description= factory.getWorkingSetScopeDescription(workingSets, JavaSearchScopeFactory.NO_PROJ);
+ return new ElementQuerySpecification(element, action.getLimitTo(), scope, description);
+ }
+
abstract int getLimitTo();
IType getType(IJavaElement element) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java
index a302fb3274..d3181ffddd 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindDeclarationsInWorkingSetAction.java
@@ -13,23 +13,21 @@
*******************************************************************************/
package org.eclipse.jdt.ui.actions;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.ui.search.ElementQuerySpecification;
import org.eclipse.jdt.ui.search.QuerySpecification;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
-import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
import org.eclipse.jdt.internal.ui.search.SearchMessages;
-import org.eclipse.jdt.internal.ui.search.SearchUtil;
/**
* Finds declarations of the selected element in working sets.
@@ -45,7 +43,7 @@ import org.eclipse.jdt.internal.ui.search.SearchUtil;
*/
public class FindDeclarationsInWorkingSetAction extends FindDeclarationsAction {
- private IWorkingSet[] fWorkingSet;
+ private IWorkingSet[] fWorkingSets;
/**
* Creates a new <code>FindDeclarationsInWorkingSetAction</code>. The action
@@ -69,7 +67,7 @@ public class FindDeclarationsInWorkingSetAction extends FindDeclarationsAction {
*/
public FindDeclarationsInWorkingSetAction(IWorkbenchSite site, IWorkingSet[] workingSets) {
super(site);
- fWorkingSet= workingSets;
+ fWorkingSets= workingSets;
}
/**
@@ -92,7 +90,7 @@ public class FindDeclarationsInWorkingSetAction extends FindDeclarationsAction {
*/
public FindDeclarationsInWorkingSetAction(JavaEditor editor, IWorkingSet[] workingSets) {
super(editor);
- fWorkingSet= workingSets;
+ fWorkingSets= workingSets;
}
@Override
@@ -103,25 +101,13 @@ public class FindDeclarationsInWorkingSetAction extends FindDeclarationsAction {
PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.FIND_DECLARATIONS_IN_WORKING_SET_ACTION);
}
+
@Override
QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
- JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
-
- IWorkingSet[] workingSets= fWorkingSet;
- if (fWorkingSet == null && isFirstElement()) {
- workingSets= factory.queryWorkingSets();
- if (workingSets == null)
- return super.createQuery(element); // in workspace
- if (isMultiSelect()) {
- fWorkingSet= workingSets;
- }
- } else if (isMultiSelect() && isLastElement()) {
- fWorkingSet= null;
- }
- SearchUtil.updateLRUWorkingSets(workingSets);
- IJavaSearchScope scope= factory.createJavaSearchScope(workingSets, JavaSearchScopeFactory.NO_PROJ);
- String description= factory.getWorkingSetScopeDescription(workingSets, JavaSearchScopeFactory.NO_PROJ);
- return new ElementQuerySpecification(element, getLimitTo(), scope, description);
+ AtomicReference<IWorkingSet[]> toUpdate = new AtomicReference<>(fWorkingSets);
+ QuerySpecification query = createQueryWithWorkingSets(element, this, toUpdate);
+ fWorkingSets = toUpdate.get();
+ return query;
}
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java
index c1c2163a6a..4e17636301 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindImplementorsInWorkingSetAction.java
@@ -13,23 +13,21 @@
*******************************************************************************/
package org.eclipse.jdt.ui.actions;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.ui.search.ElementQuerySpecification;
import org.eclipse.jdt.ui.search.QuerySpecification;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
-import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
import org.eclipse.jdt.internal.ui.search.SearchMessages;
-import org.eclipse.jdt.internal.ui.search.SearchUtil;
/**
* Finds implementors of the selected element in working sets.
@@ -104,23 +102,10 @@ public class FindImplementorsInWorkingSetAction extends FindImplementorsAction {
@Override
QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
- JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
-
- IWorkingSet[] workingSets= fWorkingSets;
- if (fWorkingSets == null && isFirstElement()) {
- workingSets= factory.queryWorkingSets();
- if (workingSets == null)
- return super.createQuery(element); // workspace
- if (isMultiSelect()) {
- fWorkingSets= workingSets;
- }
- } else if (isMultiSelect() && isLastElement()) {
- fWorkingSets= null;
- }
- SearchUtil.updateLRUWorkingSets(workingSets);
- IJavaSearchScope scope= factory.createJavaSearchScope(workingSets, JavaSearchScopeFactory.NO_PROJ);
- String description= factory.getWorkingSetScopeDescription(workingSets, JavaSearchScopeFactory.NO_PROJ);
- return new ElementQuerySpecification(element, getLimitTo(), scope, description);
+ AtomicReference<IWorkingSet[]> toUpdate = new AtomicReference<>(fWorkingSets);
+ QuerySpecification query = createQueryWithWorkingSets(element, this, toUpdate);
+ fWorkingSets = toUpdate.get();
+ return query;
}
}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java
index ade9d586a4..ee7581a8c4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindReferencesInWorkingSetAction.java
@@ -13,23 +13,21 @@
*******************************************************************************/
package org.eclipse.jdt.ui.actions;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.ui.search.ElementQuerySpecification;
import org.eclipse.jdt.ui.search.QuerySpecification;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPluginImages;
import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
-import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
import org.eclipse.jdt.internal.ui.search.SearchMessages;
-import org.eclipse.jdt.internal.ui.search.SearchUtil;
/**
@@ -105,22 +103,9 @@ public class FindReferencesInWorkingSetAction extends FindReferencesAction {
@Override
QuerySpecification createQuery(IJavaElement element) throws JavaModelException, InterruptedException {
- JavaSearchScopeFactory factory= JavaSearchScopeFactory.getInstance();
-
- IWorkingSet[] workingSets= fWorkingSets;
- if (fWorkingSets == null && isFirstElement()) {
- workingSets= factory.queryWorkingSets();
- if (workingSets == null)
- return super.createQuery(element); // in workspace
- if (isMultiSelect()) {
- fWorkingSets= workingSets;
- }
- } else if (isMultiSelect() && isLastElement()) {
- fWorkingSets= null;
- }
- SearchUtil.updateLRUWorkingSets(workingSets);
- IJavaSearchScope scope= factory.createJavaSearchScope(workingSets, JavaSearchScopeFactory.NO_PROJ);
- String description= factory.getWorkingSetScopeDescription(workingSets, JavaSearchScopeFactory.NO_PROJ);
- return new ElementQuerySpecification(element, getLimitTo(), scope, description);
+ AtomicReference<IWorkingSet[]> toUpdate = new AtomicReference<>(fWorkingSets);
+ QuerySpecification query = createQueryWithWorkingSets(element, this, toUpdate);
+ fWorkingSets = toUpdate.get();
+ return query;
}
}

Back to the top