diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 9da3062a507..f3d0bffa05b 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,10 @@ +2003-09-25 Andrew Niefer + -bug43129 - Cannot search for definitions of global variables + -added testbug43129() in OtherPatternTests + * resources/search/include.h + * resources/search/classDecl.cpp + * search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java + 2003-09-25 Hoda Amer Enabled CompleteParseASTExpressionTest.testPostfixTypenameIdentifier() 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 e2ea84c5778..e04a11995bf 100644 --- a/core/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp +++ b/core/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp @@ -61,4 +61,18 @@ Head * Head::operator *= ( int index ){ Head * Head::operator += ( int index ){ return array[ index ]; -} \ No newline at end of file +} + +extern int externalInt; +extern int externalIntWithInitializer = 2; +extern "C" int externCInt; +extern "C" int externCIntWithInitializer = 3; + +void forwardFunction() { } +void normalFunction() { } + +void DeclsAndDefns::forwardMethod(){ } + +int DeclsAndDefns::staticField = 5; + + 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 dedd7c8ca61..11a272647aa 100644 --- a/core/org.eclipse.cdt.core.tests/resources/search/include.h +++ b/core/org.eclipse.cdt.core.tests/resources/search/include.h @@ -9,4 +9,15 @@ class Head { Head ** array; }; +class DeclsAndDefns{ + static int staticField; + int nonStaticField; + + void forwardMethod(); + void inlineMethod() {} +}; + +void forwardFunction(); + + #endif \ No newline at end of file diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java index 4f85fe0ff6d..46ef3edbc39 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java @@ -240,6 +240,73 @@ public class OtherPatternTests extends BaseSearchTest { assertEquals( matches.size(), 3 ); } + public void testBug43129(){ + ICSearchPattern pattern = SearchEngine.createSearchPattern( "externalInt", VAR, DECLARATIONS, true ); + search( workspace, pattern, scope, resultCollector ); + Set matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "externalInt", VAR, DEFINITIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 0 ); + + pattern = SearchEngine.createSearchPattern( "externalIntWithInitializer", VAR, DECLARATIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "externalIntWithInitializer", VAR, DEFINITIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "externCInt", VAR, DECLARATIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "externCInt", VAR, DEFINITIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 0 ); + + pattern = SearchEngine.createSearchPattern( "externCIntWithInitializer", VAR, DECLARATIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "externCIntWithInitializer", VAR, DEFINITIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "forwardFunction", FUNCTION, ALL_OCCURRENCES, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 2 ); + + pattern = SearchEngine.createSearchPattern( "normalFunction", FUNCTION, DECLARATIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "normalFunction", FUNCTION, DEFINITIONS, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 1 ); + + pattern = SearchEngine.createSearchPattern( "forwardMethod", METHOD, ALL_OCCURRENCES, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 2 ); + + pattern = SearchEngine.createSearchPattern( "staticField", FIELD, ALL_OCCURRENCES, true ); + search( workspace, pattern, scope, resultCollector ); + matches = resultCollector.getSearchResults(); + assertEquals( matches.size(), 2 ); + } + public void testNoResourceSearching(){ String pluginRoot = org.eclipse.core.runtime.Platform.getPlugin("org.eclipse.cdt.core.tests").find(new Path("/")).getFile(); String path = pluginRoot + "resources/search/include.h"; @@ -256,5 +323,4 @@ public class OtherPatternTests extends BaseSearchTest { Set matches = resultCollector.getSearchResults(); assertEquals( matches.size(), 4 ); } - } diff --git a/core/org.eclipse.cdt.core/search/ChangeLog b/core/org.eclipse.cdt.core/search/ChangeLog index ac388b59b86..881f9273b71 100644 --- a/core/org.eclipse.cdt.core/search/ChangeLog +++ b/core/org.eclipse.cdt.core/search/ChangeLog @@ -1,3 +1,10 @@ +2003-09-25 Andrew Niefer + - bug43129 - Cannot search for definitions of global variables + - check definitions for variables, fields, enumerators and namespaces + - handle enter/exitLinkageSpecification + * search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java + * search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java + 2003-09-25 Andrew Niefer - partial fix for 43664 Modify Matchlocator to not try and create a link if we have no resource, instead just use the path 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 8fe3c8b647e..1e433df3461 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 @@ -132,6 +132,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte if( limitTo == ALL_OCCURRENCES ){ OrPattern orPattern = new OrPattern(); orPattern.addPattern( createNamespacePattern( patternString, DECLARATIONS, matchMode, caseSensitive ) ); + orPattern.addPattern( createNamespacePattern( patternString, DEFINITIONS, matchMode, caseSensitive ) ); orPattern.addPattern( createNamespacePattern( patternString, REFERENCES, matchMode, caseSensitive ) ); return orPattern; } @@ -190,6 +191,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte OrPattern orPattern = new OrPattern(); orPattern.addPattern( createFieldPattern( patternString, searchFor, DECLARATIONS, matchMode, caseSensitive ) ); orPattern.addPattern( createFieldPattern( patternString, searchFor, REFERENCES, matchMode, caseSensitive ) ); + orPattern.addPattern( createFieldPattern( patternString, searchFor, DEFINITIONS, matchMode, caseSensitive ) ); return orPattern; } 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 4d694358253..51f07b6c894 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 @@ -116,7 +116,6 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants public void acceptASMDefinition(IASTASMDefinition asmDefinition) { } public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration) {} - public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) { } public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) { } public void enterTemplateSpecialization(IASTTemplateSpecialization specialization) { } public void enterTemplateInstantiation(IASTTemplateInstantiation instantiation) { } @@ -124,11 +123,17 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants public void exitTemplateDeclaration(IASTTemplateDeclaration declaration) {} public void exitTemplateSpecialization(IASTTemplateSpecialization specialization) { } public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) { } - public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec) { } - + public void enterCodeBlock(IASTCodeScope scope) { } public void exitCodeBlock(IASTCodeScope scope) { } + public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec){ + pushScope( linkageSpec ); + } + + public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec){ + popScope(); + } /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptParameterReference(org.eclipse.cdt.internal.core.parser.ast.complete.ASTParameterReference) @@ -157,12 +162,27 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants public void acceptVariable(IASTVariable variable){ lastDeclaration = variable; - check( DECLARATIONS, variable ); + + check( DECLARATIONS, variable ); + + //A declaration is a definition unless...: + //it contains the extern specifier or a linkage-spec and no initializer + if( variable.getInitializerClause() != null || + ( !variable.isExtern() && !(currentScope instanceof IASTLinkageSpecification) ) ){ + check( DEFINITIONS, variable ); + } } public void acceptField(IASTField field){ - lastDeclaration = field; - check( DECLARATIONS, field ); + lastDeclaration = field; + if( currentScope instanceof IASTClassSpecifier ){ + check( DECLARATIONS, field ); + if( !field.isStatic() ){ + check( DEFINITIONS, field ); + } + } else { + check( DEFINITIONS, field ); + } } public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration){ @@ -173,6 +193,7 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants IASTEnumerator enumerator = (IASTEnumerator) iter.next(); lastDeclaration = enumerator; check ( DECLARATIONS, enumerator ); + check ( DEFINITIONS, enumerator ); } } @@ -240,6 +261,7 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) { lastDeclaration = namespaceDefinition; check( DECLARATIONS, namespaceDefinition ); + check( DEFINITIONS, namespaceDefinition ); pushScope( namespaceDefinition ); } diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 5dfa36fc154..6db09683142 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,8 @@ +2003-09-25 Andrew Niefer + -bug43129 - Search: Cannot search for definitions of global variables + - modify UI to allow selecting Definitions for more items + * src/org/eclipse/cdt/internal/ui/search/CSearchPage.java + 2003-09-25 Hoda Amer Solution to bug#43646: Code Assist won't work if missing end bracket diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java index 868d2fbfabc..18e9215f50b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java @@ -295,19 +295,17 @@ public class CSearchPage extends DialogPage implements ISearchPage, ICSearchCons private void setLimitTo( List searchFor ) { HashSet set = new HashSet(); - - set.add( DEFINITIONS ); + set.add( DECLARATIONS ); set.add( REFERENCES ); set.add( ALL_OCCURRENCES ); for (Iterator iter = searchFor.iterator(); iter.hasNext();) { SearchFor element = (SearchFor) iter.next(); - if( element != FUNCTION && element != METHOD ){ - set.remove( DEFINITIONS ); + if( element == FUNCTION || element == METHOD || element == VAR || element == FIELD || element == NAMESPACE ){ + set.add( DEFINITIONS ); break; } - } for( int i = 0; i < fLimitTo.length; i++ )