diff options
author | John Camelon | 2003-09-05 18:31:52 +0000 |
---|---|---|
committer | John Camelon | 2003-09-05 18:31:52 +0000 |
commit | d1d3dec2feb20881d256ba2b313387a0f71254d1 (patch) | |
tree | 935dc6a723eeb7127b893dccce09cb3d3713ce3a /core/org.eclipse.cdt.ui | |
parent | 4a6ab5ef38c2fe9813c6b824af7e82e3082c1fc4 (diff) | |
download | org.eclipse.cdt-d1d3dec2feb20881d256ba2b313387a0f71254d1.tar.gz org.eclipse.cdt-d1d3dec2feb20881d256ba2b313387a0f71254d1.tar.xz org.eclipse.cdt-d1d3dec2feb20881d256ba2b313387a0f71254d1.zip |
Patch for Andrew Niefer
Core:
- fix patterns & indexing for Enumerators
Core.Tests:
- Added testEnumerators to OtherPatternTests.java
- Modified resources/search/classDecl.cpp to include some enumerators
UI:
- enable Selected Resources scope
- populate dialog base on selection when opened from outline view
- fix small bug that found namespaces when searching for enumerations
- tweak sorting by path to consider line number second
Diffstat (limited to 'core/org.eclipse.cdt.ui')
8 files changed, 104 insertions, 79 deletions
diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index a486b285f19..8cedadcd4e1 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,10 @@ +2003-09-05 Andrew Niefer + C++ Search: + - enable Selected Resource Scope + - populate dialog base on selection when opened from outline view + - fix small bug that found namespaces when searching for enumerations + - tweak sorting by path to consider line number second + 2003-09-04 John Camelon First pass of parsing function bodies with X-Reference information. Updated IASTFactory/ISourceElementRequestor to include IASTCodeScope diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginResources.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginResources.properties index c2ff084494f..1f619a48631 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginResources.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginResources.properties @@ -299,7 +299,7 @@ SearchForReferencesAction.tooltip=Search for References to Name in Workspace SearchForReferencesAction.description=Searches for references to name in workspace # ------- SearchDialogAction --------------- -SearchDialogAction.label=Dialog +SearchDialogAction.label=C++ Search Dialog SearchDialogAction.tooltip=Opens Search Dialog SearchDialogAction.description=Opens Search Dialog diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SearchDialogAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SearchDialogAction.java index 680485ad26b..7b19bc1bf3a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SearchDialogAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SearchDialogAction.java @@ -43,7 +43,6 @@ public class SearchDialogAction extends Action { if(provider instanceof CContentOutlinePage) { CPluginImages.setImageDescriptors(this, CPluginImages.T_LCL, CPluginImages.IMG_MENU_OPEN_INCLUDE); - setText("Dialog"); // $NON-NLS } fSelectionProvider= provider; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java index 117a09f0e12..8b94162781c 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchOperation.java @@ -17,7 +17,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.Iterator; import java.util.List; -import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.search.ICSearchConstants; import org.eclipse.cdt.core.search.ICSearchPattern; import org.eclipse.cdt.core.search.ICSearchScope; @@ -38,12 +37,6 @@ import org.eclipse.ui.actions.WorkspaceModifyOperation; * Window>Preferences>Java>Code Generation>Code and Comments */ public class CSearchOperation extends WorkspaceModifyOperation implements ICSearchConstants{ - - public CSearchOperation(IWorkspace workspace, ICElement element, LimitTo limitTo, ICSearchScope scope, String scopeDescription, CSearchResultCollector collector) { - this( workspace, limitTo, scope, scopeDescription, collector ); - _elementPattern = element; - } - public CSearchOperation(IWorkspace workspace, String pattern, boolean caseSensitive, List searchFor, LimitTo limitTo, ICSearchScope scope, String scopeDescription, CSearchResultCollector collector) { this( workspace, limitTo, scope, scopeDescription, collector ); _stringPattern = pattern; @@ -69,27 +62,23 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear _collector.setProgressMonitor( monitor ); SearchEngine engine = new SearchEngine( CUIPlugin.getSharedWorkingCopies() ); - if( _elementPattern != null ){ - engine.search( _workspace, _elementPattern, _limitTo, _scope, _collector ); - } else { - ICSearchPattern pattern = null; - if( _searchFor.size() > 1 ){ - OrPattern orPattern = new OrPattern(); - for (Iterator iter = _searchFor.iterator(); iter.hasNext();) { - SearchFor element = (SearchFor)iter.next(); - orPattern.addPattern( SearchEngine.createSearchPattern( _stringPattern, element, _limitTo, _caseSensitive ) ); - } - - pattern = orPattern; - - } else { - Iterator iter = _searchFor.iterator(); - pattern = SearchEngine.createSearchPattern( _stringPattern, (SearchFor)iter.next(), _limitTo, _caseSensitive ); + + ICSearchPattern pattern = null; + if( _searchFor.size() > 1 ){ + OrPattern orPattern = new OrPattern(); + for (Iterator iter = _searchFor.iterator(); iter.hasNext();) { + SearchFor element = (SearchFor)iter.next(); + orPattern.addPattern( SearchEngine.createSearchPattern( _stringPattern, element, _limitTo, _caseSensitive ) ); } - engine.search( _workspace, pattern, _scope, _collector ); + pattern = orPattern; + + } else { + Iterator iter = _searchFor.iterator(); + pattern = SearchEngine.createSearchPattern( _stringPattern, (SearchFor)iter.next(), _limitTo, _caseSensitive ); } - + + engine.search( _workspace, pattern, _scope, _collector ); } /** @@ -98,11 +87,11 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear public String getSingularLabel() { String desc = null; - if( _elementPattern != null ){ - desc = _elementPattern.getElementName(); - } else { + //if( _elementPattern != null ){ + // desc = _elementPattern.getElementName(); + //} else { desc = _stringPattern; - } + //} String [] args = new String [] { desc, _scopeDescription }; @@ -111,7 +100,7 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear } else if( _limitTo == REFERENCES ){ return CSearchMessages.getFormattedString( "CSearchOperation.singularReferencesPostfix", args ); //$NON_NLS-1$ } else { - return CSearchMessages.getFormattedString( "CSearchOperation.singularOccurencesPostfix", args ); //$NON_NLS-1$ + return CSearchMessages.getFormattedString( "CSearchOperation.singularOccurrencesPostfix", args ); //$NON_NLS-1$ } } @@ -121,11 +110,11 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear public String getPluralLabelPattern() { String desc = null; - if( _elementPattern != null ){ - desc = _elementPattern.getElementName(); - } else { + // if( _elementPattern != null ){ + // desc = _elementPattern.getElementName(); + // } else { desc = _stringPattern; - } + // } String [] args = new String [] { desc, "{0}", _scopeDescription }; if( _limitTo == DECLARATIONS ){ @@ -133,7 +122,7 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear } else if ( _limitTo == REFERENCES ){ return CSearchMessages.getFormattedString( "CSearchOperation.pluralReferencesPostfix", args ); //$NON_NLS-1$ } else { - return CSearchMessages.getFormattedString( "CSearchOperation.pluralOccurencesPostfix", args ); //$NON_NLS-1$ + return CSearchMessages.getFormattedString( "CSearchOperation.pluralOccurrencesPostfix", args ); //$NON_NLS-1$ } } @@ -150,7 +139,7 @@ public class CSearchOperation extends WorkspaceModifyOperation implements ICSear private CSearchResultCollector _collector; private IWorkspace _workspace; - private ICElement _elementPattern; + //private ICElement _elementPattern; private ICSearchScope _scope; private String _stringPattern; private String _scopeDescription; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java index 65eae4c61d4..566325e2e78 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java @@ -35,6 +35,7 @@ import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.search.internal.ui.util.RowLayouter; @@ -103,14 +104,14 @@ public class CSearchPage extends DialogPage implements ISearchPage, ICSearchCons CSearchResultCollector collector= new CSearchResultCollector(); CSearchOperation op = null; - if (data.cElement != null && getPattern().equals(fInitialData.pattern)) { - op = new CSearchOperation(workspace, data.cElement, data.limitTo, scope, scopeDescription, collector); - if (data.limitTo == ICSearchConstants.REFERENCES) - CSearchUtil.warnIfBinaryConstant(data.cElement, getShell()); - } else { +// if (data.cElement != null && getPattern().equals(fInitialData.pattern)) { +// op = new CSearchOperation(workspace, data.cElement, data.limitTo, scope, scopeDescription, collector); +// if (data.limitTo == ICSearchConstants.REFERENCES) +// CSearchUtil.warnIfBinaryConstant(data.cElement, getShell()); +// } else { data.cElement= null; op = new CSearchOperation(workspace, data.pattern, data.isCaseSensitive, data.searchFor, data.limitTo, scope, scopeDescription, collector); - } + //} try { getContainer().getRunnableContext().run(true, true, op); @@ -484,6 +485,7 @@ public class CSearchPage extends DialogPage implements ISearchPage, ICSearchCons patterns[i]= ((SearchPatternData) fgPreviousSearchPatterns.get(patternCount - 1 - i)).pattern; return patterns; } + private IStructuredSelection asStructuredSelection() { IWorkbenchWindow wbWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (wbWindow != null) { @@ -491,10 +493,13 @@ public class CSearchPage extends DialogPage implements ISearchPage, ICSearchCons if (page != null) { IWorkbenchPart part= page.getActivePart(); if (part != null){ - //try { - // return SelectionConverter.getStructuredSelection(part); - //} catch (JavaModelException ex) { - //} + ISelectionProvider provider = part.getSite().getSelectionProvider(); + if( provider != null ){ + ISelection selection = provider.getSelection(); + if( selection instanceof IStructuredSelection ){ + return (IStructuredSelection)selection; + } + } } } } @@ -504,23 +509,31 @@ public class CSearchPage extends DialogPage implements ISearchPage, ICSearchCons private SearchPatternData determineInitValuesFrom( ICElement element ) { if( element == null ) return null; - //TODO search pattern data from element -// SearchFor searchFor = UNKNOWN_SEARCH_FOR; -// LimitTo limitTo = UNKNOWN_LIMIT_TO; -// -// String pattern = null; -// switch( element.getElementType() ) { -// /*case ICElement.PACKAGE_FRAGMENT: -// searchFor= PACKAGE; -// limitTo= REFERENCES; -// pattern= element.getElementName(); -// break;*/ -// } -// -// if( searchFor != UNKNOWN_SEARCH_FOR && limitTo != UNKNOWN_LIMIT_TO && pattern != null ) -// return new SearchPatternData( searchFor, limitTo, true, pattern, element ); -// - return null; + + List searchFor = new LinkedList(); + + //outliune view will confuse methods with functions, so if the + //name contains a "::", treat it as a method + String pattern = element.getElementName(); + boolean forceMethod = ( pattern.indexOf("::") != -1 ); + + switch ( element.getElementType() ){ + case ICElement.C_FUNCTION: if( forceMethod ) searchFor.add( METHOD ); + else searchFor.add( FUNCTION ); + break; + case ICElement.C_VARIABLE: searchFor.add( VAR ); break; + case ICElement.C_STRUCT: /* fall through to CLASS */ + case ICElement.C_CLASS: searchFor.add( CLASS_STRUCT ); break; + case ICElement.C_UNION: searchFor.add( UNION ); break; + case ICElement.C_ENUMERATOR: /* fall through to FIELD */ + case ICElement.C_FIELD: searchFor.add( FIELD ); break; + case ICElement.C_METHOD: searchFor.add( METHOD ); break; + case ICElement.C_NAMESPACE: searchFor.add( NAMESPACE ); break; + } + + LimitTo limitTo = ALL_OCCURRENCES; + + return new SearchPatternData( searchFor, limitTo, true, pattern, element ); } private SearchPatternData getPatternData() { @@ -587,7 +600,7 @@ public class CSearchPage extends DialogPage implements ISearchPage, ICSearchCons private static List fgPreviousSearchPatterns = new ArrayList(20); private Button[] fSearchFor; - private SearchFor[] fSearchForValues = { CLASS_STRUCT, FUNCTION, VAR, UNION, METHOD, FIELD, NAMESPACE, ENUM, null }; + private SearchFor[] fSearchForValues = { CLASS_STRUCT, FUNCTION, VAR, UNION, METHOD, FIELD, ENUM, NAMESPACE, null }; private String[] fSearchForText= { CSearchMessages.getString("CSearchPage.searchFor.classStruct"), //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java index a1bb32adabc..4f8c5ef4f3a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java @@ -55,7 +55,7 @@ public class CSearchResultCollector extends BasicSearchResultCollector{ _view = SearchUI.getSearchResultView(); CSearchResultLabelProvider labelProvider = new CSearchResultLabelProvider(); - labelProvider.setOrder( CSearchResultLabelProvider.SHOW_ELEMENT_CONTAINER ); + labelProvider.setOrder( CSearchResultLabelProvider.SHOW_PATH ); if( _view != null ){ _view.searchStarted( diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchScopeFactory.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchScopeFactory.java index b50f1e39d85..4cfeea7110d 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchScopeFactory.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchScopeFactory.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.ui.search; import java.util.HashSet; +import java.util.Iterator; import java.util.Set; import org.eclipse.cdt.core.model.ICElement; @@ -105,8 +106,14 @@ public class CSearchScopeFactory { * @return */ public ICSearchScope createCSearchScope(IStructuredSelection fStructuredSelection) { - // TODO Auto-generated method stub - return null; + Set cElements = new HashSet( fStructuredSelection.size() ); + + Iterator iter = fStructuredSelection.iterator(); + while( iter.hasNext() ){ + addCElements( cElements, (IAdaptable)iter.next() ); + } + + return createCSearchScope( cElements ); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java index f94383847c4..ea55a52dc75 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PathNameSorter.java @@ -13,8 +13,9 @@ */ package org.eclipse.cdt.internal.ui.search; +import org.eclipse.cdt.core.search.IMatch; import org.eclipse.cdt.ui.CSearchResultLabelProvider; -import org.eclipse.core.resources.IMarker; +import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; @@ -38,14 +39,25 @@ public class PathNameSorter extends ViewerSorter { String name2 = null; ISearchResultViewEntry entry1 = null; ISearchResultViewEntry entry2 = null; + IMatch match1 = null; + IMatch match2 = null; if( e1 instanceof ISearchResultViewEntry ) { entry1 = (ISearchResultViewEntry)e1; - name1 = _labelProvider.getText( e1 ); + try { + match1 = (IMatch)entry1.getSelectedMarker().getAttribute( CSearchResultCollector.IMATCH ); + } catch (CoreException e) { + } + name1 = match1.getLocation().toString(); } if( e2 instanceof ISearchResultViewEntry ) { entry2 = (ISearchResultViewEntry)e2; - name2 = _labelProvider.getText( e2 ); + try { + match2 = (IMatch)entry2.getSelectedMarker().getAttribute( CSearchResultCollector.IMATCH ); + } catch (CoreException e) { + } + //name2 = _labelProvider.getText( e2 ); + name2 = match2.getLocation().toString(); } if( name1 == null ) @@ -59,13 +71,11 @@ public class PathNameSorter extends ViewerSorter { if( compare == 0 ){ int startPos1 = -1; int startPos2 = -1; - IMarker marker1 = entry1.getSelectedMarker(); - IMarker marker2 = entry2.getSelectedMarker(); - - if (marker1 != null) - startPos1 = marker1.getAttribute( IMarker.CHAR_START, -1 ); - if (marker2 != null) - startPos2 = marker2.getAttribute( IMarker.CHAR_START, -1 ); + + if (match1 != null) + startPos1 = match1.getStartOffset(); + if (match2 != null) + startPos2 = match2.getStartOffset(); compare = startPos1 - startPos2; } |