Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] bug43498 - Search fails with ? on first letter of second word

core:
- modifications to CSearchPattern.scanForNames()
- add getSimpleName to MethodDeclarationPattern

tests:
- Added FunctionMethodPatternTests.testBug43498()


Suite tests passed on windows & Linux

-Andrew

Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.26
diff -u -r1.26 ChangeLog
--- search/ChangeLog	22 Sep 2003 18:38:24 -0000	1.26
+++ search/ChangeLog	23 Sep 2003 21:04:15 -0000
@@ -1,3 +1,8 @@
+2003-09-23 Andrew Niefer
+	fix bug 43498 Search with ? fails on first letter of second word
+		-modifications to CSearchPattern.scanForNames()
+		-add getSimpleName to MethodDeclarationPattern
+
 2003-09-19 Andrew Niefer
 	fix bug 43327 Code Complete finds local variables  
 	- modified MatchLocator to not report local declarations when boolean is set
Index: search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java,v
retrieving revision 1.22
diff -u -r1.22 CSearchPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	18 Sep 2003 15:15:08 -0000	1.22
+++ search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java	23 Sep 2003 21:04:16 -0000
@@ -417,27 +417,37 @@
 			IToken token = ( unusedToken != null ) ? unusedToken : scanner.nextToken();
 			scanner.setThrowExceptionOnBadCharacterRead( true );
 			
-			boolean lastTokenWasWild = false;
+			boolean encounteredWild = false;
+			boolean lastTokenWasOperator = false;
 			
 			while( true ){
 				switch( token.getType() ){
 					case IToken.tCOLONCOLON :
 						list.addLast( name.toCharArray() );
 						name = new String("");
+						lastTokenWasOperator = false;
 						break;
+					
+					case IToken.t_operator :
+						name += token.getImage() + " ";
+						lastTokenWasOperator = true;
+						break;
+					
 					default:
 						if( token.getType() == IToken.tSTAR || 
 						    token.getType() == IToken.tQUESTION ||
 						    token.getType() == IToken.tCOMPL //Need this for destructors
 						    ){
-							lastTokenWasWild = true;
-						} else if( !lastTokenWasWild && name.length() > 0 ) {
+							encounteredWild = true;
+						} else if( !encounteredWild && !lastTokenWasOperator && name.length() > 0 )	{
 							name += " ";
 						} else {
-							lastTokenWasWild = false;
+							encounteredWild = false;
 						}
 						
 						name += token.getImage();
+
+						lastTokenWasOperator = false;
 						break;
 				}
 				token = null;
@@ -446,9 +456,10 @@
 						token = scanner.nextToken();
 					} catch ( ScannerException e ){
 						if( e.getErrorCode() == ScannerException.ErrorCode.INVALID_ESCAPE_CHARACTER_SEQUENCE ){
-							if( !lastTokenWasWild ) name += " ";
+							if( !encounteredWild && !lastTokenWasOperator ) name += " ";
 							name += "\\";
-							lastTokenWasWild = true;
+							encounteredWild = true;
+							lastTokenWasOperator = false;
 						}
 					}
 				}
Index: search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java,v
retrieving revision 1.10
diff -u -r1.10 MethodDeclarationPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java	18 Sep 2003 15:15:08 -0000	1.10
+++ search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java	23 Sep 2003 21:04:16 -0000
@@ -57,7 +57,10 @@
 		searchFor = search;
 	}
 
-
+	public char [] getSimpleName(){
+		return simpleName;
+	}
+	
 	public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit ) {
 		if( node instanceof IASTMethod ){
 			if( searchFor != METHOD || !canAccept( limit ) ){
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.107
diff -u -r1.107 ChangeLog
--- ChangeLog	23 Sep 2003 20:46:12 -0000	1.107
+++ ChangeLog	23 Sep 2003 21:04:01 -0000
@@ -1,3 +1,6 @@
+2003-09-23 Andrew Niefer
+	Added FunctionMethodPatternTests.testBug43498()
+
 2003-09-23 Hoda Amer
 	Added CompleteParseASTTest.testBug43373()
 	Added QuickParseASTTests.testBug43371()
Index: search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java,v
retrieving revision 1.9
diff -u -r1.9 FunctionMethodPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java	19 Sep 2003 16:00:44 -0000	1.9
+++ search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java	23 Sep 2003 21:04:01 -0000
@@ -140,4 +140,27 @@
 		matches = resultCollector.getSearchResults();
 		assertEquals( matches.size(), 3 ); //3 in classDecl.cpp
 	}
+	
+	public void testBug43498(){
+		ICSearchPattern pattern = SearchEngine.createSearchPattern( "operator ?elete", METHOD, DECLARATIONS, true );
+
+		assertTrue( pattern instanceof MethodDeclarationPattern );		
+		MethodDeclarationPattern methodPattern = (MethodDeclarationPattern) pattern;
+		
+		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 );
+		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 );
+		assertTrue( pattern instanceof MethodDeclarationPattern );		
+		methodPattern = (MethodDeclarationPattern) pattern;
+
+		string = new char[] {'w','o','r','d','?','w','o','r','d'};
+		assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) );
+	}
 }

Back to the top