From 3eb94cf34a94a734c3f7b7c95c2f7e7f1911e23b Mon Sep 17 00:00:00 2001 From: Bogdan Gheorghe Date: Wed, 15 Jun 2005 21:51:29 +0000 Subject: [PATCH] Fix for Bug 100191 --- .../cdt/core/search/ICSearchConstants.java | 4 +++ .../core/search/matching/CSearchPattern.java | 28 ++++++++++++++++++- .../cdt/internal/ui/search/CSearchUtil.java | 3 +- .../ui/search/actions/FindAction.java | 28 ++++++++++++++++++- .../actions/FindDeclarationsAction.java | 2 +- 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java index c98efdc5214..4b415e7098a 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchConstants.java @@ -143,6 +143,10 @@ public interface ICSearchConstants { */ public static final LimitTo ALL_OCCURRENCES = new LimitTo( 3 ); + /** + * The search result is a declaration or a definitoin + */ + public static final LimitTo DECLARATIONS_DEFINITIONS = new LimitTo( 4 ); /* Syntactic match modes */ diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java index e0263d039c3..85158166b8b 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java @@ -175,6 +175,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte return orPattern; } + if( limitTo == DECLARATIONS_DEFINITIONS ){ + OrPattern orPattern = new OrPattern(); + orPattern.addPattern( createNamespacePattern( patternString, DECLARATIONS, matchMode, caseSensitive ) ); + orPattern.addPattern( createNamespacePattern( patternString, DEFINITIONS, matchMode, caseSensitive ) ); + return orPattern; + } + char [] patternArray = patternString.toCharArray(); IScanner scanner = null; @@ -248,6 +255,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte return orPattern; } + if( limitTo == DECLARATIONS_DEFINITIONS ){ + OrPattern orPattern = new OrPattern(); + orPattern.addPattern( createFieldPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) ); + orPattern.addPattern( createFieldPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) ); + return orPattern; + } char [] patternArray = patternString.toCharArray(); Requestor callback = new Requestor( ParserMode.COMPLETE_PARSE ); IScanner scanner=null; @@ -286,7 +299,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte orPattern.addPattern( createMethodPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) ); return orPattern; } - + + if( limitTo == DECLARATIONS_DEFINITIONS ){ + OrPattern orPattern = new OrPattern(); + orPattern.addPattern( createMethodPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) ); + orPattern.addPattern( createMethodPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) ); + return orPattern; + } int index = patternString.indexOf( '(' ); String paramString = ( index == -1 ) ? "" : patternString.substring( index ); //$NON-NLS-1$ String nameString = ( index == -1 ) ? patternString : patternString.substring( 0, index ); @@ -333,6 +352,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte orPattern.addPattern( createClassPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) ); orPattern.addPattern( createClassPattern( patternString, searchFor, REFERENCES, matchMode, caseSensitive ) ); return orPattern; + } + + if ( limitTo == DECLARATIONS_DEFINITIONS ) { + OrPattern orPattern = new OrPattern(); + orPattern.addPattern( createClassPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) ); + orPattern.addPattern( createClassPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) ); + return orPattern; } if( searchFor == CLASS_STRUCT ){ 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 88a53da7568..df73c8b86a8 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 @@ -129,7 +129,8 @@ public class CSearchUtil { case ICElement.C_UNION: searchFor = ICSearchConstants.UNION; break; - case ICElement.C_ENUMERATOR: /* fall through to FIELD */ + case ICElement.C_ENUMERATOR: + searchFor = ICSearchConstants.ENUMTOR; break; case ICElement.C_FIELD: searchFor = ICSearchConstants.FIELD; break; case ICElement.C_TEMPLATE_METHOD : /*fall through to METHOD */ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java index 77464c037b1..2c7906874d0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindAction.java @@ -76,6 +76,7 @@ public abstract class FindAction extends SelectionParseAction { return new DOMQuery(DOMSearchUtil.getSearchPattern(name), name, limitTo, scope); } + /** * This is a convenience method and is the same as invoking: * createDOMSearchQueryForName( name, limitTo, scope, null ); @@ -110,7 +111,7 @@ public abstract class FindAction extends SelectionParseAction { ICElement element = (ICElement) obj; - CSearchQuery job = createSearchQuery( element.getElementName(), CSearchUtil.getSearchForFromElement(element)); + CSearchQuery job = createSearchQuery( getFullyQualifiedName(element), CSearchUtil.getSearchForFromElement(element)); NewSearchUI.activateSearchResultView(); NewSearchUI.runQueryInBackground(job); @@ -292,6 +293,31 @@ public abstract class FindAction extends SelectionParseAction { } }; + + private String getFullyQualifiedName(ICElement element){ + + StringBuffer fullName = new StringBuffer(element.getElementName()); + + while (element.getElementType() != 0){ + element = element.getParent(); + //Keep going up CModel until we hit Translation Unit + //or Working Copy (both represented by C_UNIT) or hit a null + if (element.getElementType() == ICElement.C_UNIT || + element == null){ + fullName.insert(0,"::"); + break; + } + else if (element.getElementType() != ICElement.C_ENUMERATION){ + //get the parent name as long as it is not an enumeration - enumerators + //don't use the enumeration name as part of the fully qualified name + fullName.insert(0,"::"); + fullName.insert(0,element.getElementName()); + } + } + + return fullName.toString(); + } + abstract protected String getScopeDescription(); abstract protected ICSearchScope getScope(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsAction.java index 9e3e9e33b84..18af6225c7c 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/FindDeclarationsAction.java @@ -68,6 +68,6 @@ public class FindDeclarationsAction extends FindAction { */ protected LimitTo getLimitTo() { // TODO Auto-generated method stub - return ICSearchConstants.DECLARATIONS; + return ICSearchConstants.DECLARATIONS_DEFINITIONS; } }