1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-15 12:15:47 +02:00

Fix for Bug 72816: Selection Search For Working Set does not always bring up dialog

This commit is contained in:
Bogdan Gheorghe 2004-09-02 15:37:05 +00:00
parent b3e82309c9
commit 9e0823e2e8
8 changed files with 288 additions and 21 deletions

View file

@ -1,3 +1,15 @@
2004-09-02 Bogdan Gheorghe
Fix for 72816: [Search] Selection Search For Working Set
* src/org/eclipse/cdt/internal/ui/search/CSearchUtil.java
* src/org/eclipse/cdt/internal/ui/search/LRUWorkingSets.java
* src/org/eclipse/cdt/internal/ui/search/actions/DeclarationsSearchGroup.java
* src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsInWorkingSetAction.java
* src/org/eclipse/cdt/internal/ui/search/actions/FindRefsInWorkingSetAction.java
* src/org/eclipse/cdt/internal/ui/search/actions/ReferencesSearchGroup.java
* src/org/eclipse/cdt/internal/ui/search/actions/WorkingSetFindAction.java
2004-09-01 Alain Magloire 2004-09-01 Alain Magloire
Deal with the fact that elements can come Deal with the fact that elements can come

View file

@ -39,6 +39,9 @@ import org.eclipse.ui.IWorkingSet;
*/ */
public class CSearchUtil { public class CSearchUtil {
public static int LRU_WORKINGSET_LIST_SIZE= 3;
private static LRUWorkingSets workingSetsCache;
/** /**
* *
*/ */
@ -50,11 +53,20 @@ public class CSearchUtil {
/** /**
* @param sets * @param sets
*/ */
public static void updateLRUWorkingSets(IWorkingSet[] sets) { public static void updateLRUWorkingSets(IWorkingSet[] workingSets) {
// TODO Auto-generated method stub if (workingSets == null || workingSets.length < 1)
return;
CSearchUtil.getLRUWorkingSets().add(workingSets);
} }
public static LRUWorkingSets getLRUWorkingSets() {
if (CSearchUtil.workingSetsCache == null) {
CSearchUtil.workingSetsCache = new LRUWorkingSets(CSearchUtil.LRU_WORKINGSET_LIST_SIZE);
}
return CSearchUtil.workingSetsCache;
}
/** /**
* @param object * @param object
* @param shell * @param shell
@ -63,12 +75,11 @@ public class CSearchUtil {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
/** /**
* @param workingSets * @param workingSets
* @return * @return
*/ */
public static Object toString(IWorkingSet[] workingSets) { public static String toString(IWorkingSet[] workingSets) {
if( workingSets != null & workingSets.length > 0 ){ if( workingSets != null & workingSets.length > 0 ){
String string = new String(); String string = new String();
for( int i = 0; i < workingSets.length; i++ ){ for( int i = 0; i < workingSets.length; i++ ){
@ -83,6 +94,7 @@ public class CSearchUtil {
return null; return null;
} }
/** /**
* @param marker * @param marker
* @return * @return

View file

@ -0,0 +1,84 @@
/*
* Created on Aug 30, 2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.eclipse.cdt.internal.ui.search;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
/**
* @author bgheorgh
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class LRUWorkingSets {
ArrayList workingSetsCache = null;
int size=0;
public LRUWorkingSets(int size){
workingSetsCache = new ArrayList(size);
this.size = size;
}
public void add(IWorkingSet[] workingSet){
cleanUpCache();
//See if this working set has been previously added to the
IWorkingSet[] existingWorkingSets= find(workingSetsCache, workingSet);
if (existingWorkingSets != null)
workingSetsCache.remove(existingWorkingSets);
else if (workingSetsCache.size() == size)
workingSetsCache.remove(size - 1);
workingSetsCache.add(0, workingSet);
}
/**
* @param workingSetsCache2
* @param workingSet
* @return
*/
private IWorkingSet[] find(ArrayList list, IWorkingSet[] workingSet) {
Set workingSetList= new HashSet(Arrays.asList(workingSet));
Iterator iter= list.iterator();
while (iter.hasNext()) {
IWorkingSet[] lruWorkingSets= (IWorkingSet[])iter.next();
Set lruWorkingSetList= new HashSet(Arrays.asList(lruWorkingSets));
if (lruWorkingSetList.equals(workingSetList))
return lruWorkingSets;
}
return null;
}
private void cleanUpCache(){
//Remove any previously deleted entries
Iterator iter = workingSetsCache.iterator();
while (iter.hasNext()){
IWorkingSet[] workingSet = (IWorkingSet []) iter.next();
for (int i= 0; i < workingSet.length; i++) {
if (PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(workingSet[i].getName()) == null) {
workingSetsCache.remove(workingSet);
break;
}
}
}
}
/**
* @return
*/
public Iterator iterator() {
return workingSetsCache.iterator();
}
}

View file

@ -11,12 +11,15 @@
package org.eclipse.cdt.internal.ui.search.actions; package org.eclipse.cdt.internal.ui.search.actions;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds;
import org.eclipse.cdt.internal.ui.search.CSearchMessages; import org.eclipse.cdt.internal.ui.search.CSearchMessages;
import org.eclipse.cdt.internal.ui.search.CSearchUtil;
import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextSelection;
@ -24,6 +27,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.search.ui.IContextMenuConstants; import org.eclipse.search.ui.IContextMenuConstants;
import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.texteditor.ITextEditorActionConstants;
@ -31,13 +35,17 @@ import org.eclipse.ui.texteditor.ITextEditorActionConstants;
public class DeclarationsSearchGroup extends ActionGroup { public class DeclarationsSearchGroup extends ActionGroup {
private CEditor fEditor; private CEditor fEditor;
private IWorkbenchSite fSite;
private FindDeclarationsAction fFindDeclarationsAction; private FindDeclarationsAction fFindDeclarationsAction;
private FindDeclarationsInWorkingSetAction fFindDeclarationsInWorkingSetAction; private FindDeclarationsInWorkingSetAction fFindDeclarationsInWorkingSetAction;
private ArrayList actions;
public DeclarationsSearchGroup(IWorkbenchSite site) { public DeclarationsSearchGroup(IWorkbenchSite site) {
fFindDeclarationsAction= new FindDeclarationsAction(site); fFindDeclarationsAction= new FindDeclarationsAction(site);
fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(site); fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(site,null);
fSite = site;
} }
/** /**
* @param editor * @param editor
@ -50,7 +58,7 @@ public class DeclarationsSearchGroup extends ActionGroup {
if (editor != null){ if (editor != null){
editor.setAction(ICEditorActionDefinitionIds.FIND_DECL, fFindDeclarationsAction); editor.setAction(ICEditorActionDefinitionIds.FIND_DECL, fFindDeclarationsAction);
} }
fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(editor); fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(editor,null);
} }
/* /*
* Method declared on ActionGroup. * Method declared on ActionGroup.
@ -69,10 +77,35 @@ public class DeclarationsSearchGroup extends ActionGroup {
incomingMenu.add(declarationsMenu); incomingMenu.add(declarationsMenu);
incomingMenu = declarationsMenu; incomingMenu = declarationsMenu;
FindAction[] actions = getWorkingSetActions();
incomingMenu.add(fFindDeclarationsAction); incomingMenu.add(fFindDeclarationsAction);
incomingMenu.add(fFindDeclarationsInWorkingSetAction); incomingMenu.add(fFindDeclarationsInWorkingSetAction);
for (int i=0; i<actions.length; i++){
incomingMenu.add(actions[i]);
}
} }
/**
* @return
*/
private FindAction[] getWorkingSetActions() {
ArrayList actions= new ArrayList(CSearchUtil.LRU_WORKINGSET_LIST_SIZE);
Iterator iter= CSearchUtil.getLRUWorkingSets().iterator();
while (iter.hasNext()) {
IWorkingSet[] workingSets= (IWorkingSet[])iter.next();
FindAction action;
if (fEditor != null)
action= new WorkingSetFindAction(fEditor, new FindDeclarationsInWorkingSetAction(fEditor, workingSets), CSearchUtil.toString(workingSets));
else
action= new WorkingSetFindAction(fSite, new FindDeclarationsInWorkingSetAction(fSite, workingSets), CSearchUtil.toString(workingSets));
actions.add(action);
}
return (FindAction[])actions.toArray(new FindAction[actions.size()]);
}
public static boolean canActionBeAdded(ISelection selection) { public static boolean canActionBeAdded(ISelection selection) {
if(selection instanceof ITextSelection) { if(selection instanceof ITextSelection) {
return (((ITextSelection)selection).getLength() > 0); return (((ITextSelection)selection).getLength() > 0);

View file

@ -23,23 +23,29 @@ import org.eclipse.ui.IWorkingSet;
public class FindDeclarationsInWorkingSetAction extends FindAction { public class FindDeclarationsInWorkingSetAction extends FindAction {
private IWorkingSet[] fWorkingSet; private IWorkingSet[] fWorkingSet;
private String scopeDescription = "";
/** /**
* @param site * @param site
*/ */
public FindDeclarationsInWorkingSetAction(IWorkbenchSite site) { public FindDeclarationsInWorkingSetAction(IWorkbenchSite site, IWorkingSet[] wset) {
this(site, this(site,
CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.label"), //$NON-NLS-1$
CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.tooltip")); //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.tooltip")); //$NON-NLS-1$
if (wset != null)
fWorkingSet = wset;
} }
/** /**
* @param editor * @param editor
*/ */
public FindDeclarationsInWorkingSetAction(CEditor editor) { public FindDeclarationsInWorkingSetAction(CEditor editor, IWorkingSet[] wset) {
this(editor, this(editor,
CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.label"), //$NON-NLS-1$
CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.tooltip")); //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.tooltip")); //$NON-NLS-1$
if (wset != null)
fWorkingSet = wset;
} }
public FindDeclarationsInWorkingSetAction(CEditor editor, String label, String tooltip){ public FindDeclarationsInWorkingSetAction(CEditor editor, String label, String tooltip){
@ -62,21 +68,23 @@ public class FindDeclarationsInWorkingSetAction extends FindAction {
* @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScopeDescription() * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScopeDescription()
*/ */
protected String getScopeDescription() { protected String getScopeDescription() {
return CSearchMessages.getFormattedString("WorkingSetScope", CSearchUtil.toString(fWorkingSet)); //$NON-NLS-1$ return scopeDescription;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScope() * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScope()
*/ */
protected ICSearchScope getScope() { protected ICSearchScope getScope() {
// IWorkingSet[] workingSets= null;
IWorkingSet[] workingSets= fWorkingSet;
if (fWorkingSet == null) { if (fWorkingSet == null) {
workingSets= CSearchScopeFactory.getInstance().queryWorkingSets(); workingSets= CSearchScopeFactory.getInstance().queryWorkingSets();
if (workingSets == null) if (workingSets == null)
return null; return null;
fWorkingSet = workingSets; }
else {
workingSets = fWorkingSet;
} }
ICSearchScope scope= CSearchScopeFactory.getInstance().createCSearchScope(workingSets); ICSearchScope scope= CSearchScopeFactory.getInstance().createCSearchScope(workingSets);
scopeDescription = CSearchMessages.getFormattedString("WorkingSetScope", new String[] {CSearchUtil.toString(workingSets)}); //$NON-NLS-1$
CSearchUtil.updateLRUWorkingSets(workingSets); CSearchUtil.updateLRUWorkingSets(workingSets);
return scope; return scope;

View file

@ -22,16 +22,25 @@ import org.eclipse.ui.IWorkingSet;
public class FindRefsInWorkingSetAction extends FindAction { public class FindRefsInWorkingSetAction extends FindAction {
public FindRefsInWorkingSetAction(CEditor editor) { private IWorkingSet[] fWorkingSet;
private String scopeDescription = "";
public FindRefsInWorkingSetAction(CEditor editor, IWorkingSet[] workingSets) {
this(editor, this(editor,
CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.label"), //$NON-NLS-1$
CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.tooltip")); //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.tooltip")); //$NON-NLS-1$
if (workingSets != null)
fWorkingSet = workingSets;
} }
public FindRefsInWorkingSetAction(IWorkbenchSite site){ public FindRefsInWorkingSetAction(IWorkbenchSite site, IWorkingSet[] workingSets){
this(site, this(site,
CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.label"), //$NON-NLS-1$
CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.tooltip")); //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.tooltip")); //$NON-NLS-1$
if (workingSets != null)
fWorkingSet= workingSets;
} }
/** /**
* @param editor * @param editor
@ -65,24 +74,27 @@ public class FindRefsInWorkingSetAction extends FindAction {
* @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScopeDescription() * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScopeDescription()
*/ */
protected String getScopeDescription() { protected String getScopeDescription() {
return CSearchMessages.getFormattedString("WorkingSetScope", CSearchUtil.toString(fWorkingSet)); //$NON-NLS-1$ return scopeDescription;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScope() * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScope()
*/ */
protected ICSearchScope getScope() { protected ICSearchScope getScope() {
IWorkingSet[] workingSets= fWorkingSet; IWorkingSet[] workingSets= null;
if (fWorkingSet == null) { if (fWorkingSet == null) {
workingSets= CSearchScopeFactory.getInstance().queryWorkingSets(); workingSets= CSearchScopeFactory.getInstance().queryWorkingSets();
if (workingSets == null) if (workingSets == null)
return null; return null;
fWorkingSet = workingSets;
} }
else {
workingSets = fWorkingSet;
}
ICSearchScope scope= CSearchScopeFactory.getInstance().createCSearchScope(workingSets); ICSearchScope scope= CSearchScopeFactory.getInstance().createCSearchScope(workingSets);
scopeDescription = CSearchMessages.getFormattedString("WorkingSetScope", new String[] {CSearchUtil.toString(workingSets)}); //$NON-NLS-1$
CSearchUtil.updateLRUWorkingSets(workingSets); CSearchUtil.updateLRUWorkingSets(workingSets);
return scope; return scope;
} }
private IWorkingSet[] fWorkingSet;
} }

View file

@ -10,13 +10,18 @@
******************************************************************************/ ******************************************************************************/
package org.eclipse.cdt.internal.ui.search.actions; package org.eclipse.cdt.internal.ui.search.actions;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds;
import org.eclipse.cdt.internal.ui.search.CSearchMessages; import org.eclipse.cdt.internal.ui.search.CSearchMessages;
import org.eclipse.cdt.internal.ui.search.CSearchUtil;
import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.search.ui.IContextMenuConstants; import org.eclipse.search.ui.IContextMenuConstants;
import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.texteditor.ITextEditorActionConstants;
@ -28,9 +33,12 @@ public class ReferencesSearchGroup extends ActionGroup {
private CEditor fEditor; private CEditor fEditor;
private IWorkbenchSite fSite; private IWorkbenchSite fSite;
private ArrayList actions;
public ReferencesSearchGroup(IWorkbenchSite site) { public ReferencesSearchGroup(IWorkbenchSite site) {
fFindRefsAction= new FindRefsAction(site); fFindRefsAction= new FindRefsAction(site);
fFindRefsInWorkingSetAction = new FindRefsInWorkingSetAction(site); fFindRefsInWorkingSetAction = new FindRefsInWorkingSetAction(site, null);
fSite=site;
} }
/** /**
@ -44,7 +52,7 @@ public class ReferencesSearchGroup extends ActionGroup {
if (editor != null){ if (editor != null){
editor.setAction(ICEditorActionDefinitionIds.FIND_REFS, fFindRefsAction); editor.setAction(ICEditorActionDefinitionIds.FIND_REFS, fFindRefsAction);
} }
fFindRefsInWorkingSetAction = new FindRefsInWorkingSetAction(editor); fFindRefsInWorkingSetAction = new FindRefsInWorkingSetAction(editor, null);
} }
/* /*
@ -65,11 +73,37 @@ public class ReferencesSearchGroup extends ActionGroup {
incomingMenu.add(refsMenu); incomingMenu.add(refsMenu);
incomingMenu = refsMenu; incomingMenu = refsMenu;
FindAction[] actions = getWorkingSetActions();
incomingMenu.add(fFindRefsAction); incomingMenu.add(fFindRefsAction);
incomingMenu.add(fFindRefsInWorkingSetAction); incomingMenu.add(fFindRefsInWorkingSetAction);
for (int i=0; i<actions.length; i++){
incomingMenu.add(actions[i]);
}
} }
/**
* @return
*/
private FindAction[] getWorkingSetActions() {
ArrayList actions= new ArrayList(CSearchUtil.LRU_WORKINGSET_LIST_SIZE);
Iterator iter= CSearchUtil.getLRUWorkingSets().iterator();
while (iter.hasNext()) {
IWorkingSet[] workingSets= (IWorkingSet[])iter.next();
FindAction action;
if (fEditor != null)
action= new WorkingSetFindAction(fEditor, new FindRefsInWorkingSetAction(fEditor, workingSets), CSearchUtil.toString(workingSets));
else
action= new WorkingSetFindAction(fSite, new FindRefsInWorkingSetAction(fSite, workingSets), CSearchUtil.toString(workingSets));
actions.add(action);
}
return (FindAction[])actions.toArray(new FindAction[actions.size()]);
}
/* /*
* Overrides method declared in ActionGroup * Overrides method declared in ActionGroup
*/ */

View file

@ -0,0 +1,72 @@
/*
* Created on Aug 31, 2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.eclipse.cdt.internal.ui.search.actions;
import org.eclipse.cdt.core.search.ICSearchScope;
import org.eclipse.cdt.core.search.ICSearchConstants.LimitTo;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchSite;
public class WorkingSetFindAction extends FindAction {
private FindAction findAction;
public WorkingSetFindAction(CEditor editor, FindAction action, String string) {
super ( editor );
this.findAction = action;
setText(string); //$NON-NLS-1$
}
/**
* @param site
* @param action
* @param string
*/
public WorkingSetFindAction(IWorkbenchSite site,FindAction action, String string) {
super(site);
this.findAction = action;
setText(string); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.ui.search.actions.FindAction#getScopeDescription()
*/
protected String getScopeDescription() {
return findAction.getScopeDescription();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.ui.search.actions.FindAction#getScope()
*/
protected ICSearchScope getScope() {
// TODO Auto-generated method stub
return findAction.getScope();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.ui.search.actions.FindAction#getLimitTo()
*/
protected LimitTo getLimitTo() {
return findAction.getLimitTo();
}
public void run() {
ISelection sel = getSelection();
if (sel instanceof IStructuredSelection){
findAction.run((IStructuredSelection) sel);
}
else if (sel instanceof ITextSelection){
findAction.run((ITextSelection) sel);
}
}
}