From c50efc6fd5dc7096fd215b15d52c29e1559768e2 Mon Sep 17 00:00:00 2001 From: John Camelon Date: Tue, 30 Sep 2003 13:42:44 +0000 Subject: [PATCH] Patch for Andrew Niefer core: - modify CSearchPattern.scanForNames to use same naming convention as TokenDuple.toString() - modify MatchLocator.report to use IASTOffsetableNamedElement.getNameEndOffset() core.tests: - added testBug43062 and testConstructorDestructor to FunctionMethodPatternTests - modified resources/search/classDecl.cpp & include.h to include more operators and a constructor --- core/org.eclipse.cdt.core.tests/ChangeLog | 5 ++++ .../resources/search/classDecl.cpp | 2 ++ .../resources/search/include.h | 4 +++ .../tests/FunctionMethodPatternTests.java | 30 ++++++++++++++++++- core/org.eclipse.cdt.core/search/ChangeLog | 5 ++++ .../core/search/matching/CSearchPattern.java | 18 ++++++++--- .../core/search/matching/MatchLocator.java | 14 +++++---- 7 files changed, 68 insertions(+), 10 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 6c4ab6c50e0..3f1f29c9fd2 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,8 @@ +2003-09-29 Andrew Niefer + added testBug43062 and testConstructorDestructor to FunctionMethodPatternTests + modified resources/search/classDecl.cpp & include.h to include more operators and a constructor + & destructor + 2003-09-29 Andrew Niefer added testbug43834() to ParserSymbolTableTest diff --git a/core/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp b/core/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp index e04a11995bf..52bd74045a8 100644 --- a/core/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp +++ b/core/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp @@ -5,6 +5,8 @@ class Heal{}; class A { + A() {} + ~A(){} class B { void f( A ); void f( A & ); diff --git a/core/org.eclipse.cdt.core.tests/resources/search/include.h b/core/org.eclipse.cdt.core.tests/resources/search/include.h index 11a272647aa..ce09cd6560c 100644 --- a/core/org.eclipse.cdt.core.tests/resources/search/include.h +++ b/core/org.eclipse.cdt.core.tests/resources/search/include.h @@ -6,6 +6,10 @@ class Head { Head * operator * ( int index ){ return array[ index ]; } Head * operator += ( int index ); + operator const short & (); + operator short (); + operator short int (); + Head ** array; }; 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 6341879e56a..3818b1519e7 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 @@ -138,7 +138,7 @@ public class FunctionMethodPatternTests extends BaseSearchTest { pattern = SearchEngine.createSearchPattern( "operator *", METHOD, DECLARATIONS, true ); search( workspace, pattern, scope, resultCollector ); matches = resultCollector.getSearchResults(); - assertEquals( matches.size(), 3 ); //3 in classDecl.cpp + assertEquals( matches.size(), 6 ); //3 in classDecl.cpp } public void testBug43498(){ @@ -163,4 +163,32 @@ public class FunctionMethodPatternTests extends BaseSearchTest { string = new char[] {'w','o','r','d','?','w','o','r','d'}; assertTrue( CharOperation.equals( string, methodPattern.getSimpleName() ) ); } + + public void testBug43062(){ + MethodDeclarationPattern pattern = (MethodDeclarationPattern) SearchEngine.createSearchPattern( "operator const short &", METHOD, DECLARATIONS, true ); + 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 ); + 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 ); + 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 ); + search( workspace, pattern, scope, resultCollector ); + + Set matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "~A", METHOD, DECLARATIONS, true ); + search( workspace, pattern, scope, resultCollector ); + + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + } } diff --git a/core/org.eclipse.cdt.core/search/ChangeLog b/core/org.eclipse.cdt.core/search/ChangeLog index 60b2b552b5c..ed5d7e28f7e 100644 --- a/core/org.eclipse.cdt.core/search/ChangeLog +++ b/core/org.eclipse.cdt.core/search/ChangeLog @@ -1,3 +1,8 @@ +2003-09-29 Andrew Niefer + - fix bug 43062 outline is confused on operator methods containing spaces + - modify CSearchPattern.scanForNames to use same naming convention as TokenDuple.toString() + - modify MatchLocator.report to use IASTOffsetableNamedElement.getNameEndOffset() + 2003-09-29 Andrew Niefer -fix NPE if IScannerInfoProvider returns null IScannerInfo 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 ee8b24173b5..059b7fffee8 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 @@ -433,6 +433,8 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte try { IToken token = ( unusedToken != null ) ? unusedToken : scanner.nextToken(); + IToken prev = null; + scanner.setThrowExceptionOnBadCharacterRead( true ); boolean encounteredWild = false; @@ -453,11 +455,17 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte default: if( token.getType() == IToken.tSTAR || - token.getType() == IToken.tQUESTION || - token.getType() == IToken.tCOMPL //Need this for destructors + token.getType() == IToken.tQUESTION ){ encounteredWild = true; - } else if( !encounteredWild && !lastTokenWasOperator && name.length() > 0 ) { + } else if( !encounteredWild && !lastTokenWasOperator && name.length() > 0 && + prev.getType() != IToken.tIDENTIFIER && + prev.getType() != IToken.tLT && + prev.getType() != IToken.tCOMPL && + prev.getType() != IToken.tLBRACKET && + token.getType() != IToken.tRBRACKET && + token.getType()!= IToken.tGT + ){ name += " "; } else { encounteredWild = false; @@ -468,6 +476,8 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte lastTokenWasOperator = false; break; } + prev = token; + token = null; while( token == null ){ try{ @@ -478,10 +488,10 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte name += "\\"; encounteredWild = true; lastTokenWasOperator = false; + prev = null; } } } - } } catch (EndOfFile e) { list.addLast( name.toCharArray() ); diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java index ce84abe4ffe..6a2a25bebb5 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java @@ -442,19 +442,23 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants protected void report( ISourceElementCallbackDelegate node, int accuracyLevel ){ try { int offset = 0; - int length = 0; + int end = 0; if( node instanceof IASTReference ){ IASTReference reference = (IASTReference) node; offset = reference.getOffset(); - length = reference.getName().length(); + end = offset + reference.getName().length();; if (VERBOSE) MatchLocator.verbose("Report Match: " + reference.getName()); } else if( node instanceof IASTOffsetableNamedElement ){ IASTOffsetableNamedElement offsetableElement = (IASTOffsetableNamedElement) node; offset = offsetableElement.getNameOffset() != 0 ? offsetableElement.getNameOffset() : offsetableElement.getStartingOffset(); - length = offsetableElement.getName().length(); + end = offsetableElement.getNameEndOffset(); + if( end == 0 ){ + end = offset + offsetableElement.getName().length();; + } + if (VERBOSE) MatchLocator.verbose("Report Match: " + offsetableElement.getName()); } @@ -482,9 +486,9 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants } if( currentResource != null ){ - match = resultCollector.createMatch( currentResource, offset, offset + length, object ); + match = resultCollector.createMatch( currentResource, offset, end, object ); } else if( currentPath != null ){ - match = resultCollector.createMatch( currentPath, offset, offset + length, object ); + match = resultCollector.createMatch( currentPath, offset, end, object ); } if( match != null ){ resultCollector.acceptMatch( match );