1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

bug 61044 - report matches after each compilation unit

This commit is contained in:
Andrew Niefer 2004-05-17 18:06:33 +00:00
parent c5dabe7b00
commit 9f21cf4d4a
6 changed files with 54 additions and 81 deletions

View file

@ -13,24 +13,20 @@
*/ */
package org.eclipse.cdt.core.search.tests; package org.eclipse.cdt.core.search.tests;
import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.search.BasicSearchMatch; import org.eclipse.cdt.core.search.BasicSearchMatch;
import org.eclipse.cdt.core.search.ICSearchPattern; import org.eclipse.cdt.core.search.ICSearchPattern;
import org.eclipse.cdt.core.search.IMatch; import org.eclipse.cdt.core.search.IMatch;
import org.eclipse.cdt.core.search.OrPattern; import org.eclipse.cdt.core.search.OrPattern;
import org.eclipse.cdt.core.search.SearchEngine; import org.eclipse.cdt.core.search.SearchEngine;
import org.eclipse.cdt.internal.core.CharOperation; import org.eclipse.cdt.internal.core.CharOperation;
import org.eclipse.cdt.internal.core.search.AcceptMatchOperation;
import org.eclipse.cdt.internal.core.search.matching.FieldDeclarationPattern; import org.eclipse.cdt.internal.core.search.matching.FieldDeclarationPattern;
import org.eclipse.cdt.internal.core.search.matching.MatchLocator; import org.eclipse.cdt.internal.core.search.matching.MatchLocator;
import org.eclipse.cdt.internal.core.search.matching.NamespaceDeclarationPattern; import org.eclipse.cdt.internal.core.search.matching.NamespaceDeclarationPattern;
import org.eclipse.cdt.testplugin.CTestPlugin; import org.eclipse.cdt.testplugin.CTestPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
/** /**
@ -338,24 +334,15 @@ public class OtherPatternTests extends BaseSearchTest {
resultCollector.aboutToStart(); resultCollector.aboutToStart();
ArrayList matchesList = new ArrayList();
MatchLocator matchLocator = new MatchLocator( pattern, resultCollector, scope); MatchLocator matchLocator = new MatchLocator( pattern, resultCollector, scope);
matchLocator.setProgressMonitor(monitor); matchLocator.setProgressMonitor(monitor);
try { try {
matchLocator.locateMatches( new String [] { path }, workspace, null, matchesList); matchLocator.locateMatches( new String [] { path }, workspace, null );
} catch (InterruptedException e1) { } catch (InterruptedException e1) {
} }
AcceptMatchOperation acceptMatchOp = new AcceptMatchOperation(resultCollector, matchesList); resultCollector.done();
try {
CCorePlugin.getWorkspace().run(acceptMatchOp,null);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
//resultCollector.done();
Set matches = resultCollector.getSearchResults(); Set matches = resultCollector.getSearchResults();
assertEquals( matches.size(), 4 ); assertEquals( matches.size(), 4 );

View file

@ -1,3 +1,6 @@
2004-05-17 Andrew Niefer
bug 61044 - report search matches at the end of each compilation unit
2004-05-14 Bogdan Gheorghe 2004-05-14 Bogdan Gheorghe
bug 60491 bug 60491
Added working copy filtering to search engine Added working copy filtering to search engine

View file

@ -6,7 +6,6 @@
*/ */
package org.eclipse.cdt.core.search; package org.eclipse.cdt.core.search;
import java.util.ArrayList;
import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspace;
@ -23,7 +22,7 @@ public interface IMatchLocator
ISourceElementRequestor, ISourceElementRequestor,
ICSearchConstants { ICSearchConstants {
public void locateMatches( String [] paths, IWorkspace workspace, IWorkingCopy[] workingCopies,ArrayList matches ) throws InterruptedException; public void locateMatches( String [] paths, IWorkspace workspace, IWorkingCopy[] workingCopies ) throws InterruptedException;
public void setProgressMonitor(IProgressMonitor progressMonitor); public void setProgressMonitor(IProgressMonitor progressMonitor);
} }

View file

