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 7cc212ff924..10000e9ea3b 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 @@ -13,24 +13,20 @@ */ package org.eclipse.cdt.core.search.tests; -import java.util.ArrayList; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.search.BasicSearchMatch; import org.eclipse.cdt.core.search.ICSearchPattern; import org.eclipse.cdt.core.search.IMatch; import org.eclipse.cdt.core.search.OrPattern; import org.eclipse.cdt.core.search.SearchEngine; 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.MatchLocator; import org.eclipse.cdt.internal.core.search.matching.NamespaceDeclarationPattern; import org.eclipse.cdt.testplugin.CTestPlugin; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; /** @@ -338,24 +334,15 @@ public class OtherPatternTests extends BaseSearchTest { resultCollector.aboutToStart(); - ArrayList matchesList = new ArrayList(); MatchLocator matchLocator = new MatchLocator( pattern, resultCollector, scope); matchLocator.setProgressMonitor(monitor); try { - matchLocator.locateMatches( new String [] { path }, workspace, null, matchesList); + matchLocator.locateMatches( new String [] { path }, workspace, null ); } catch (InterruptedException e1) { } - AcceptMatchOperation acceptMatchOp = new AcceptMatchOperation(resultCollector, matchesList); - try { - CCorePlugin.getWorkspace().run(acceptMatchOp,null); - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - // - //resultCollector.done(); + resultCollector.done(); 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 ec3f121e06e..41f360d590a 100644 --- a/core/org.eclipse.cdt.core/search/ChangeLog +++ b/core/org.eclipse.cdt.core/search/ChangeLog @@ -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 bug 60491 Added working copy filtering to search engine diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/IMatchLocator.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/IMatchLocator.java index adedcc246e4..8b9660bae08 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/IMatchLocator.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/IMatchLocator.java @@ -6,7 +6,6 @@ */ package org.eclipse.cdt.core.search; -import java.util.ArrayList; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.core.resources.IWorkspace; @@ -23,7 +22,7 @@ public interface IMatchLocator ISourceElementRequestor, 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); } diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/SearchEngine.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/SearchEngine.java index eac01f7d00f..dc2e1ee7e5f 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/SearchEngine.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/core/search/SearchEngine.java @@ -23,7 +23,6 @@ import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.internal.core.Util; 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.CWorkspaceScope; 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.core.resources.IFile; import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; @@ -172,54 +170,48 @@ public class SearchEngine implements ICSearchConstants{ /* search is starting */ collector.aboutToStart(); - ArrayList matches = new ArrayList(); - try{ - //initialize progress monitor - IProgressMonitor progressMonitor = collector.getProgressMonitor(); - if( progressMonitor != null ){ - 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) {} + + //initialize progress monitor + IProgressMonitor progressMonitor = collector.getProgressMonitor(); + if( progressMonitor != null ){ + progressMonitor.beginTask( Util.bind("engine.searching"), 100 ); //$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" ) ); //$NON-NLS-1$ + + String[] indexerPaths = pathCollector.getPaths(); + pathCollector = null; // release + + matchLocator.locateMatches( indexerPaths, workspace, filterWorkingCopies(this.workingCopies, scope)); + collector.done(); } /** diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/AcceptMatchOperation.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/AcceptMatchOperation.java index 13e390629ac..0074f228a85 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/AcceptMatchOperation.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/AcceptMatchOperation.java @@ -42,7 +42,6 @@ public class AcceptMatchOperation implements IWorkspaceRunnable { IMatch match = (IMatch) i.next(); collector.acceptMatch(match); } - collector.done(); } } 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 16be0d1c3b3..ea5a020e263 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 @@ -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)) return; - matchStorage = matches; + matchStorage = new ArrayList(); workspaceRoot = (workspace != null) ? workspace.getRoot() : null; HashMap wcPaths = new HashMap(); @@ -449,7 +449,7 @@ public class MatchLocator implements IMatchLocator{ ParserLanguage language = null; if( project != null ){ - language = CoreModel.getDefault().hasCCNature( project ) ? ParserLanguage.CPP : ParserLanguage.C; + language = CoreModel.hasCCNature( project ) ? ParserLanguage.CPP : ParserLanguage.C; } else { //TODO no project, what language do we use? language = ParserLanguage.CPP; @@ -485,17 +485,10 @@ public class MatchLocator implements IMatchLocator{ } } - Iterator j = matches.iterator(); - while (j.hasNext()){ - IMatch match = (IMatch) j.next(); - try { - resultCollector.acceptMatch(match); - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - resultCollector.done(); + AcceptMatchOperation acceptMatchOp = new AcceptMatchOperation( resultCollector, matchStorage ); + try { + CCorePlugin.getWorkspace().run(acceptMatchOp,null); + } catch (CoreException e) {} } }