From 475d55c8e1aeacb59423644836701ec90b385305 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 23 May 2006 13:44:57 +0000 Subject: [PATCH] Move the Full indexer to the PDOM Indexer Task Framework. --- .../eclipse/cdt/core/dom/IPDOMManager.java | 8 ----- .../cdt/internal/core/pdom/PDOMManager.java | 22 ------------ .../pdom/indexer/ctags/CtagsIndexerJob.java | 1 - .../indexer/full/PDOMFullHandleDelta.java | 27 ++++++-------- .../pdom/indexer/full/PDOMFullIndexer.java | 6 ++-- .../pdom/indexer/full/PDOMFullIndexerJob.java | 6 ++-- .../pdom/indexer/full/PDOMFullReindex.java | 35 +++---------------- 7 files changed, 21 insertions(+), 84 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java index cfced162bc8..7823d08cef7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java @@ -13,8 +13,6 @@ package org.eclipse.cdt.core.dom; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; /** * @author Doug Schaefer @@ -38,10 +36,4 @@ public interface IPDOMManager { // Enqueue and indexer sub job public void enqueue(IPDOMIndexerTask subjob); - // Scheduling rule used by indexers to make sure we don't get - // Too much indexing going on. - public ISchedulingRule getIndexerSchedulingRule(); - - public IProgressMonitor getProgressGroup(); - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index 8ddf20b5809..d31bd5aa44d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -38,7 +38,6 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IPreferencesService; @@ -62,17 +61,6 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener { private static final QualifiedName pdomProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "pdom"); //$NON-NLS-1$ - private IProgressMonitor group; - - private final ISchedulingRule indexerSchedulingRule = new ISchedulingRule() { - public boolean contains(ISchedulingRule rule) { - return rule == this; - } - public boolean isConflicting(ISchedulingRule rule) { - return rule == this; - } - }; - public synchronized IPDOM getPDOM(ICProject project) throws CoreException { IProject rproject = project.getProject(); PDOM pdom = (PDOM)rproject.getSessionProperty(pdomProperty); @@ -316,16 +304,6 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener { } } - public ISchedulingRule getIndexerSchedulingRule() { - return indexerSchedulingRule; - } - - public IProgressMonitor getProgressGroup() { - if (group == null) - group = Platform.getJobManager().createProgressGroup(); - return group; - } - /** * Startup the PDOM. This mainly sets us up to handle model * change events. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java index db26bfb3f9a..108cffcaec2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java @@ -42,7 +42,6 @@ public abstract class CtagsIndexerJob extends Job { super("ctags Indexer: " + indexer.getProject().getElementName()); this.indexer = indexer; this.pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(indexer.getProject()); - setRule(CCorePlugin.getPDOMManager().getIndexerSchedulingRule()); } // Indexing functions diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java index 320d9570351..9e5ff642a3c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java @@ -31,10 +31,8 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; /** * @author Doug Schaefer @@ -54,7 +52,7 @@ public class PDOMFullHandleDelta extends PDOMFullIndexerJob { this.delta = delta; } - protected IStatus run(IProgressMonitor monitor) { + public void run(IProgressMonitor monitor) { try { long start = System.currentTimeMillis(); @@ -63,42 +61,40 @@ public class PDOMFullHandleDelta extends PDOMFullIndexerJob { int count = changed.size() + added.size() + removed.size(); if (count > 0) { - monitor.beginTask("Indexing", count); - Iterator i = changed.values().iterator(); while (i.hasNext()) { + if (monitor.isCanceled()) + return; ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(tu.getElementName()); try { changeTU(tu); } catch (Throwable e) { CCorePlugin.log(e); if (++errorCount > MAX_ERRORS) - return Status.CANCEL_STATUS; + return; } - monitor.worked(1); } i = added.iterator(); while (i.hasNext()) { + if (monitor.isCanceled()) + return; ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(tu.getElementName()); try { addTU(tu); } catch (Throwable e) { CCorePlugin.log(e); if (++errorCount > MAX_ERRORS) - return Status.CANCEL_STATUS; + return; } - monitor.worked(1); } i = removed.iterator(); while (i.hasNext()) { + if (monitor.isCanceled()) + return; ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(tu.getElementName()); removeTU(tu); - monitor.worked(1); } String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID @@ -106,12 +102,9 @@ public class PDOMFullHandleDelta extends PDOMFullIndexerJob { if (showTimings != null && showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$ System.out.println("PDOM Full Delta Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ } - - return Status.OK_STATUS; } catch (CoreException e) { - return e.getStatus(); + CCorePlugin.log(e); } catch (InterruptedException e) { - return Status.CANCEL_STATUS; } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java index 6f7d5602998..3ec17e21233 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.internal.core.pdom.indexer.full; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMIndexer; import org.eclipse.cdt.core.model.ICElementDelta; import org.eclipse.cdt.core.model.ICProject; @@ -36,11 +37,12 @@ public class PDOMFullIndexer implements IPDOMIndexer { } public void handleDelta(ICElementDelta delta) throws CoreException { - new PDOMFullHandleDelta(this, delta).schedule(); + CCorePlugin.getPDOMManager().enqueue( + new PDOMFullHandleDelta(this, delta)); } public void reindex() throws CoreException { - new PDOMFullReindex(this).schedule(); + CCorePlugin.getPDOMManager().enqueue(new PDOMFullReindex(this)); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java index 0fbea27aa1f..ead0a56dbe2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.pdom.indexer.full; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOMIndexerTask; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTName; @@ -24,13 +25,12 @@ import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMFile; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.jobs.Job; /** * @author Doug Schaefer * */ -public abstract class PDOMFullIndexerJob extends Job { +public abstract class PDOMFullIndexerJob implements IPDOMIndexerTask { protected final PDOMFullIndexer indexer; protected final PDOM pdom; @@ -40,10 +40,8 @@ public abstract class PDOMFullIndexerJob extends Job { protected final int MAX_ERRORS = 10; public PDOMFullIndexerJob(PDOMFullIndexer indexer) throws CoreException { - super("Full Indexer: " + indexer.getProject().getElementName()); this.indexer = indexer; this.pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(indexer.getProject()); - setRule(CCorePlugin.getPDOMManager().getIndexerSchedulingRule()); } protected IASTTranslationUnit parse(ITranslationUnit tu) throws CoreException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java index 98dc690a149..6d1683b6f15 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java @@ -18,7 +18,6 @@ import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; @@ -32,33 +31,13 @@ public class PDOMFullReindex extends PDOMFullIndexerJob { super(indexer); } - protected IStatus run(final IProgressMonitor monitor) { + public void run(final IProgressMonitor monitor) { try { long start = System.currentTimeMillis(); // First clear out the PDOM pdom.clear(); - // Get a count of all the elements that we'll be visiting for the monitor - final int[] count = { 0 }; - indexer.getProject().accept(new ICElementVisitor() { - public boolean visit(ICElement element) throws CoreException { - if (monitor.isCanceled()) - throw new CoreException(Status.CANCEL_STATUS); - switch (element.getElementType()) { - case ICElement.C_UNIT: - ++count[0]; - return false; - case ICElement.C_CCONTAINER: - case ICElement.C_PROJECT: - return true; - } - return false; - } - }); - - monitor.beginTask("Indexing", count[0]); - // First index all the source files (i.e. not headers) indexer.getProject().accept(new ICElementVisitor() { public boolean visit(ICElement element) throws CoreException { @@ -68,7 +47,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob { case ICElement.C_UNIT: ITranslationUnit tu = (ITranslationUnit)element; if (tu.isSourceUnit()) { - monitor.subTask(tu.getElementName()); try { addTU(tu); } catch (Throwable e) { @@ -76,7 +54,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob { if (++errorCount > MAX_ERRORS) throw new CoreException(Status.CANCEL_STATUS); } - monitor.worked(1); } return false; case ICElement.C_CCONTAINER: @@ -99,7 +76,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob { IFile rfile = (IFile)tu.getUnderlyingResource(); String filename = rfile.getLocation().toOSString(); if (pdom.getFile(filename) == null) { - monitor.subTask(tu.getElementName()); try { addTU(tu); } catch (InterruptedException e) { @@ -108,7 +84,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob { throw new CoreException(Status.CANCEL_STATUS); } } - monitor.worked(1); } return false; case ICElement.C_CCONTAINER: @@ -122,11 +97,11 @@ public class PDOMFullReindex extends PDOMFullIndexerJob { String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$ if (showTimings != null && showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$ - System.out.println("PDOM Full Reindex Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ - - return Status.OK_STATUS; + System.out.println("PDOM Full Reindex Time: " + (System.currentTimeMillis() - start) //$NON-NLS-1$ + + " " + indexer.getProject().getElementName()); //$NON-NLS-1$ } catch (CoreException e) { - return e.getStatus(); + if (e.getStatus() != Status.CANCEL_STATUS) + CCorePlugin.log(e); } }