@ -23,7 +23,6 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.internal.core.Util; import org.eclipse.cdt.internal.core.Util;
import org.eclipse.cdt.internal.core.model.CModelManager; import org.eclipse.cdt.internal.core.model.CModelManager;
import org.eclipse.cdt.internal.core.search.AcceptMatchOperation;
import org.eclipse.cdt.internal.core.search.CSearchScope; import org.eclipse.cdt.internal.core.search.CSearchScope;
import org.eclipse.cdt.internal.core.search.CWorkspaceScope; import org.eclipse.cdt.internal.core.search.CWorkspaceScope;
import org.eclipse.cdt.internal.core.search.PathCollector; import org.eclipse.cdt.internal.core.search.PathCollector;
@ -33,7 +32,6 @@ import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
import org.eclipse.cdt.internal.core.search.matching.MatchLocator; import org.eclipse.cdt.internal.core.search.matching.MatchLocator;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
@ -172,54 +170,48 @@ public class SearchEngine implements ICSearchConstants{
/* search is starting */ /* search is starting */
collector.aboutToStart(); collector.aboutToStart();
ArrayList matches = new ArrayList();
try{ //initialize progress monitor
//initialize progress monitor IProgressMonitor progressMonitor = collector.getProgressMonitor();
IProgressMonitor progressMonitor = collector.getProgressMonitor(); if( progressMonitor != null ){
if( progressMonitor != null ){ progressMonitor.beginTask( Util.bind("engine.searching"), 100 ); //$NON-NLS-1$
progressMonitor.beginTask( Util.bind("engine.searching"), 100 ); //$NON_NLS-1$ //$NON-NLS-1$
}
/* index search */
PathCollector pathCollector = new PathCollector();
CModelManager modelManager = CModelManager.getDefault();
IndexManager indexManager = modelManager.getIndexManager();
SubProgressMonitor subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 5 );
indexManager.performConcurrentJob(
new PatternSearchJob(
(CSearchPattern) pattern,
scope,
pathCollector,
indexManager
),
ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
subMonitor,
null );
subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 95 );
matchLocator.setProgressMonitor(subMonitor);
if( progressMonitor != null && progressMonitor.isCanceled() )
throw new InterruptedException();
//indexer might have had a # files left to index subtask, replace that with searching again
if( progressMonitor != null )
progressMonitor.subTask( Util.bind( "engine.searching" ) );
String[] indexerPaths = pathCollector.getPaths();
pathCollector = null; // release
matchLocator.locateMatches( indexerPaths, workspace, filterWorkingCopies(this.workingCopies, scope), matches);
} finally {
AcceptMatchOperation acceptMatchOp = new AcceptMatchOperation(collector, matches);
try {
CCorePlugin.getWorkspace().run(acceptMatchOp,null);
} catch (CoreException e) {}
} }
/* index search */
PathCollector pathCollector = new PathCollector();
CModelManager modelManager = CModelManager.getDefault();
IndexManager indexManager = modelManager.getIndexManager();
SubProgressMonitor subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 5 );
indexManager.performConcurrentJob(
new PatternSearchJob(
(CSearchPattern) pattern,
scope,
pathCollector,
indexManager
),
ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
subMonitor,
null );
subMonitor = (progressMonitor == null ) ? null : new SubProgressMonitor( progressMonitor, 95 );
matchLocator.setProgressMonitor(subMonitor);
if( progressMonitor != null && progressMonitor.isCanceled() )
throw new InterruptedException();
//indexer might have had a # files left to index subtask, replace that with searching again
if( progressMonitor != null )
progressMonitor.subTask( Util.bind( "engine.searching" ) ); //$NON-NLS-1$
String[] indexerPaths = pathCollector.getPaths();
pathCollector = null; // release
matchLocator.locateMatches( indexerPaths, workspace, filterWorkingCopies(this.workingCopies, scope));
collector.done();
} }
/** /**

View file

@ -42,7 +42,6 @@ public class AcceptMatchOperation implements IWorkspaceRunnable {
IMatch match = (IMatch) i.next(); IMatch match = (IMatch) i.next();
collector.acceptMatch(match); collector.acceptMatch(match);
} }
collector.done();
} }
} }

View file

@ -341,12 +341,12 @@ public class MatchLocator implements IMatchLocator{
} }
public void locateMatches( String [] paths, IWorkspace workspace, IWorkingCopy[] workingCopies,ArrayList matches ) throws InterruptedException{ public void locateMatches( String [] paths, IWorkspace workspace, IWorkingCopy[] workingCopies ) throws InterruptedException{
if (!(paths.length > 0)) if (!(paths.length > 0))
return; return;
matchStorage = matches; matchStorage = new ArrayList();
workspaceRoot = (workspace != null) ? workspace.getRoot() : null; workspaceRoot = (workspace != null) ? workspace.getRoot() : null;
HashMap wcPaths = new HashMap(); HashMap wcPaths = new HashMap();
@ -449,7 +449,7 @@ public class MatchLocator implements IMatchLocator{
ParserLanguage language = null; ParserLanguage language = null;
if( project != null ){ if( project != null ){
language = CoreModel.getDefault().hasCCNature( project ) ? ParserLanguage.CPP : ParserLanguage.C; language = CoreModel.hasCCNature( project ) ? ParserLanguage.CPP : ParserLanguage.C;
} else { } else {
//TODO no project, what language do we use? //TODO no project, what language do we use?
language = ParserLanguage.CPP; language = ParserLanguage.CPP;
@ -485,17 +485,10 @@ public class MatchLocator implements IMatchLocator{
} }
} }
Iterator j = matches.iterator(); AcceptMatchOperation acceptMatchOp = new AcceptMatchOperation( resultCollector, matchStorage );
while (j.hasNext()){ try {
IMatch match = (IMatch) j.next(); CCorePlugin.getWorkspace().run(acceptMatchOp,null);
try { } catch (CoreException e) {}
resultCollector.acceptMatch(match);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
resultCollector.done();
} }
} }