[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] fix for bug 43129 - Search: Cannot search for definitions of global variables
|
fix bug 43129 - report definitions for variables, fields, enumerators and
namespaces.
core:
- 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
core.tests:
-added testbug43129() in OtherPatternTests
modified:
* resources/search/include.h
* resources/search/classDecl.cpp
* search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java
ui:
modify UI to allow selecting Definitions for more items
* src/org/eclipse/cdt/internal/ui/search/CSearchPage.java
tests run on windows & linux
-Andrew
Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.28
diff -u -r1.28 ChangeLog
--- search/ChangeLog 25 Sep 2003 19:51:46 -0000 1.28
+++ search/ChangeLog 25 Sep 2003 21:37:05 -0000
@@ -1,4 +1,11 @@
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
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.23
diff -u -r1.23 CSearchPattern.java
--- search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java 24 Sep 2003 13:36:40 -0000 1.23
+++ search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java 25 Sep 2003 21:37:06 -0000
@@ -132,6 +132,7 @@
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 @@
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;
}
Index: search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java,v
retrieving revision 1.32
diff -u -r1.32 MatchLocator.java
--- search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java 25 Sep 2003 19:51:46 -0000 1.32
+++ search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java 25 Sep 2003 21:37:06 -0000
@@ -116,7 +116,6 @@
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 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 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 @@
IASTEnumerator enumerator = (IASTEnumerator) iter.next();
lastDeclaration = enumerator;
check ( DECLARATIONS, enumerator );
+ check ( DEFINITIONS, enumerator );
}
}
@@ -240,6 +261,7 @@
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
lastDeclaration = namespaceDefinition;
check( DECLARATIONS, namespaceDefinition );
+ check( DEFINITIONS, namespaceDefinition );
pushScope( namespaceDefinition );
}
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.115
diff -u -r1.115 ChangeLog
--- ChangeLog 25 Sep 2003 19:51:50 -0000 1.115
+++ ChangeLog 25 Sep 2003 21:37:19 -0000
@@ -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()
Index: resources/search/classDecl.cpp
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp,v
retrieving revision 1.11
diff -u -r1.11 classDecl.cpp
--- resources/search/classDecl.cpp 18 Sep 2003 15:14:59 -0000 1.11
+++ resources/search/classDecl.cpp 25 Sep 2003 21:37:19 -0000
@@ -61,4 +61,18 @@
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;
+
+
Index: resources/search/include.h
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/resources/search/include.h,v
retrieving revision 1.2
diff -u -r1.2 include.h
--- resources/search/include.h 18 Sep 2003 15:14:59 -0000 1.2
+++ resources/search/include.h 25 Sep 2003 21:37:19 -0000
@@ -9,4 +9,15 @@
Head ** array;
};
+class DeclsAndDefns{
+ static int staticField;
+ int nonStaticField;
+
+ void forwardMethod();
+ void inlineMethod() {}
+};
+
+void forwardFunction();
+
+
#endif
Index: search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java,v
retrieving revision 1.14
diff -u -r1.14 OtherPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java 25 Sep 2003 19:51:50 -0000 1.14
+++ search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java 25 Sep 2003 21:37:19 -0000
@@ -240,6 +240,73 @@
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 @@
Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 4 );
}
-
}
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.191
diff -u -r1.191 ChangeLog
--- ChangeLog 25 Sep 2003 19:51:42 -0000 1.191
+++ ChangeLog 25 Sep 2003 21:37:29 -0000
@@ -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
Index: src/org/eclipse/cdt/internal/ui/search/CSearchPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchPage.java,v
retrieving revision 1.10
diff -u -r1.10 CSearchPage.java
--- src/org/eclipse/cdt/internal/ui/search/CSearchPage.java 22 Sep 2003 15:17:30 -0000 1.10
+++ src/org/eclipse/cdt/internal/ui/search/CSearchPage.java 25 Sep 2003 21:37:30 -0000
@@ -295,19 +295,17 @@
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++ )