diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java index c10ca4bde46..1a0ec153523 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java @@ -38,37 +38,37 @@ public class FunctionMethodPatternTests extends BaseSearchTest { } 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; - 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 ); - assertEquals( CharOperation.compareWith( "functionDecl/rt".toCharArray(), functionPattern.indexEntryPrefix() ), 0); + functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "rt*()", FUNCTION, DECLARATIONS, true ); //$NON-NLS-1$ + assertEquals( CharOperation.compareWith( "functionDecl/rt".toCharArray(), functionPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$ - functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "Ac", FUNCTION, REFERENCES, false ); - assertEquals( CharOperation.compareWith( "functionRef/".toCharArray(), functionPattern.indexEntryPrefix() ), 0); + functionPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "Ac", FUNCTION, REFERENCES, false ); //$NON-NLS-1$ + assertEquals( CharOperation.compareWith( "functionRef/".toCharArray(), functionPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$ } 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 ); 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 ); - assertEquals( CharOperation.compareWith( "methodDecl/c/B/A/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); + methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::*::A::B::c", METHOD, DECLARATIONS, true ); //$NON-NLS-1$ + assertEquals( CharOperation.compareWith( "methodDecl/c/B/A/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$ - methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::RT*::c", METHOD, REFERENCES, true ); - assertEquals( CharOperation.compareWith( "methodRef/c/RT".toCharArray(), methodPattern.indexEntryPrefix() ), 0); + methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "::RT*::c", METHOD, REFERENCES, true ); //$NON-NLS-1$ + assertEquals( CharOperation.compareWith( "methodRef/c/RT".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$ - methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "A::B::c", METHOD, REFERENCES, false ); - assertEquals( CharOperation.compareWith( "methodRef/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); + methodPattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "A::B::c", METHOD, REFERENCES, false ); //$NON-NLS-1$ + assertEquals( CharOperation.compareWith( "methodRef/".toCharArray(), methodPattern.indexEntryPrefix() ), 0); //$NON-NLS-1$ } 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 ); @@ -78,7 +78,7 @@ public class FunctionMethodPatternTests extends BaseSearchTest { } 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 ); @@ -88,37 +88,37 @@ public class FunctionMethodPatternTests extends BaseSearchTest { } 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 ); Set matches = resultCollector.getSearchResults(); 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 ); matches = resultCollector.getSearchResults(); 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 ); matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 1 ); } 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 ); Set matches = resultCollector.getSearchResults(); 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 ); matches = resultCollector.getSearchResults(); 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 ); matches = resultCollector.getSearchResults(); @@ -127,14 +127,14 @@ public class FunctionMethodPatternTests extends BaseSearchTest { } 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 ); Set matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 1 ); 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 ); matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 1 ); @@ -142,13 +142,13 @@ public class FunctionMethodPatternTests extends BaseSearchTest { 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 ); matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 1 ); 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 ); matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 1 ); @@ -156,14 +156,20 @@ public class FunctionMethodPatternTests extends BaseSearchTest { 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 ); matches = resultCollector.getSearchResults(); 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(){ - 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 ); 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'}; 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 ); methodPattern = (MethodDeclarationPattern) pattern; string = new char[] {'o','p','e','r','a','t','o','r',' ','d','e','l','e','t','e'}; 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 ); methodPattern = (MethodDeclarationPattern) pattern; string = new char[] {'w','o','r','d','?','w','o','r','d'}; 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(){ - 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',' ','&' }; 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' }; 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' }; assertTrue( CharOperation.equals( string, pattern.getSimpleName() ) ); } 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 ); Set matches = resultCollector.getSearchResults(); 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 ); matches = resultCollector.getSearchResults(); @@ -214,19 +226,19 @@ public class FunctionMethodPatternTests extends BaseSearchTest { } 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 ); Set matches = resultCollector.getSearchResults(); 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 ); matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 0 ); } 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 ); diff --git a/core/org.eclipse.cdt.core/search/ChangeLog b/core/org.eclipse.cdt.core/search/ChangeLog index fd669185f82..1405d0c241f 100644 --- a/core/org.eclipse.cdt.core/search/ChangeLog +++ b/core/org.eclipse.cdt.core/search/ChangeLog @@ -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 fix bug 64986 - handle Containers in CSearchScope 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 432c337803e..4954407c5c1 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,11 +175,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte return orPattern; } + char [] patternArray = patternString.toCharArray(); IScanner scanner = null; try { scanner = ParserFactory.createScanner( - new CodeReader(patternString.toCharArray()), + new CodeReader(patternArray), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, @@ -188,7 +189,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte } catch (ParserFactoryError e) { } - LinkedList list = scanForNames( scanner, null ); + LinkedList list = scanForNames( scanner, null, patternArray ); char [] name = (char []) list.removeLast(); char [][] qualifications = new char [0][]; @@ -245,11 +246,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte return orPattern; } + char [] patternArray = patternString.toCharArray(); IScanner scanner=null; try { scanner = ParserFactory.createScanner( - new CodeReader(patternString.toCharArray()), + new CodeReader(patternArray), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, @@ -257,7 +259,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte } catch (ParserFactoryError e) { } - LinkedList list = scanForNames( scanner, null ); + LinkedList list = scanForNames( scanner, null, patternArray ); char [] name = (char []) list.removeLast(); char [][] qualifications = new char[0][]; @@ -285,12 +287,12 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte int index = patternString.indexOf( '(' ); String paramString = ( index == -1 ) ? "" : patternString.substring( index ); //$NON-NLS-1$ String nameString = ( index == -1 ) ? patternString : patternString.substring( 0, index ); - + char [] nameArray = nameString.toCharArray(); IScanner scanner=null; try { scanner = ParserFactory.createScanner( - new CodeReader(nameString.toCharArray()), + new CodeReader(nameArray), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, @@ -298,7 +300,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte } catch (ParserFactoryError e) { } - LinkedList names = scanForNames( scanner, null ); + LinkedList names = scanForNames( scanner, null, nameArray ); LinkedList params = scanForParameters( paramString ); @@ -334,21 +336,14 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte orPattern.addPattern( createClassPattern( patternString, STRUCT, limitTo, matchMode, caseSensitive ) ); return orPattern; } -// else if( searchFor == TYPE ){ -// OrPattern orPattern = new OrPattern(); -// 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; -// } + + char [] patternArray = patternString.toCharArray(); IScanner scanner =null; try { scanner = ParserFactory.createScanner( - new CodeReader(patternString.toCharArray()), + new CodeReader(patternArray), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, @@ -379,11 +374,13 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte } else { nullifyToken = false; } - if( nullifyToken ) + if( nullifyToken ){ + patternArray = CharOperation.subarray( patternArray, token.getLength() + 1, -1 ); token = null; + } } - LinkedList list = scanForNames( scanner, token ); + LinkedList list = scanForNames( scanner, token, patternArray ); char[] name = (char [])list.removeLast(); 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) { - + char [] patternArray = patternString.toCharArray(); IScanner scanner =null; try { scanner = ParserFactory.createScanner( - new CodeReader(patternString.toCharArray()), + new CodeReader(patternArray), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, @@ -409,7 +406,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte searchFor = DERIVED; - LinkedList list = scanForNames( scanner, null ); + LinkedList list = scanForNames( scanner, null, patternArray ); char[] name = (char [])list.removeLast(); 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) { - + char [] patternArray = patternString.toCharArray(); IScanner scanner =null; try { scanner = ParserFactory.createScanner( - new CodeReader(patternString.toCharArray()), + new CodeReader(patternArray), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, @@ -434,7 +431,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte searchFor = FRIEND; - LinkedList list = scanForNames( scanner, null ); + LinkedList list = scanForNames( scanner, null, patternArray ); char[] name = (char [])list.removeLast(); char [][] qualifications = new char[0][]; @@ -511,10 +508,11 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte return list; } - static private LinkedList scanForNames( IScanner scanner, IToken unusedToken ){ + static private LinkedList scanForNames( IScanner scanner, IToken unusedToken, char[] pattern ){ LinkedList list = new LinkedList(); String name = new String(""); //$NON-NLS-1$ + int idx = 0; try { IToken token = ( unusedToken != null ) ? unusedToken : scanner.nextToken(); @@ -531,33 +529,49 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte list.addLast( name.toCharArray() ); name = new String(""); //$NON-NLS-1$ lastTokenWasOperator = false; + idx += token.getLength(); + while( idx < pattern.length && CharOperation.isWhitespace( pattern[idx] ) ){ idx++; } break; case IToken.t_operator : - name += token.getImage() + " "; //$NON-NLS-1$ + name += token.getImage(); + name += ' '; lastTokenWasOperator = true; + idx += token.getLength(); + while( idx < pattern.length && CharOperation.isWhitespace( pattern[idx] ) ){ idx++; } break; default: if( token.getType() == IToken.tSTAR || token.getType() == IToken.tQUESTION - ){ + ) + { + if( idx > 0 && idx < pattern.length && CharOperation.isWhitespace( pattern[ idx - 1 ] ) && !lastTokenWasOperator ) + name += ' '; encounteredWild = true; } else if( !encounteredWild && !lastTokenWasOperator && name.length() > 0 && prev.getType() != IToken.tIDENTIFIER && prev.getType() != IToken.tLT && prev.getType() != IToken.tCOMPL && + prev.getType() != IToken.tARROW && prev.getType() != IToken.tLBRACKET && token.getType() != IToken.tRBRACKET && token.getType()!= IToken.tGT ){ - name += " "; //$NON-NLS-1$ + name += ' '; } else { encounteredWild = false; } 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; break; } @@ -570,8 +584,9 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte } catch ( ScannerException e ){ if( e.getProblem().getID() == IProblem.SCANNER_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$ + idx++; encounteredWild = true; lastTokenWasOperator = false; prev = null;