diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index f6b789593e8..d3266eb935a 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -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 Deal with the fact that elements can come diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchUtil.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchUtil.java index fd7ac6ec234..88a53da7568 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchUtil.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchUtil.java @@ -39,6 +39,9 @@ import org.eclipse.ui.IWorkingSet; */ public class CSearchUtil { + public static int LRU_WORKINGSET_LIST_SIZE= 3; + private static LRUWorkingSets workingSetsCache; + /** * */ @@ -50,11 +53,20 @@ public class CSearchUtil { /** * @param sets */ - public static void updateLRUWorkingSets(IWorkingSet[] sets) { - // TODO Auto-generated method stub + public static void updateLRUWorkingSets(IWorkingSet[] workingSets) { + 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 shell @@ -63,12 +75,11 @@ public class CSearchUtil { // TODO Auto-generated method stub } - /** * @param workingSets * @return */ - public static Object toString(IWorkingSet[] workingSets) { + public static String toString(IWorkingSet[] workingSets) { if( workingSets != null & workingSets.length > 0 ){ String string = new String(); for( int i = 0; i < workingSets.length; i++ ){ @@ -83,6 +94,7 @@ public class CSearchUtil { return null; } + /** * @param marker * @return diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/LRUWorkingSets.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/LRUWorkingSets.java new file mode 100644 index 00000000000..10690b333be --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/LRUWorkingSets.java @@ -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(); + } +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/DeclarationsSearchGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/DeclarationsSearchGroup.java index 5770fbf40c7..e47de2dbc80 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/DeclarationsSearchGroup.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/DeclarationsSearchGroup.java @@ -11,12 +11,15 @@ package org.eclipse.cdt.internal.ui.search.actions; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.internal.ui.editor.CEditor; import org.eclipse.cdt.internal.ui.editor.ICEditorActionDefinitionIds; 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.MenuManager; 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.search.ui.IContextMenuConstants; import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.texteditor.ITextEditorActionConstants; @@ -31,13 +35,17 @@ import org.eclipse.ui.texteditor.ITextEditorActionConstants; public class DeclarationsSearchGroup extends ActionGroup { private CEditor fEditor; + private IWorkbenchSite fSite; private FindDeclarationsAction fFindDeclarationsAction; private FindDeclarationsInWorkingSetAction fFindDeclarationsInWorkingSetAction; + private ArrayList actions; + public DeclarationsSearchGroup(IWorkbenchSite site) { fFindDeclarationsAction= new FindDeclarationsAction(site); - fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(site); + fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(site,null); + fSite = site; } /** * @param editor @@ -50,7 +58,7 @@ public class DeclarationsSearchGroup extends ActionGroup { if (editor != null){ editor.setAction(ICEditorActionDefinitionIds.FIND_DECL, fFindDeclarationsAction); } - fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(editor); + fFindDeclarationsInWorkingSetAction = new FindDeclarationsInWorkingSetAction(editor,null); } /* * Method declared on ActionGroup. @@ -69,10 +77,35 @@ public class DeclarationsSearchGroup extends ActionGroup { incomingMenu.add(declarationsMenu); incomingMenu = declarationsMenu; + FindAction[] actions = getWorkingSetActions(); incomingMenu.add(fFindDeclarationsAction); incomingMenu.add(fFindDeclarationsInWorkingSetAction); + + for (int i=0; i 0); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsInWorkingSetAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsInWorkingSetAction.java index 67e671d92cb..8220abbbddf 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsInWorkingSetAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsInWorkingSetAction.java @@ -23,23 +23,29 @@ import org.eclipse.ui.IWorkingSet; public class FindDeclarationsInWorkingSetAction extends FindAction { private IWorkingSet[] fWorkingSet; - + private String scopeDescription = ""; /** * @param site */ - public FindDeclarationsInWorkingSetAction(IWorkbenchSite site) { + public FindDeclarationsInWorkingSetAction(IWorkbenchSite site, IWorkingSet[] wset) { this(site, CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.tooltip")); //$NON-NLS-1$ + + if (wset != null) + fWorkingSet = wset; } /** * @param editor */ - public FindDeclarationsInWorkingSetAction(CEditor editor) { + public FindDeclarationsInWorkingSetAction(CEditor editor, IWorkingSet[] wset) { this(editor, CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindDeclarationsInWorkingSetAction.tooltip")); //$NON-NLS-1$ + + if (wset != null) + fWorkingSet = wset; } 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() */ protected String getScopeDescription() { - return CSearchMessages.getFormattedString("WorkingSetScope", CSearchUtil.toString(fWorkingSet)); //$NON-NLS-1$ + return scopeDescription; } /* (non-Javadoc) * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScope() */ protected ICSearchScope getScope() { - // - IWorkingSet[] workingSets= fWorkingSet; + IWorkingSet[] workingSets= null; if (fWorkingSet == null) { workingSets= CSearchScopeFactory.getInstance().queryWorkingSets(); if (workingSets == null) return null; - fWorkingSet = workingSets; + } + else { + workingSets = fWorkingSet; } ICSearchScope scope= CSearchScopeFactory.getInstance().createCSearchScope(workingSets); + scopeDescription = CSearchMessages.getFormattedString("WorkingSetScope", new String[] {CSearchUtil.toString(workingSets)}); //$NON-NLS-1$ CSearchUtil.updateLRUWorkingSets(workingSets); return scope; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindRefsInWorkingSetAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindRefsInWorkingSetAction.java index 47ab60ed448..ab182dbe088 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindRefsInWorkingSetAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindRefsInWorkingSetAction.java @@ -22,16 +22,25 @@ import org.eclipse.ui.IWorkingSet; public class FindRefsInWorkingSetAction extends FindAction { - public FindRefsInWorkingSetAction(CEditor editor) { + private IWorkingSet[] fWorkingSet; + private String scopeDescription = ""; + + public FindRefsInWorkingSetAction(CEditor editor, IWorkingSet[] workingSets) { this(editor, CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.label"), //$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, CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.label"), //$NON-NLS-1$ CSearchMessages.getString("CSearch.FindReferencesInWorkingSetAction.tooltip")); //$NON-NLS-1$ + + if (workingSets != null) + fWorkingSet= workingSets; } /** * @param editor @@ -65,24 +74,27 @@ public class FindRefsInWorkingSetAction extends FindAction { * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScopeDescription() */ protected String getScopeDescription() { - return CSearchMessages.getFormattedString("WorkingSetScope", CSearchUtil.toString(fWorkingSet)); //$NON-NLS-1$ + return scopeDescription; } /* (non-Javadoc) * @see org.eclipse.cdt.internal.ui.editor.selsearch.FindAction#getScope() */ protected ICSearchScope getScope() { - IWorkingSet[] workingSets= fWorkingSet; + IWorkingSet[] workingSets= null; if (fWorkingSet == null) { workingSets= CSearchScopeFactory.getInstance().queryWorkingSets(); if (workingSets == null) return null; - fWorkingSet = workingSets; } + else { + workingSets = fWorkingSet; + } + ICSearchScope scope= CSearchScopeFactory.getInstance().createCSearchScope(workingSets); + scopeDescription = CSearchMessages.getFormattedString("WorkingSetScope", new String[] {CSearchUtil.toString(workingSets)}); //$NON-NLS-1$ CSearchUtil.updateLRUWorkingSets(workingSets); return scope; } - private IWorkingSet[] fWorkingSet; } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/ReferencesSearchGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/ReferencesSearchGroup.java index 8ccc1cb2543..dc8d3179337 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/ReferencesSearchGroup.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/ReferencesSearchGroup.java @@ -10,13 +10,18 @@ ******************************************************************************/ 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.ICEditorActionDefinitionIds; 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.MenuManager; import org.eclipse.search.ui.IContextMenuConstants; import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.texteditor.ITextEditorActionConstants; @@ -28,9 +33,12 @@ public class ReferencesSearchGroup extends ActionGroup { private CEditor fEditor; private IWorkbenchSite fSite; + private ArrayList actions; + public ReferencesSearchGroup(IWorkbenchSite 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){ 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 = refsMenu; + FindAction[] actions = getWorkingSetActions(); incomingMenu.add(fFindRefsAction); incomingMenu.add(fFindRefsInWorkingSetAction); + for (int i=0; i