diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index d0fc7026fb7..9e1305c7eac 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -3,6 +3,9 @@ Moved testPostfixTypeIdExpression2() && testPostfixTypeIdTypeId2() to CompleteParseASTExpressionTest. Restructured expression reference tests so that the order of arrival will not cause JUnit failures. +2003-09-23 Andrew Niefer + Added FunctionMethodPatternTests.testBug43498() + 2003-09-23 Hoda Amer Added CompleteParseASTTest.testBug43373() Added QuickParseASTTests.testBug43371() 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 4227b05981b..6341879e56a 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 @@ -140,4 +140,27 @@ public class FunctionMethodPatternTests extends BaseSearchTest { 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() ) ); + } } diff --git a/core/org.eclipse.cdt.core/search/ChangeLog b/core/org.eclipse.cdt.core/search/ChangeLog index a0228fa6e16..3ec796b272c 100644 --- a/core/org.eclipse.cdt.core/search/ChangeLog +++ b/core/org.eclipse.cdt.core/search/ChangeLog @@ -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 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 446f01693e6..8fe3c8b647e 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 @@ -417,27 +417,37 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte 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 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte 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; } } } diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java index 9b77d0294fd..0e0afddd642 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MethodDeclarationPattern.java @@ -57,7 +57,10 @@ public class MethodDeclarationPattern extends CSearchPattern { searchFor = search; } - + public char [] getSimpleName(){ + return simpleName; + } + public int matchLevel(ISourceElementCallbackDelegate node, LimitTo limit ) { if( node instanceof IASTMethod ){ if( searchFor != METHOD || !canAccept( limit ) ){