[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Search Result Collector changes
|
This patch contains modifications to BasicSearchMatch and
BasicSearchResultCollector so that the collector will not accept matches
that have already been seen.
( Addresses the problem of seeing a class definition in a header file
multiple times because that header was included from multiple cpp files)
This patch also fixes a small bug in finding the resource for header files
we enter while parsing.
-Andrew
Index: src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java,v
retrieving revision 1.7
diff -u -r1.7 CSearchResultCollector.java
--- src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java 29 Jul 2003 22:47:59 -0000 1.7
+++ src/org/eclipse/cdt/internal/ui/search/CSearchResultCollector.java 1 Aug 2003 18:59:24 -0000
@@ -76,14 +76,14 @@
}
}
- public void acceptMatch( IMatch match ) throws CoreException
+ public boolean acceptMatch( IMatch match ) throws CoreException
{
- super.acceptMatch( match );
-
BasicSearchMatch searchMatch = (BasicSearchMatch) match;
if( searchMatch.resource == null )
- return;
-
+ return false;
+
+ if( !super.acceptMatch( match ) )
+ return false;
IMarker marker = searchMatch.resource.createMarker( SearchUI.SEARCH_MARKER );
@@ -102,6 +102,8 @@
_view.addMatch( searchMatch.name, groupKey, searchMatch.resource, marker );
_matchCount++;
+
+ return true;
}
/* (non-Javadoc)
Index: search/ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/ChangeLog,v
retrieving revision 1.11
diff -u -r1.11 ChangeLog
--- search/ChangeLog 29 Jul 2003 22:47:57 -0000 1.11
+++ search/ChangeLog 1 Aug 2003 19:08:25 -0000
@@ -1,3 +1,7 @@
+2003-08-01 Andrew Niefer
+ - Modified BasicSearchResultCollector to only accept matches it has not already seen
+ - fixed bug in finding a resource when entering includes
+
2003-07-29 Andrew Niefer
Refactoring Search result collection:
- Modified ICSearchResultCollector
Index: search/org/eclipse/cdt/core/search/BasicSearchMatch.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/BasicSearchMatch.java,v
retrieving revision 1.2
diff -u -r1.2 BasicSearchMatch.java
--- search/org/eclipse/cdt/core/search/BasicSearchMatch.java 30 Jul 2003 19:17:11 -0000 1.2
+++ search/org/eclipse/cdt/core/search/BasicSearchMatch.java 1 Aug 2003 19:08:25 -0000
@@ -36,6 +36,47 @@
endOffset = basicMatch.endOffset;
}
+ public int hashCode(){
+ String hashString = "";
+
+ hashString += name;
+ hashString += ":" + parentName;
+ hashString += ":" + getLocation().toString();
+ hashString += ":" + startOffset + ":" + endOffset;
+ hashString += ":" + type + ":" + visibility;
+
+ return hashString.hashCode();
+ }
+
+ public boolean equals(Object obj){
+ if( !(obj instanceof BasicSearchMatch ) ){
+ return false;
+ }
+ BasicSearchMatch match = (BasicSearchMatch)obj;
+
+ IPath path = getLocation();
+
+ if( startOffset != match.getStartOffset() || endOffset != match.getEndOffset() )
+ return false;
+
+ if( type != match.getElementType() || visibility != match.getVisibility() )
+ return false;
+
+ if( !name.equals( match.getName() ) || !parentName.equals( match.getParentName() ) )
+ return false;
+
+ IPath thisPath = getLocation();
+ IPath matchPath = match.getLocation();
+ if( thisPath != null && matchPath != null ){
+ if( !thisPath.equals( matchPath ) )
+ return false;
+ } else if( thisPath != matchPath ){
+ return false;
+ }
+
+ return true;
+ }
+
public String name = null;
public String parentName = null;
Index: search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java,v
retrieving revision 1.1
diff -u -r1.1 BasicSearchResultCollector.java
--- search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java 29 Jul 2003 22:47:57 -0000 1.1
+++ search/org/eclipse/cdt/core/search/BasicSearchResultCollector.java 1 Aug 2003 19:08:25 -0000
@@ -13,12 +13,26 @@
*/
package org.eclipse.cdt.core.search;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
-import org.eclipse.cdt.core.parser.ast.*;
+import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
+import org.eclipse.cdt.core.parser.ast.ASTClassKind;
+import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
+import org.eclipse.cdt.core.parser.ast.IASTField;
+import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IASTMethod;
+import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
+import org.eclipse.cdt.core.parser.ast.IASTOffsetableElement;
+import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.parser.ast.IASTQualifiedNameElement;
+import org.eclipse.cdt.core.parser.ast.IASTReference;
+import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IASTVariable;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@@ -33,7 +47,7 @@
public class BasicSearchResultCollector implements ICSearchResultCollector {
public void aboutToStart() {
- results = new LinkedList();
+ results = new HashSet();
}
public void done() {
@@ -43,9 +57,13 @@
return null;
}
- public IMatch createMatch(Object fileResource, int start, int end, ISourceElementCallbackDelegate node, IASTScope parent) throws CoreException {
+ public IMatch createMatch(Object fileResource, int start, int end, ISourceElementCallbackDelegate node, IASTScope parent) throws CoreException
+ {
BasicSearchMatch result = new BasicSearchMatch();
-
+ return createMatch( result, fileResource, start, end, node, parent );
+ }
+
+ public IMatch createMatch( BasicSearchMatch result, Object fileResource, int start, int end, ISourceElementCallbackDelegate node, IASTScope parent) throws CoreException {
if( fileResource instanceof IResource )
result.resource = (IResource) fileResource;
else if( fileResource instanceof IPath )
@@ -81,11 +99,15 @@
}
- public void acceptMatch(IMatch match) throws CoreException {
- results.add( match );
+ public boolean acceptMatch(IMatch match) throws CoreException {
+ if( !results.contains( match ) ){
+ results.add( match );
+ return true;
+ }
+ return false;
}
- public List getSearchResults(){
+ public Set getSearchResults(){
return results;
}
@@ -140,6 +162,5 @@
}
}
- private List results;
-
+ private Set results;
}
Index: search/org/eclipse/cdt/core/search/ICSearchResultCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/ICSearchResultCollector.java,v
retrieving revision 1.6
diff -u -r1.6 ICSearchResultCollector.java
--- search/org/eclipse/cdt/core/search/ICSearchResultCollector.java 29 Jul 2003 22:47:57 -0000 1.6
+++ search/org/eclipse/cdt/core/search/ICSearchResultCollector.java 1 Aug 2003 19:08:25 -0000
@@ -65,7 +65,8 @@
public IMatch createMatch( Object fileResource, int start, int end,
ISourceElementCallbackDelegate node, IASTScope parent) throws CoreException;
- public void acceptMatch( IMatch match ) throws CoreException;
+ //return whether or not the match was accepted
+ public boolean acceptMatch( IMatch match ) throws CoreException;
/**
* Returns the progress monitor used to report progress.
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.15
diff -u -r1.15 MatchLocator.java
--- search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java 30 Jul 2003 01:31:14 -0000 1.15
+++ search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java 1 Aug 2003 19:08:25 -0000
@@ -29,7 +29,36 @@
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserFactory;
import org.eclipse.cdt.core.parser.ParserMode;
-import org.eclipse.cdt.core.parser.ast.*;
+import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
+import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTClassReference;
+import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
+import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
+import org.eclipse.cdt.core.parser.ast.IASTField;
+import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
+import org.eclipse.cdt.core.parser.ast.IASTFunction;
+import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
+import org.eclipse.cdt.core.parser.ast.IASTInclusion;
+import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
+import org.eclipse.cdt.core.parser.ast.IASTMacro;
+import org.eclipse.cdt.core.parser.ast.IASTMethod;
+import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
+import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
+import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
+import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
+import org.eclipse.cdt.core.parser.ast.IASTReference;
+import org.eclipse.cdt.core.parser.ast.IASTScope;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
+import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
+import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
+import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
+import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
+import org.eclipse.cdt.core.parser.ast.IASTVariable;
+import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
import org.eclipse.cdt.core.search.ICSearchConstants;
import org.eclipse.cdt.core.search.ICSearchPattern;
import org.eclipse.cdt.core.search.ICSearchResultCollector;
@@ -190,7 +219,7 @@
IResource resource = null;
if( workspaceRoot != null ){
- resource = workspaceRoot.findMember( path, true );
+ resource = workspaceRoot.getFileForLocation( path );
if( resource == null ){
IFile file = workspaceRoot.getFile( path );
try{
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.49
diff -u -r1.49 ChangeLog
--- ChangeLog 1 Aug 2003 17:43:07 -0000 1.49
+++ ChangeLog 1 Aug 2003 19:08:10 -0000
@@ -1,3 +1,8 @@
+2003-08-01 Andrew Niefer
+ Added resources/search/header.h
+ Added ClassDeclarationPatternTests.testHeadersVisitedTwice()
+ Modified other search tests to reflect ICSearchResultCollector changes
+
2003-07-31 Andrew Niefer
Added ParserSymbolTableTest.testForwardClassDeclaration
Added ParserSymbolTableTest.testForwardDeclarationUsedAsFunctionParam
Index: resources/search/classDecl.cpp
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/resources/search/classDecl.cpp,v
retrieving revision 1.3
diff -u -r1.3 classDecl.cpp
--- resources/search/classDecl.cpp 29 Jul 2003 12:40:11 -0000 1.3
+++ resources/search/classDecl.cpp 1 Aug 2003 19:08:10 -0000
@@ -1,3 +1,7 @@
+#include "include.h"
+
+class Heal{};
+
class A {
class B {
void f( A );
Index: resources/search/include.h
===================================================================
RCS file: resources/search/include.h
diff -N resources/search/include.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ resources/search/include.h 1 Aug 2003 19:08:10 -0000
@@ -0,0 +1,7 @@
+#ifndef INCLUDE_H
+#define INCLUDE_H
+
+class Head {
+};
+
+#endif
\ No newline at end of file
Index: search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java,v
retrieving revision 1.2
diff -u -r1.2 BaseSearchTest.java
--- search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java 29 Jul 2003 22:47:55 -0000 1.2
+++ search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java 1 Aug 2003 19:08:10 -0000
@@ -78,7 +78,8 @@
//Add a file to the project
importFile("mail.cpp", "resources/indexer/mail.cpp");
importFile("classDecl.cpp", "resources/search/classDecl.cpp");
-
+ importFile("head.h", "resources/search/include.h");
+
scope = SearchEngine.createWorkspaceScope();
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
Index: search/org/eclipse/cdt/core/search/tests/ClassDeclarationPatternTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/ClassDeclarationPatternTests.java,v
retrieving revision 1.8
diff -u -r1.8 ClassDeclarationPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/ClassDeclarationPatternTests.java 29 Jul 2003 22:47:55 -0000 1.8
+++ search/org/eclipse/cdt/core/search/tests/ClassDeclarationPatternTests.java 1 Aug 2003 19:08:10 -0000
@@ -14,7 +14,7 @@
package org.eclipse.cdt.core.search.tests;
import java.util.Iterator;
-import java.util.List;
+import java.util.Set;
import org.eclipse.cdt.core.search.ICSearchConstants;
import org.eclipse.cdt.core.search.ICSearchPattern;
@@ -23,7 +23,6 @@
import org.eclipse.cdt.internal.core.search.CharOperation;
import org.eclipse.cdt.internal.core.search.matching.ClassDeclarationPattern;
import org.eclipse.cdt.internal.core.search.matching.MatchLocator;
-//import org.eclipse.cdt.internal.ui.search.Match;
/**
@@ -49,7 +48,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 2 );
}
@@ -66,7 +65,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
}
@@ -74,7 +73,7 @@
ICSearchPattern pattern = SearchEngine.createSearchPattern( "A::B", TYPE, DECLARATIONS, true );
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
/* Test should find 1 match */
assertTrue( matches != null );
@@ -100,13 +99,13 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
pattern = SearchEngine.createSearchPattern( "NS::B::A", TYPE, DECLARATIONS, true );
search( workspace, pattern, scope, resultCollector );
- List matches2 = resultCollector.getSearchResults();
+ Set matches2 = resultCollector.getSearchResults();
assertTrue( matches2 != null );
assertEquals( matches2.size(), 1 );
@@ -125,7 +124,7 @@
ICSearchPattern pattern = SearchEngine.createSearchPattern( "::*::A", TYPE, DECLARATIONS, true );
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 0 );
pattern = SearchEngine.createSearchPattern( "NS::*::A", TYPE, DECLARATIONS, false );
@@ -139,7 +138,7 @@
ICSearchPattern pattern = SearchEngine.createSearchPattern( "struct A", TYPE, DECLARATIONS, true );
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
pattern = SearchEngine.createSearchPattern( "union u", TYPE, DECLARATIONS, true );
@@ -178,7 +177,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
@@ -197,7 +196,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 3 );
}
@@ -206,7 +205,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
IMatch match = (IMatch) matches.iterator().next();
@@ -217,7 +216,7 @@
ICSearchPattern pattern = SearchEngine.createSearchPattern( "::NS::NS2::a", STRUCT, REFERENCES, true );
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
IMatch match = (IMatch) matches.iterator().next();
@@ -229,11 +228,22 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
IMatch match = (IMatch) matches.iterator().next();
assertTrue( match.getParentName().equals( "NS3::C" ) );
+ }
+
+ public void testHeadersVisitedTwice(){
+ ICSearchPattern pattern = SearchEngine.createSearchPattern( "Hea*", CLASS, DECLARATIONS, true );
+
+ search( workspace, pattern, scope, resultCollector );
+
+ Set matches = resultCollector.getSearchResults();
+
+ //1 for Heal, 1 for Head
+ assertEquals( matches.size(), 2 );
}
}
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.3
diff -u -r1.3 FunctionMethodPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java 29 Jul 2003 22:47:55 -0000 1.3
+++ search/org/eclipse/cdt/core/search/tests/FunctionMethodPatternTests.java 1 Aug 2003 19:08:10 -0000
@@ -13,7 +13,7 @@
*/
package org.eclipse.cdt.core.search.tests;
-import java.util.List;
+import java.util.Set;
import org.eclipse.cdt.core.search.ICSearchPattern;
import org.eclipse.cdt.core.search.SearchEngine;
@@ -73,7 +73,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
}
@@ -83,7 +83,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 ); }
}
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.3
diff -u -r1.3 OtherPatternTests.java
--- search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java 29 Jul 2003 22:47:55 -0000 1.3
+++ search/org/eclipse/cdt/core/search/tests/OtherPatternTests.java 1 Aug 2003 19:08:10 -0000
@@ -13,7 +13,7 @@
*/
package org.eclipse.cdt.core.search.tests;
-import java.util.List;
+import java.util.Set;
import org.eclipse.cdt.core.search.ICSearchPattern;
import org.eclipse.cdt.core.search.IMatch;
@@ -95,7 +95,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 3 );
}
@@ -105,7 +105,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 1 );
@@ -118,7 +118,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 2 );
}
@@ -127,7 +127,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 2 );
IMatch match = (IMatch) matches.iterator().next();
@@ -139,7 +139,7 @@
search( workspace, pattern, scope, resultCollector );
- List matches = resultCollector.getSearchResults();
+ Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 2 );
IMatch match = (IMatch) matches.iterator().next();