1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 18:26:01 +02:00

fix bugs 43063 & 43498

This commit is contained in:
Andrew Niefer 2004-06-11 18:29:03 +00:00
parent 7a8f06f905
commit 75fee20f69
3 changed files with 99 additions and 69 deletions

View file

@ -38,37 +38,37 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
} }
public void testFunctionIndexPrefix(){ public void testFunctionIndexPrefix(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "c()", FUNCTION, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "c()", FUNCTION, DECLARATIONS, true ); //$NON-NLS-1$
MethodDeclarationPattern functionPattern = (MethodDeclarationPattern)pattern; MethodDeclarationPattern functionPattern = (MethodDeclarationPattern)pattern;
assertEquals( CharOperation.compareWith( "functionDecl/c".toCharArray(), functionPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "functionDecl/c".toCharArray(), functionPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "rt*()", FUNCTION, DECLARATIONS, true ); functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "rt*()", FUNCTION, DECLARATIONS, true ); //$NON-NLS-1$
assertEquals( CharOperation.compareWith( "functionDecl/rt".toCharArray(), functionPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "functionDecl/rt".toCharArray(), functionPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "Ac", FUNCTION, REFERENCES, false ); functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "Ac", FUNCTION, REFERENCES, false ); //$NON-NLS-1$
assertEquals( CharOperation.compareWith( "functionRef/".toCharArray(), functionPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "functionRef/".toCharArray(), functionPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
} }
public void testMethodIndexPrefix(){ public void testMethodIndexPrefix(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::c", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::c", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertTrue( pattern instanceof MethodDeclarationPattern ); assertTrue( pattern instanceof MethodDeclarationPattern );
MethodDeclarationPattern methodPattern = (MethodDeclarationPattern)pattern; MethodDeclarationPattern methodPattern = (MethodDeclarationPattern)pattern;
assertEquals( CharOperation.compareWith( "methodDecl/c/B/A".toCharArray(), methodPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "methodDecl/c/B/A".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::*::A::B::c", METHOD, DECLARATIONS, true ); methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::*::A::B::c", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertEquals( CharOperation.compareWith( "methodDecl/c/B/A/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "methodDecl/c/B/A/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::RT*::c", METHOD, REFERENCES, true ); methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::RT*::c", METHOD, REFERENCES, true ); //$NON-NLS-1$
assertEquals( CharOperation.compareWith( "methodRef/c/RT".toCharArray(), methodPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "methodRef/c/RT".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "A::B::c", METHOD, REFERENCES, false ); methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "A::B::c", METHOD, REFERENCES, false ); //$NON-NLS-1$
assertEquals( CharOperation.compareWith( "methodRef/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); assertEquals( CharOperation.compareWith( "methodRef/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$
} }
public void testMethodDeclaration() { public void testMethodDeclaration() {
ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::f", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::f", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
@ -78,7 +78,7 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
} }
public void testMethodDeclarationWithParams() { public void testMethodDeclarationWithParams() {
ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::f( A )", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::f( A )", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
@ -88,37 +88,37 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
} }
public void testMethodDeclarationParameterMatching(){ public void testMethodDeclarationParameterMatching(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "f( A & )", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "f( A & )", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
Set matches = resultCollector.getSearchResults(); Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
pattern = SearchEngine.createSearchPattern( "f( A * )", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "f( A * )", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
pattern = SearchEngine.createSearchPattern( "f( int &, const char [], A** )", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "f( int &, const char [], A** )", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
} }
public void testMethodWithNoParameters(){ public void testMethodWithNoParameters(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "turn( )", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "turn( )", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
Set matches = resultCollector.getSearchResults(); Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 2 ); assertEquals( matches.size(), 2 );
pattern = SearchEngine.createSearchPattern( "turn(void)", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "turn(void)", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 2 ); assertEquals( matches.size(), 2 );
pattern = SearchEngine.createSearchPattern( "turnAgain()", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "turnAgain()", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
@ -127,14 +127,14 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
} }
public void testOperators_bug43063_bug42979(){ public void testOperators_bug43063_bug42979(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "operator \\*", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "operator \\*", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
Set matches = resultCollector.getSearchResults(); Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
IMatch match1 = (IMatch) matches.iterator().next(); IMatch match1 = (IMatch) matches.iterator().next();
pattern = SearchEngine.createSearchPattern( "operator \\*", METHOD, DEFINITIONS, true ); pattern = SearchEngine.createSearchPattern( "operator \\*", METHOD, DEFINITIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
@ -142,13 +142,13 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
assertTrue( match1.getStartOffset() == match2.getStartOffset() ); assertTrue( match1.getStartOffset() == match2.getStartOffset() );
pattern = SearchEngine.createSearchPattern( "operator \\*=", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "operator \\*=", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
match1 = (IMatch) matches.iterator().next(); match1 = (IMatch) matches.iterator().next();
pattern = SearchEngine.createSearchPattern( "operator \\*=", METHOD, DEFINITIONS, true ); pattern = SearchEngine.createSearchPattern( "operator \\*=", METHOD, DEFINITIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
@ -156,14 +156,20 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
assertTrue( match1.getStartOffset() != match2.getStartOffset() ); assertTrue( match1.getStartOffset() != match2.getStartOffset() );
pattern = SearchEngine.createSearchPattern( "operator *", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "operator *", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 6 ); //3 in classDecl.cpp assertEquals( matches.size(), 6 ); //3 in classDecl.cpp
pattern = SearchEngine.createSearchPattern( "operator ->\\*", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertTrue( pattern instanceof MethodDeclarationPattern );
MethodDeclarationPattern methodPattern = (MethodDeclarationPattern) pattern;
char [] string = new char[] {'o','p','e','r','a','t','o','r',' ','-','>','\\','*'};
assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) );
} }
public void testBug43498(){ public void testBug43498(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "operator ?elete", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "operator ?elete", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertTrue( pattern instanceof MethodDeclarationPattern ); assertTrue( pattern instanceof MethodDeclarationPattern );
MethodDeclarationPattern methodPattern = (MethodDeclarationPattern) pattern; MethodDeclarationPattern methodPattern = (MethodDeclarationPattern) pattern;
@ -171,42 +177,48 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
char [] string = new char[] {'o','p','e','r','a','t','o','r',' ','?','e','l','e','t','e'}; char [] string = new char[] {'o','p','e','r','a','t','o','r',' ','?','e','l','e','t','e'};
assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) ); assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) );
pattern = SearchEngine.createSearchPattern( "operator delete", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "operator delete", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertTrue( pattern instanceof MethodDeclarationPattern ); assertTrue( pattern instanceof MethodDeclarationPattern );
methodPattern = (MethodDeclarationPattern) pattern; methodPattern = (MethodDeclarationPattern) pattern;
string = new char[] {'o','p','e','r','a','t','o','r',' ','d','e','l','e','t','e'}; string = new char[] {'o','p','e','r','a','t','o','r',' ','d','e','l','e','t','e'};
assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) ); assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) );
pattern = SearchEngine.createSearchPattern( "word?word", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "word?word", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertTrue( pattern instanceof MethodDeclarationPattern ); assertTrue( pattern instanceof MethodDeclarationPattern );
methodPattern = (MethodDeclarationPattern) pattern; methodPattern = (MethodDeclarationPattern) pattern;
string = new char[] {'w','o','r','d','?','w','o','r','d'}; string = new char[] {'w','o','r','d','?','w','o','r','d'};
assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) ); assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) );
pattern = SearchEngine.createSearchPattern( "operato? delete", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
assertTrue( pattern instanceof MethodDeclarationPattern );
methodPattern = (MethodDeclarationPattern) pattern;
string = new char[] {'o','p','e','r','a','t','o','?',' ','d','e','l','e','t','e'};
assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) );
} }
public void testBug43062(){ public void testBug43062(){
MethodDeclarationPattern pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator const short &", METHOD, DECLARATIONS, true ); MethodDeclarationPattern pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator const short &", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
char [] string = new char [] { 'o','p','e','r','a','t','o','r',' ','c','o','n','s','t',' ','s','h','o','r','t',' ','&' }; char [] string = new char [] { 'o','p','e','r','a','t','o','r',' ','c','o','n','s','t',' ','s','h','o','r','t',' ','&' };
assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) ); assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) );
pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator short", METHOD, DECLARATIONS, true ); pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator short", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
string = new char [] { 'o','p','e','r','a','t','o','r',' ','s','h','o','r','t' }; string = new char [] { 'o','p','e','r','a','t','o','r',' ','s','h','o','r','t' };
assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) ); assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) );
pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator short int", METHOD, DECLARATIONS, true ); pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator short int", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
string = new char [] { 'o','p','e','r','a','t','o','r',' ','s','h','o','r','t',' ','i','n','t' }; string = new char [] { 'o','p','e','r','a','t','o','r',' ','s','h','o','r','t',' ','i','n','t' };
assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) ); assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) );
} }
public void testConstructorDestructor(){ public void testConstructorDestructor(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "A", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "A", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
Set matches = resultCollector.getSearchResults(); Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); assertEquals( matches.size(), 1 );
pattern = SearchEngine.createSearchPattern( "~A", METHOD, DECLARATIONS, true ); pattern = SearchEngine.createSearchPattern( "~A", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
@ -214,19 +226,19 @@ public class FunctionMethodPatternTests extends BaseSearchTest {
} }
public void testLookupForDefinition(){ public void testLookupForDefinition(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "turn", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "turn", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
Set matches = resultCollector.getSearchResults(); Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 3 ); assertEquals( matches.size(), 3 );
pattern = SearchEngine.createSearchPattern( "Direction::turn", METHOD, DEFINITIONS, true ); pattern = SearchEngine.createSearchPattern( "Direction::turn", METHOD, DEFINITIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );
matches = resultCollector.getSearchResults(); matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 0 ); assertEquals( matches.size(), 0 );
} }
public void testBug63478(){ public void testBug63478(){
ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::f(*)", METHOD, DECLARATIONS, true ); ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B::f(*)", METHOD, DECLARATIONS, true ); //$NON-NLS-1$
search( workspace, pattern, scope, resultCollector ); search( workspace, pattern, scope, resultCollector );

View file

@ -1,3 +1,6 @@
2004-06-11 Andrew Niefer
fix bugs 43063 & 43498 - better handling of spaces around wild cards in search pattern
2004-06-10 Andrew Niefer 2004-06-10 Andrew Niefer
fix bug 64986 - handle Containers in CSearchScope fix bug 64986 - handle Containers in CSearchScope

View file

@ -175,11 +175,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
return orPattern; return orPattern;
} }
char [] patternArray = patternString.toCharArray();
IScanner scanner = null; IScanner scanner = null;
try { try {
scanner = scanner =
ParserFactory.createScanner( ParserFactory.createScanner(
new CodeReader(patternString.toCharArray()), new CodeReader(patternArray),
new ScannerInfo(), new ScannerInfo(),
ParserMode.QUICK_PARSE, ParserMode.QUICK_PARSE,
ParserLanguage.CPP, ParserLanguage.CPP,
@ -188,7 +189,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
} catch (ParserFactoryError e) { } catch (ParserFactoryError e) {
} }
LinkedList list = scanForNames( scanner, null ); LinkedList list = scanForNames( scanner, null, patternArray );
char [] name = (char []) list.removeLast(); char [] name = (char []) list.removeLast();
char [][] qualifications = new char [0][]; char [][] qualifications = new char [0][];
@ -245,11 +246,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
return orPattern; return orPattern;
} }
char [] patternArray = patternString.toCharArray();
IScanner scanner=null; IScanner scanner=null;
try { try {
scanner = scanner =
ParserFactory.createScanner( ParserFactory.createScanner(
new CodeReader(patternString.toCharArray()), new CodeReader(patternArray),
new ScannerInfo(), new ScannerInfo(),
ParserMode.QUICK_PARSE, ParserMode.QUICK_PARSE,
ParserLanguage.CPP, ParserLanguage.CPP,
@ -257,7 +259,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
} catch (ParserFactoryError e) { } catch (ParserFactoryError e) {
} }
LinkedList list = scanForNames( scanner, null ); LinkedList list = scanForNames( scanner, null, patternArray );
char [] name = (char []) list.removeLast(); char [] name = (char []) list.removeLast();
char [][] qualifications = new char[0][]; char [][] qualifications = new char[0][];
@ -285,12 +287,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
int index = patternString.indexOf( '(' ); int index = patternString.indexOf( '(' );
String paramString = ( index == -1 ) ? "" : patternString.substring( index ); //$NON-NLS-1$ String paramString = ( index == -1 ) ? "" : patternString.substring( index ); //$NON-NLS-1$
String nameString = ( index == -1 ) ? patternString : patternString.substring( 0, index ); String nameString = ( index == -1 ) ? patternString : patternString.substring( 0, index );
char [] nameArray = nameString.toCharArray();
IScanner scanner=null; IScanner scanner=null;
try { try {
scanner = scanner =
ParserFactory.createScanner( ParserFactory.createScanner(
new CodeReader(nameString.toCharArray()), new CodeReader(nameArray),
new ScannerInfo(), new ScannerInfo(),
ParserMode.QUICK_PARSE, ParserMode.QUICK_PARSE,
ParserLanguage.CPP, ParserLanguage.CPP,
@ -298,7 +300,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
} catch (ParserFactoryError e) { } catch (ParserFactoryError e) {
} }
LinkedList names = scanForNames( scanner, null ); LinkedList names = scanForNames( scanner, null, nameArray );
LinkedList params = scanForParameters( paramString ); LinkedList params = scanForParameters( paramString );
@ -334,21 +336,14 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
orPattern.addPattern( createClassPattern( patternString, STRUCT, limitTo, matchMode, caseSensitive ) ); orPattern.addPattern( createClassPattern( patternString, STRUCT, limitTo, matchMode, caseSensitive ) );
return orPattern; return orPattern;
} }
// else if( searchFor == TYPE ){
// OrPattern orPattern = new OrPattern(); char [] patternArray = patternString.toCharArray();
// orPattern.addPattern( createClassPattern( patternString, CLASS, limitTo, matchMode, caseSensitive ) );
// orPattern.addPattern( createClassPattern( patternString, STRUCT, limitTo, matchMode, caseSensitive ) );
// orPattern.addPattern( createClassPattern( patternString, UNION, limitTo, matchMode, caseSensitive ) );
// orPattern.addPattern( createClassPattern( patternString, ENUM, limitTo, matchMode, caseSensitive ) );
// orPattern.addPattern( createClassPattern( patternString, TYPEDEF, limitTo, matchMode, caseSensitive ) );
// return orPattern;
// }
IScanner scanner =null; IScanner scanner =null;
try { try {
scanner = scanner =
ParserFactory.createScanner( ParserFactory.createScanner(
new CodeReader(patternString.toCharArray()), new CodeReader(patternArray),
new ScannerInfo(), new ScannerInfo(),
ParserMode.QUICK_PARSE, ParserMode.QUICK_PARSE,
ParserLanguage.CPP, ParserLanguage.CPP,
@ -379,11 +374,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
} else { } else {
nullifyToken = false; nullifyToken = false;
} }
if( nullifyToken ) if( nullifyToken ){
patternArray = CharOperation.subarray( patternArray, token.getLength() + 1, -1 );
token = null; token = null;
}
} }
LinkedList list = scanForNames( scanner, token ); LinkedList list = scanForNames( scanner, token, patternArray );
char[] name = (char [])list.removeLast(); char[] name = (char [])list.removeLast();
char [][] qualifications = new char[0][]; char [][] qualifications = new char[0][];
@ -393,13 +390,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
private static CSearchPattern createDerivedPattern(String patternString, SearchFor searchFor, LimitTo limitTo, int matchMode, boolean caseSensitive) { private static CSearchPattern createDerivedPattern(String patternString, SearchFor searchFor, LimitTo limitTo, int matchMode, boolean caseSensitive) {
char [] patternArray = patternString.toCharArray();
IScanner scanner =null; IScanner scanner =null;
try { try {
scanner = scanner =
ParserFactory.createScanner( ParserFactory.createScanner(
new CodeReader(patternString.toCharArray()), new CodeReader(patternArray),
new ScannerInfo(), new ScannerInfo(),
ParserMode.QUICK_PARSE, ParserMode.QUICK_PARSE,
ParserLanguage.CPP, ParserLanguage.CPP,
@ -409,7 +406,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
searchFor = DERIVED; searchFor = DERIVED;
LinkedList list = scanForNames( scanner, null ); LinkedList list = scanForNames( scanner, null, patternArray );
char[] name = (char [])list.removeLast(); char[] name = (char [])list.removeLast();
char [][] qualifications = new char[0][]; char [][] qualifications = new char[0][];
@ -419,12 +416,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
private static CSearchPattern createFriendPattern(String patternString, SearchFor searchFor, LimitTo limitTo, int matchMode, boolean caseSensitive) { private static CSearchPattern createFriendPattern(String patternString, SearchFor searchFor, LimitTo limitTo, int matchMode, boolean caseSensitive) {
char [] patternArray = patternString.toCharArray();
IScanner scanner =null; IScanner scanner =null;
try { try {
scanner = scanner =
ParserFactory.createScanner( ParserFactory.createScanner(
new CodeReader(patternString.toCharArray()), new CodeReader(patternArray),
new ScannerInfo(), new ScannerInfo(),
ParserMode.QUICK_PARSE, ParserMode.QUICK_PARSE,
ParserLanguage.CPP, ParserLanguage.CPP,
@ -434,7 +431,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
searchFor = FRIEND; searchFor = FRIEND;
LinkedList list = scanForNames( scanner, null ); LinkedList list = scanForNames( scanner, null, patternArray );
char[] name = (char [])list.removeLast(); char[] name = (char [])list.removeLast();
char [][] qualifications = new char[0][]; char [][] qualifications = new char[0][];
@ -511,10 +508,11 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
return list; return list;
} }
static private LinkedList scanForNames( IScanner scanner, IToken unusedToken ){ static private LinkedList scanForNames( IScanner scanner, IToken unusedToken, char[] pattern ){
LinkedList list = new LinkedList(); LinkedList list = new LinkedList();
String name = new String(""); //$NON-NLS-1$ String name = new String(""); //$NON-NLS-1$
int idx = 0;
try { try {
IToken token = ( unusedToken != null ) ? unusedToken : scanner.nextToken(); IToken token = ( unusedToken != null ) ? unusedToken : scanner.nextToken();
@ -531,33 +529,49 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
list.addLast( name.toCharArray() ); list.addLast( name.toCharArray() );
name = new String(""); //$NON-NLS-1$ name = new String(""); //$NON-NLS-1$
lastTokenWasOperator = false; lastTokenWasOperator = false;
idx += token.getLength();
while( idx < pattern.length && CharOperation.isWhitespace( pattern[idx] ) ){ idx++; }
break; break;
case IToken.t_operator : case IToken.t_operator :
name += token.getImage() + " "; //$NON-NLS-1$ name += token.getImage();
name += ' ';
lastTokenWasOperator = true; lastTokenWasOperator = true;
idx += token.getLength();
while( idx < pattern.length && CharOperation.isWhitespace( pattern[idx] ) ){ idx++; }
break; break;
default: default:
if( token.getType() == IToken.tSTAR || if( token.getType() == IToken.tSTAR ||
token.getType() == IToken.tQUESTION token.getType() == IToken.tQUESTION
){ )
{
if( idx > 0 && idx < pattern.length && CharOperation.isWhitespace( pattern[ idx - 1 ] ) && !lastTokenWasOperator )
name += ' ';
encounteredWild = true; encounteredWild = true;
} else if( !encounteredWild && !lastTokenWasOperator && name.length() > 0 && } else if( !encounteredWild && !lastTokenWasOperator && name.length() > 0 &&
prev.getType() != IToken.tIDENTIFIER && prev.getType() != IToken.tIDENTIFIER &&
prev.getType() != IToken.tLT && prev.getType() != IToken.tLT &&
prev.getType() != IToken.tCOMPL && prev.getType() != IToken.tCOMPL &&
prev.getType() != IToken.tARROW &&
prev.getType() != IToken.tLBRACKET && prev.getType() != IToken.tLBRACKET &&
token.getType() != IToken.tRBRACKET && token.getType() != IToken.tRBRACKET &&
token.getType()!= IToken.tGT token.getType()!= IToken.tGT
){ ){
name += " "; //$NON-NLS-1$ name += ' ';
} else { } else {
encounteredWild = false; encounteredWild = false;
} }
name += token.getImage(); name += token.getImage();
if( encounteredWild && idx < pattern.length - 1 && CharOperation.isWhitespace( pattern[ idx + 1 ] ) )
{
name += ' ';
}
idx += token.getLength();
while( idx < pattern.length && CharOperation.isWhitespace( pattern[idx] ) ){ idx++; }
lastTokenWasOperator = false; lastTokenWasOperator = false;
break; break;
} }
@ -570,8 +584,9 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
} catch ( ScannerException e ){ } catch ( ScannerException e ){
if( e.getProblem().getID() == IProblem.SCANNER_BAD_CHARACTER ){ if( e.getProblem().getID() == IProblem.SCANNER_BAD_CHARACTER ){
//TODO : This may not be \\, it could be another bad character //TODO : This may not be \\, it could be another bad character
if( !encounteredWild && !lastTokenWasOperator ) name += " "; //$NON-NLS-1$ if( !encounteredWild && !lastTokenWasOperator && prev.getType() != IToken.tARROW ) name += " "; //$NON-NLS-1$
name += "\\"; //$NON-NLS-1$ name += "\\"; //$NON-NLS-1$
idx++;
encounteredWild = true; encounteredWild = true;
lastTokenWasOperator = false; lastTokenWasOperator = false;
prev = null; prev = null;