mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for Bug 100191
This commit is contained in:
parent
bed6b31350
commit
3eb94cf34a
5 changed files with 61 additions and 4 deletions
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
@ -287,6 +300,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
|
|||
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 );
|
||||
|
@ -335,6 +354,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
|
|||
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 ){
|
||||
OrPattern orPattern = new OrPattern();
|
||||
orPattern.addPattern( createClassPattern( patternString, CLASS, limitTo, matchMode, caseSensitive ) );
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -68,6 +68,6 @@ public class FindDeclarationsAction extends FindAction {
|
|||
*/
|
||||
protected LimitTo getLimitTo() {
|
||||
// TODO Auto-generated method stub
|
||||
return ICSearchConstants.DECLARATIONS;
|
||||
return ICSearchConstants.DECLARATIONS_DEFINITIONS;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue