From 44c81e1db6ea6ad4abfc5ccc50b6d734c7a4869b Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 31 Mar 2006 21:40:26 +0000 Subject: [PATCH] Hooked up the Fast indexer so it should work now. Also changed a few interfaces so that they use ICProject instead of IProject. We should be sticking to the CModel as much as possible so we can leverage CDTisms like source folders and path entry info. --- .../org/eclipse/cdt/core/model/ILanguage.java | 22 +- .../internal/core/model/CModelManager.java | 6 - .../cdt/internal/core/model/CProject.java | 2 +- .../org/eclipse/cdt/core/dom/IPDOM.java | 3 + .../eclipse/cdt/core/dom/IPDOMIndexer.java | 10 +- .../eclipse/cdt/core/dom/IPDOMManager.java | 11 +- .../cdt/core/dom/ast/gnu/c/GCCLanguage.java | 40 ++- .../cdt/core/dom/ast/gnu/cpp/GPPLanguage.java | 50 ++-- .../eclipse/cdt/internal/core/pdom/PDOM.java | 27 +- .../cdt/internal/core/pdom/PDOMManager.java | 86 +++--- .../cdt/internal/core/pdom/PDOMUpdator.java | 244 ------------------ .../pdom/dom/PDOMBindingAdapterFactory.java | 2 +- .../core/pdom/indexer/fast/PDOMFastAddTU.java | 21 +- .../pdom/indexer/fast/PDOMFastChangeTU.java | 6 +- .../indexer/fast/PDOMFastHandleDelta.java | 189 ++++++++++++++ .../pdom/indexer/fast/PDOMFastIndexer.java | 186 +------------ .../pdom/indexer/fast/PDOMFastReindex.java | 79 ++++++ .../pdom/indexer/nulli/PDOMNullIndexer.java | 17 +- .../ui/actions/PDOMUpdateProjectAction.java | 9 +- .../cdt/internal/ui/indexview/IndexView.java | 10 +- .../ui/indexview/RebuildIndexAction.java | 10 +- .../ui/search/PDOMSearchPatternQuery.java | 4 +- .../actions/OpenDeclarationsAction.java | 4 +- .../contentassist/CCompletionProcessor2.java | 5 +- .../cdt/ui/dialogs/CTagsIndexerBlock.java | 8 +- .../cdt/ui/dialogs/DOMSourceIndexerBlock.java | 11 +- .../eclipse/cdt/ui/dialogs/IndexerBlock.java | 11 +- .../ui/dialogs/IndexerOptionPropertyPage.java | 17 +- .../cdt/ui/dialogs/NullIndexerBlock.java | 5 +- .../cdt/ui/index/AbstractIndexerPage.java | 10 +- 30 files changed, 482 insertions(+), 623 deletions(-) delete mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMUpdator.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastHandleDelta.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastReindex.java diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java index cdf18021e24..ce4bde33afd 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java @@ -13,9 +13,6 @@ package org.eclipse.cdt.core.model; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.IAdaptable; /** @@ -66,25 +63,8 @@ public interface ILanguage extends IAdaptable { * @param style * @return */ - public IASTTranslationUnit getTranslationUnit(IFile file, int style); + public IASTTranslationUnit getASTTranslationUnit(ITranslationUnit file, int style); - /** - * Create the AST for the given external file with the given style. - * - * @param file - * @param style - * @return - */ - public IASTTranslationUnit getTranslationUnit(IStorage file, IProject project, int style); - - /** - * Return the ASt for the given working copy - * @param workingCopy - * @param style - * @return - */ - public IASTTranslationUnit getTranslationUnit(IWorkingCopy workingCopy, int style); - /** * Return the AST Completion Node for the given working copy at the given * offset. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index 43354f41cd3..a30297c338d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -1136,12 +1136,6 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe public void deleting(IProject project) { // discard all indexing jobs for this project this.getIndexManager().discardJobs(project.getName()); - // delete the PDOM for this project - try { - CCorePlugin.getPDOMManager().deletePDOM(project); - } catch (CoreException e) { - CCorePlugin.log(e); - } // stop the binary runner for this project removeBinaryRunner(project); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java index 5e337df5c9c..67b6988ef5c 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java @@ -697,7 +697,7 @@ public class CProject extends Openable implements ICProject { } public IPDOM getIndex() { - return CCorePlugin.getPDOMManager().getPDOM(getProject()); + return CCorePlugin.getPDOMManager().getPDOM(this); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java index 8c983ecf605..c3a30290e54 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOM.java @@ -35,4 +35,7 @@ public interface IPDOM extends IAdaptable { public ICodeReaderFactory getCodeReaderFactory(IWorkingCopy root); + public IPDOMIndexer getIndexer(); + public void setIndexer(IPDOMIndexer indexer) throws CoreException; + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMIndexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMIndexer.java index 4146682cbc3..b9cbc50d9ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMIndexer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMIndexer.java @@ -11,16 +11,20 @@ package org.eclipse.cdt.core.dom; -import org.eclipse.cdt.core.model.IElementChangedListener; +import org.eclipse.cdt.core.model.ICElementDelta; +import org.eclipse.core.runtime.CoreException; + /** * @author Doug Schaefer * */ -public interface IPDOMIndexer extends IElementChangedListener { +public interface IPDOMIndexer { public void setPDOM(IPDOM pdom); + + public void handleDelta(ICElementDelta delta); - public void reindex(); + public void reindex() throws CoreException; } 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 f94ed6e69a5..afb50230a3d 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 @@ -11,7 +11,7 @@ package org.eclipse.cdt.core.dom; -import org.eclipse.core.resources.IProject; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.core.runtime.CoreException; /** @@ -21,13 +21,14 @@ import org.eclipse.core.runtime.CoreException; public interface IPDOMManager { // Getting and deleting a PDOM for a project - public IPDOM getPDOM(IProject project); - public void deletePDOM(IProject project) throws CoreException; + public IPDOM getPDOM(ICProject project); + public void deletePDOM(ICProject project) throws CoreException; // Getting and setting indexer Ids public String getDefaultIndexerId(); public void setDefaultIndexerId(String indexerId); - public String getIndexerId(IProject project); - public void setIndexerId(IProject project, String indexerId); + public String getIndexerId(ICProject project) throws CoreException; + public void setIndexerId(ICProject project, String indexerId) throws CoreException; + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java index 088b546555f..ae62b76d3bc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/c/GCCLanguage.java @@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IContributedModelBuilder; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; @@ -42,7 +43,6 @@ import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.PlatformObject; /** @@ -66,26 +66,15 @@ public class GCCLanguage extends PlatformObject implements ILanguage { return super.getAdapter(adapter); } - public IASTTranslationUnit getTranslationUnit(IStorage file, IProject project, int style) { - return getTranslationUnit(file.getFullPath().toOSString(), project, project, style, null); - } - - public IASTTranslationUnit getTranslationUnit(IFile file, int style) { - return getTranslationUnit(file.getLocation().toOSString(), file.getProject(), file, style, null); - } - - public IASTTranslationUnit getTranslationUnit(IWorkingCopy workingCopy, int style) { - IFile file = (IFile)workingCopy.getResource(); - String path = file.getLocation().toOSString(); - CodeReader reader = new CodeReader(path, workingCopy.getContents()); - return getTranslationUnit(path, file.getProject(), file, style, reader); - } - - protected IASTTranslationUnit getTranslationUnit(String path, IProject project, IResource infoResource, int style, - CodeReader reader) { + public IASTTranslationUnit getASTTranslationUnit(ITranslationUnit file, int style) { + IResource resource = file.getResource(); + ICProject project = file.getCProject(); + IProject rproject = project.getProject(); + IScannerInfo scanInfo = null; - IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project); + IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(rproject); if (provider != null){ + IResource infoResource = resource != null ? resource : rproject; IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource); if (buildScanInfo != null) scanInfo = buildScanInfo; @@ -102,12 +91,19 @@ public class GCCLanguage extends PlatformObject implements ILanguage { else fileCreator = SavedCodeReaderFactory.getInstance(); - if (reader == null) { + CodeReader reader; + if (file instanceof IWorkingCopy) { + // get the working copy contents + IFile rfile = (IFile)file.getResource(); + reader = new CodeReader(rfile.getLocation().toOSString(), file.getContents()); + } else { + String path = file.getPath().toOSString(); reader = fileCreator.createCodeReaderForTranslationUnit(path); - if( reader == null ) - return null; + if (reader == null) + return null; } + IScannerExtensionConfiguration scannerExtensionConfiguration = scannerExtensionConfiguration = C_GNU_SCANNER_EXTENSION; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java index 1e0276e0c55..d81cd965d4d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/gnu/cpp/GPPLanguage.java @@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IContributedModelBuilder; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; @@ -42,7 +43,6 @@ import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.PlatformObject; /** @@ -65,26 +65,15 @@ public class GPPLanguage extends PlatformObject implements ILanguage { return super.getAdapter(adapter); } - public IASTTranslationUnit getTranslationUnit(IStorage file, IProject project, int style) { - return getTranslationUnit(file.getFullPath().toOSString(), project, project, style, null); - } - - public IASTTranslationUnit getTranslationUnit(IFile file, int style) { - return getTranslationUnit(file.getLocation().toOSString(), file.getProject(), file, style, null); - } - - public IASTTranslationUnit getTranslationUnit(IWorkingCopy workingCopy, int style) { - IFile file = (IFile)workingCopy.getResource(); - String path = file.getLocation().toOSString(); - CodeReader reader = new CodeReader(path, workingCopy.getContents()); - return getTranslationUnit(path, file.getProject(), file, style, reader); - } - - protected IASTTranslationUnit getTranslationUnit(String path, IProject project, IResource infoResource, int style, - CodeReader reader) { + public IASTTranslationUnit getASTTranslationUnit(ITranslationUnit file, int style) { + IResource resource = file.getResource(); + ICProject project = file.getCProject(); + IProject rproject = project.getProject(); + IScannerInfo scanInfo = null; - IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project); + IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(rproject); if (provider != null){ + IResource infoResource = resource != null ? resource : rproject; IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource); if (buildScanInfo != null) scanInfo = buildScanInfo; @@ -100,17 +89,28 @@ public class GPPLanguage extends PlatformObject implements ILanguage { fileCreator = new PDOMCodeReaderFactory(pdom); else fileCreator = SavedCodeReaderFactory.getInstance(); - - if (reader == null) { + + IFile rfile = (IFile)file.getResource(); + CodeReader reader; + if (file instanceof IWorkingCopy) { + // get the working copy contents + reader = new CodeReader(rfile.getLocation().toOSString(), file.getContents()); + } else { + String path + = rfile != null + ? rfile.getLocation().toOSString() + : file.getPath().toOSString(); reader = fileCreator.createCodeReaderForTranslationUnit(path); - if( reader == null ) + if (reader == null) return null; } - - IScannerExtensionConfiguration scannerExtensionConfiguration = CPP_GNU_SCANNER_EXTENSION; + + IScannerExtensionConfiguration scannerExtensionConfiguration = + scannerExtensionConfiguration = CPP_GNU_SCANNER_EXTENSION; IScanner scanner = new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, ParserFactory.createDefaultLogService(), scannerExtensionConfiguration, fileCreator ); + //assume GCC ISourceCodeParser parser = new GNUCPPSourceParser( scanner, ParserMode.COMPLETE_PARSE, ParserUtil.getParserLogService(), new GPPParserExtensionConfiguration() ); @@ -119,7 +119,7 @@ public class GPPLanguage extends PlatformObject implements ILanguage { if ((style & AST_USE_INDEX) != 0) ast.setIndex(pdom); - + return ast; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index e8607b87939..0ce68022027 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; @@ -50,7 +51,7 @@ import org.eclipse.core.runtime.jobs.Job; */ public class PDOM extends PlatformObject implements IPDOM { - private final IProject project; + private final ICProject project; private IPDOMIndexer indexer; private final IPath dbPath; @@ -66,16 +67,18 @@ public class PDOM extends PlatformObject implements IPDOM { private static final QualifiedName dbNameProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "dbName"); //$NON-NLS-1$ - public PDOM(IProject project, IPDOMIndexer indexer) throws CoreException { + public PDOM(ICProject project, IPDOMIndexer indexer) throws CoreException { this.project = project; this.indexer = indexer; + indexer.setPDOM(this); // Load up the database - String dbName = project.getPersistentProperty(dbNameProperty); + IProject rproject = project.getProject(); + String dbName = rproject.getPersistentProperty(dbNameProperty); if (dbName == null) { - dbName = project.getName() + "_" + dbName = project.getElementName() + "_" + System.currentTimeMillis() + ".pdom"; - project.setPersistentProperty(dbNameProperty, dbName); + rproject.setPersistentProperty(dbNameProperty, dbName); } dbPath = CCorePlugin.getDefault().getStateLocation().append(dbName); db = new Database(dbPath.toOSString(), VERSION); @@ -90,7 +93,7 @@ public class PDOM extends PlatformObject implements IPDOM { return super.getAdapter(adapter); } - public IProject getProject() { + public ICProject getProject() { return project; } @@ -98,6 +101,16 @@ public class PDOM extends PlatformObject implements IPDOM { return indexer; } + public void setIndexer(IPDOMIndexer indexer) throws CoreException { + // Force a reindex if indexer changes + boolean reindex = indexer != null && this.indexer != indexer; + this.indexer = indexer; + indexer.setPDOM(this); + + if (reindex) + indexer.reindex(); + } + public static interface IListener { public void handleChange(PDOM pdom); } @@ -149,7 +162,7 @@ public class PDOM extends PlatformObject implements IPDOM { if (linkage == null) return; - IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(), + IASTTranslationUnit ast = language.getASTTranslationUnit(tu, ILanguage.AST_USE_INDEX | ILanguage.AST_SKIP_INDEXED_HEADERS | ILanguage.AST_SKIP_IF_NO_BUILD_INFO); 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 9f4d7a2f836..dfc8db979d6 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 @@ -18,6 +18,9 @@ import org.eclipse.cdt.core.dom.IPDOMIndexer; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ElementChangedEvent; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ICElementDelta; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IElementChangedListener; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ProjectScope; @@ -28,8 +31,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.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IPreferencesService; import org.eclipse.core.runtime.preferences.InstanceScope; @@ -42,20 +43,19 @@ import org.osgi.service.prefs.BackingStoreException; * * @author Doug Schaefer */ -public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobChangeListener { +public class PDOMManager implements IPDOMManager, IElementChangedListener { - private PDOMUpdator currJob; - private static final QualifiedName pdomProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "pdom"); //$NON-NLS-1$ - public IPDOM getPDOM(IProject project) { + public IPDOM getPDOM(ICProject project) { try { - IPDOM pdom = (IPDOM)project.getSessionProperty(pdomProperty); + IProject rproject = project.getProject(); + IPDOM pdom = (IPDOM)rproject.getSessionProperty(pdomProperty); if (pdom == null) { - pdom = new PDOM(project, createIndexer(project)); - project.setSessionProperty(pdomProperty, pdom); + pdom = new PDOM(project, createIndexer(getIndexerId(project))); + rproject.setSessionProperty(pdomProperty, pdom); } return pdom; @@ -70,36 +70,31 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC if (event.getType() != ElementChangedEvent.POST_CHANGE) return; - // TODO turn off indexing for now. - return; -// currJob = new PDOMUpdator(event.getDelta(), currJob); -// currJob.addJobChangeListener(this); -// currJob.schedule(); + // Walk the delta sending the subtrees to the appropriate indexers + processDelta(event.getDelta()); } - - public void aboutToRun(IJobChangeEvent event) { + + private void processDelta(ICElementDelta delta) { + int type = delta.getElement().getElementType(); + switch (type) { + case ICElement.C_MODEL: + // Loop through the children + ICElementDelta[] children = delta.getAffectedChildren(); + for (int i = 0; i < children.length; ++i) + processDelta(children[i]); + break; + case ICElement.C_PROJECT: + // Find the appropriate indexer and pass the delta on + ICProject project = (ICProject)delta.getElement(); + IPDOM pdom = getPDOM(project); + pdom.getIndexer().handleDelta(delta); + } } - - public void awake(IJobChangeEvent event) { - } - - public synchronized void done(IJobChangeEvent event) { - if (currJob == event.getJob()) - currJob = null; - } - - public void running(IJobChangeEvent event) { - } - - public void scheduled(IJobChangeEvent event) { - } - - public void sleeping(IJobChangeEvent event) { - } - - public void deletePDOM(IProject project) throws CoreException { - IPDOM pdom = (IPDOM)project.getSessionProperty(pdomProperty); - project.setSessionProperty(pdomProperty, null); + + public void deletePDOM(ICProject project) throws CoreException { + IProject rproject = project.getProject(); + IPDOM pdom = (IPDOM)rproject.getSessionProperty(pdomProperty); + rproject.setSessionProperty(pdomProperty, null); pdom.delete(); } @@ -127,8 +122,8 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC } } - public String getIndexerId(IProject project) { - IEclipsePreferences prefs = new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID); + public String getIndexerId(ICProject project) throws CoreException { + IEclipsePreferences prefs = new ProjectScope(project.getProject()).getNode(CCorePlugin.PLUGIN_ID); if (prefs == null) return getDefaultIndexerId(); @@ -136,7 +131,7 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC if (indexerId == null) { // See if it is in the ICDescriptor try { - ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project, true); + ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project.getProject(), true); ICExtensionReference[] ref = desc.get(CCorePlugin.INDEXER_UNIQ_ID); if (ref != null && ref.length > 0) { indexerId = ref[0].getID(); @@ -153,8 +148,8 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC return indexerId; } - public void setIndexerId(IProject project, String indexerId) { - IEclipsePreferences prefs = new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID); + public void setIndexerId(ICProject project, String indexerId) throws CoreException { + IEclipsePreferences prefs = new ProjectScope(project.getProject()).getNode(CCorePlugin.PLUGIN_ID); if (prefs == null) return; // TODO why would this be null? @@ -163,11 +158,12 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC prefs.flush(); } catch (BackingStoreException e) { } + + IPDOM pdom = getPDOM(project); + pdom.setIndexer(createIndexer(indexerId)); } - private IPDOMIndexer createIndexer(IProject project) throws CoreException { - String indexerId = getIndexerId(project); - + private IPDOMIndexer createIndexer(String indexerId) throws CoreException { // Look up in extension point IExtension indexerExt = Platform.getExtensionRegistry() .getExtension(CCorePlugin.INDEXER_UNIQ_ID, indexerId); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMUpdator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMUpdator.java deleted file mode 100644 index f7535ee10a1..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMUpdator.java +++ /dev/null @@ -1,244 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 QNX Software Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * QNX - Initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.internal.core.pdom; - -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.core.model.ICElementDelta; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.core.model.ITranslationUnit; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; -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; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.core.runtime.jobs.Job; - -/** - * @author Doug Schaefer - * - */ -public class PDOMUpdator extends Job { - - private PDOMUpdator prevJob; - private ICElementDelta delta; - private ICProject project; - private List addedTUs; - private List changedTUs; - private List removedTUs; - - public PDOMUpdator(ICElementDelta delta, PDOMUpdator prevJob) { - super("PDOM Updator"); - this.prevJob = prevJob; - this.delta = delta; - } - - public PDOMUpdator(ICProject project, PDOMUpdator prevJob) { - super("PDOM Project Updator"); - this.prevJob = prevJob; - this.project = project; - } - - protected IStatus run(IProgressMonitor monitor) { - if (prevJob != null) - try { - prevJob.join(); - } catch (InterruptedException e) { - } - - try { - long start = System.currentTimeMillis(); - - String taskName = null; - if (delta != null) { - processDelta(delta); - taskName = "Update PDOM"; - } - if (project != null) { - processNewProject(project); - taskName = "Rebuild PDOM"; - } - - int count - = (addedTUs != null ? addedTUs.size() : 0) - + (changedTUs != null ? changedTUs.size() : 0) - + (removedTUs != null ? removedTUs.size() : 0); - - if (taskName == null || count == 0) - return Status.OK_STATUS; - - monitor.beginTask(taskName, count); - - if (addedTUs != null) - for (Iterator i = addedTUs.iterator(); i.hasNext();) { - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(String.valueOf(count--) - +" files remaining - " - + tu.getPath().toString()); - processAddedTU(tu); - monitor.worked(1); - } - - if (changedTUs != null) - for (Iterator i = changedTUs.iterator(); i.hasNext();) { - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(String.valueOf(count--) - +" files remaining - " - + tu.getPath().toString()); - processChangedTU(tu); - monitor.worked(1); - } - - if (removedTUs != null) - for (Iterator i = removedTUs.iterator(); i.hasNext();) { - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(String.valueOf(count--) - +" files remaining - " - + tu.getPath().toString()); - processRemovedTU(tu); - monitor.worked(1); - } - - String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$ - if (showTimings!= null) - if (showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$ - System.out.println("Updator Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ - - return Status.OK_STATUS; - } catch (CoreException e) { - CCorePlugin.log(e); - return e.getStatus(); - } - } - - private void processDelta(ICElementDelta delta) { - // First make sure this project is PDOMable - ICElement element = delta.getElement(); - if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()) == null) - return; - - // process the children first - ICElementDelta[] children = delta.getAffectedChildren(); - for (int i = 0; i < children.length; ++i) - processDelta(children[i]); - - // what have we got - if (element.getElementType() == ICElement.C_PROJECT) { - switch (delta.getKind()) { - case ICElementDelta.ADDED: - processNewProject((ICProject)element); - break; - } - } else if (element.getElementType() == ICElement.C_UNIT) { - ITranslationUnit tu = (ITranslationUnit)element; - if (tu.isWorkingCopy()) - // Don't care about working copies either - return; - - switch (delta.getKind()) { - case ICElementDelta.ADDED: - if (addedTUs == null) - addedTUs = new LinkedList(); - addedTUs.add(element); - break; - case ICElementDelta.CHANGED: - if (changedTUs == null) - changedTUs = new LinkedList(); - changedTUs.add(element); - break; - case ICElementDelta.REMOVED: - if (removedTUs == null) - removedTUs = new LinkedList(); - removedTUs.add(element); - break; - } - } - } - - private void processNewProject(final ICProject project) { - try { - project.getProject().accept(new IResourceProxyVisitor() { - public boolean visit(IResourceProxy proxy) throws CoreException { - if (proxy.getType() == IResource.FILE) { - String fileName = proxy.getName(); - IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName); - if (contentType == null) - return true; - String contentTypeId = contentType.getId(); - - if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId) - || CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) { - if (addedTUs == null) - addedTUs = new LinkedList(); - addedTUs.add(CoreModel.getDefault().create((IFile)proxy.requestResource())); - } - // TODO handle header files - return false; - } else { - return true; - } - } - }, 0); - } catch (CoreException e) { - CCorePlugin.log(e); - } - } - - private void processAddedTU(ITranslationUnit tu) throws CoreException { - IPDOM pdom = tu.getCProject().getIndex(); - if (pdom == null || !(pdom instanceof PDOM)) - return; - - PDOM mypdom = (PDOM)pdom; - mypdom.addSymbols(tu); - } - - private void processRemovedTU(ITranslationUnit tu) throws CoreException { - IProject project = tu.getCProject().getProject(); - IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project); - if (pdom == null || !(pdom instanceof PDOM)) - return; - - PDOM mypdom = (PDOM)pdom; - mypdom.removeSymbols(tu); - // TODO delete the file itself from the database - // the removeSymbols only removes the names in the file - } - - private void processChangedTU(ITranslationUnit tu) throws CoreException { - IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(tu.getCProject().getProject()); - if (pdom == null || !(pdom instanceof PDOM)) - return; - PDOM mypdom = (PDOM)pdom; - - mypdom.removeSymbols(tu); - mypdom.addSymbols(tu); - } - -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBindingAdapterFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBindingAdapterFactory.java index 29ef03cb954..f31cf8282cd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBindingAdapterFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBindingAdapterFactory.java @@ -35,7 +35,7 @@ public class PDOMBindingAdapterFactory implements IAdapterFactory { IBinding binding = (IBinding)adaptableObject; ICProject[] projects = CoreModel.getDefault().getCModel().getCProjects(); for (int i = 0; i < projects.length; ++i) { - IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(projects[i].getProject()); + IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(projects[i]); if (ipdom == null || !(ipdom instanceof PDOM)) continue; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastAddTU.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastAddTU.java index 85e7c153a31..b78cdf3f399 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastAddTU.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastAddTU.java @@ -11,12 +11,10 @@ package org.eclipse.cdt.internal.core.pdom.indexer.fast; -import org.eclipse.cdt.core.dom.IPDOM; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.pdom.PDOM; -import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -32,32 +30,35 @@ public class PDOMFastAddTU extends Job { private final ITranslationUnit tu; private final PDOM pdom; - public PDOMFastAddTU(IPDOM pdom, ITranslationUnit tu) { - super("PDOM Fast Add TU"); - this.pdom = (pdom instanceof PDOM) ? (PDOM)pdom : null; + public PDOMFastAddTU(PDOM pdom, ITranslationUnit tu, IProgressMonitor group) { + super("PDOM Fast Add: " + tu.getElementName()); + this.pdom = pdom; this.tu = tu; setPriority(PDOM.WRITER_PRIORITY); + setProgressGroup(group, 1); } protected IStatus run(IProgressMonitor monitor) { - if (pdom == null) - return Status.CANCEL_STATUS; - try { ILanguage language = tu.getLanguage(); if (language == null) return Status.CANCEL_STATUS; + // begin the rule before the parse so that we are only parsing once at a time + // maybe we can do more than one some day + getJobManager().beginRule(pdom.getWriterLockRule(), monitor); + monitor.beginTask("Adding: " + tu.getElementName(), 1); + // get the AST in a "Fast" way - IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(), + IASTTranslationUnit ast = language.getASTTranslationUnit(tu, ILanguage.AST_USE_INDEX | ILanguage.AST_SKIP_INDEXED_HEADERS | ILanguage.AST_SKIP_IF_NO_BUILD_INFO); if (ast == null) return Status.CANCEL_STATUS; - getJobManager().beginRule(pdom.getWriterLockRule(), monitor); pdom.addSymbols(language, ast); + monitor.done(); getJobManager().endRule(pdom.getWriterLockRule()); return Status.OK_STATUS; } catch (CoreException e) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastChangeTU.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastChangeTU.java index 50a3b7a5cbf..e63de7f92cb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastChangeTU.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastChangeTU.java @@ -16,7 +16,6 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.pdom.PDOM; -import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -46,15 +45,16 @@ public class PDOMFastChangeTU extends Job { if (language == null) return Status.CANCEL_STATUS; + getJobManager().beginRule(pdom.getWriterLockRule(), monitor); + // get the AST in a "Fast" way - IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(), + IASTTranslationUnit ast = language.getASTTranslationUnit(tu, ILanguage.AST_USE_INDEX | ILanguage.AST_SKIP_INDEXED_HEADERS | ILanguage.AST_SKIP_IF_NO_BUILD_INFO); if (ast == null) return Status.CANCEL_STATUS; - getJobManager().beginRule(pdom.getWriterLockRule(), monitor); pdom.removeSymbols(tu); pdom.addSymbols(language, ast); getJobManager().endRule(pdom.getWriterLockRule()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastHandleDelta.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastHandleDelta.java new file mode 100644 index 00000000000..b66fc8f3e27 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastHandleDelta.java @@ -0,0 +1,189 @@ +/******************************************************************************* + * Copyright (c) 2006 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * QNX - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.pdom.indexer.fast; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.ICElementDelta; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.internal.core.pdom.PDOM; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceProxy; +import org.eclipse.core.resources.IResourceProxyVisitor; +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; +import org.eclipse.core.runtime.content.IContentType; +import org.eclipse.core.runtime.jobs.Job; + +class PDOMFastHandleDelta extends Job { + + /** + * + */ + private final PDOM pdom; + private final ICElementDelta delta; + private final IProgressMonitor group; + + private List addedTUs; + private List changedTUs; + private List removedTUs; + + public PDOMFastHandleDelta(PDOM pdom, ICElementDelta delta, IProgressMonitor group) { + super("Delta Handler"); + this.pdom = pdom; + this.delta = delta; + this.group = group; + setProgressGroup(group, 1); + } + + protected IStatus run(IProgressMonitor monitor) { + monitor.subTask("Delta"); + long start = System.currentTimeMillis(); + + processDelta(delta); + + int count + = (addedTUs != null ? addedTUs.size() : 0) + + (changedTUs != null ? changedTUs.size() : 0) + + (removedTUs != null ? removedTUs.size() : 0); + + if (count == 0) { + monitor.done(); + return Status.OK_STATUS; + } + + if (addedTUs != null) + for (Iterator i = addedTUs.iterator(); i.hasNext();) { + if (monitor.isCanceled()) + return Status.CANCEL_STATUS; + ITranslationUnit tu = (ITranslationUnit)i.next(); + monitor.subTask(String.valueOf(count--) + +" files remaining - " + + tu.getPath().toString()); + new PDOMFastAddTU(pdom, tu, group).schedule(); + } + + if (changedTUs != null) + for (Iterator i = changedTUs.iterator(); i.hasNext();) { + if (monitor.isCanceled()) + return Status.CANCEL_STATUS; + ITranslationUnit tu = (ITranslationUnit)i.next(); + monitor.subTask(String.valueOf(count--) + +" files remaining - " + + tu.getPath().toString()); + new PDOMFastChangeTU(pdom, tu).schedule(); + monitor.worked(1); + } + + if (removedTUs != null) + for (Iterator i = removedTUs.iterator(); i.hasNext();) { + if (monitor.isCanceled()) + return Status.CANCEL_STATUS; + ITranslationUnit tu = (ITranslationUnit)i.next(); + monitor.subTask(String.valueOf(count--) + +" files remaining - " + + tu.getPath().toString()); + new PDOMFastRemoveTU(pdom, tu).schedule(); + monitor.worked(1); + } + + String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$ + if (showTimings!= null) + if (showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$ + System.out.println("Updator Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ + + return Status.OK_STATUS; + } + + private void processDelta(ICElementDelta delta) { + // First make sure this project is PDOMable + ICElement element = delta.getElement(); + if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM((ICProject)element) == null) + return; + + // process the children first + ICElementDelta[] children = delta.getAffectedChildren(); + for (int i = 0; i < children.length; ++i) + processDelta(children[i]); + + // what have we got + if (element.getElementType() == ICElement.C_PROJECT) { + switch (delta.getKind()) { + case ICElementDelta.ADDED: + processNewProject((ICProject)element); + break; + } + } else if (element.getElementType() == ICElement.C_UNIT) { + ITranslationUnit tu = (ITranslationUnit)element; + if (tu.isWorkingCopy()) + // Don't care about working copies either + return; + + switch (delta.getKind()) { + case ICElementDelta.ADDED: + if (addedTUs == null) + addedTUs = new LinkedList(); + addedTUs.add(element); + break; + case ICElementDelta.CHANGED: + if (changedTUs == null) + changedTUs = new LinkedList(); + changedTUs.add(element); + break; + case ICElementDelta.REMOVED: + if (removedTUs == null) + removedTUs = new LinkedList(); + removedTUs.add(element); + break; + } + } + } + + private void processNewProject(final ICProject project) { + try { + project.getProject().accept(new IResourceProxyVisitor() { + public boolean visit(IResourceProxy proxy) throws CoreException { + if (proxy.getType() == IResource.FILE) { + String fileName = proxy.getName(); + IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName); + if (contentType == null) + return true; + String contentTypeId = contentType.getId(); + + if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId) + || CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) { + if (addedTUs == null) + addedTUs = new LinkedList(); + addedTUs.add(CoreModel.getDefault().create((IFile)proxy.requestResource())); + } + // TODO handle header files + return false; + } else { + return true; + } + } + }, 0); + } catch (CoreException e) { + CCorePlugin.log(e); + } + } + } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexer.java index 04bcb1c91a6..fe7ba015cbc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexer.java @@ -11,31 +11,14 @@ package org.eclipse.cdt.internal.core.pdom.indexer.fast; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOM; import org.eclipse.cdt.core.dom.IPDOMIndexer; -import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.ElementChangedEvent; -import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElementDelta; -import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.internal.core.pdom.PDOM; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceProxy; -import org.eclipse.core.resources.IResourceProxyVisitor; 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; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.core.runtime.jobs.Job; /** * @author Doug Schaefer @@ -50,170 +33,15 @@ public class PDOMFastIndexer implements IPDOMIndexer { this.pdom = (PDOM)pdom; } - private IProgressMonitor progressGroup; - - private IProgressMonitor getProgressGroup() { - if (progressGroup == null) - progressGroup = Platform.getJobManager().createProgressGroup(); - return progressGroup; + public void handleDelta(ICElementDelta delta) { + IProgressMonitor group = Platform.getJobManager().createProgressGroup(); + new PDOMFastHandleDelta(pdom, delta, group).schedule(); } - private class ChangeHandler extends Job { - private final ICElementDelta delta; - private List addedTUs; - private List changedTUs; - private List removedTUs; - - public ChangeHandler(ElementChangedEvent event) { - super("Change Handler"); - delta = event.getDelta(); - } - - protected IStatus run(IProgressMonitor monitor) { - long start = System.currentTimeMillis(); - - String taskName = null; - processDelta(delta); - taskName = "Update PDOM"; - -// if (project != null) { -// processNewProject(project); -// taskName = "Rebuild PDOM"; -// } - - int count - = (addedTUs != null ? addedTUs.size() : 0) - + (changedTUs != null ? changedTUs.size() : 0) - + (removedTUs != null ? removedTUs.size() : 0); - - if (taskName == null || count == 0) - return Status.OK_STATUS; - - monitor.beginTask(taskName, count); - - if (addedTUs != null) - for (Iterator i = addedTUs.iterator(); i.hasNext();) { - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(String.valueOf(count--) - +" files remaining - " - + tu.getPath().toString()); - new PDOMFastAddTU(pdom, tu).schedule(); - } - - if (changedTUs != null) - for (Iterator i = changedTUs.iterator(); i.hasNext();) { - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(String.valueOf(count--) - +" files remaining - " - + tu.getPath().toString()); - new PDOMFastChangeTU(pdom, tu).schedule(); - monitor.worked(1); - } - - if (removedTUs != null) - for (Iterator i = removedTUs.iterator(); i.hasNext();) { - if (monitor.isCanceled()) - return Status.CANCEL_STATUS; - ITranslationUnit tu = (ITranslationUnit)i.next(); - monitor.subTask(String.valueOf(count--) - +" files remaining - " - + tu.getPath().toString()); - new PDOMFastRemoveTU(pdom, tu).schedule(); - monitor.worked(1); - } - - String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$ - if (showTimings!= null) - if (showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$ - System.out.println("Updator Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$ - - return Status.OK_STATUS; - } - - private void processDelta(ICElementDelta delta) { - // First make sure this project is PDOMable - ICElement element = delta.getElement(); - if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()) == null) - return; - - // process the children first - ICElementDelta[] children = delta.getAffectedChildren(); - for (int i = 0; i < children.length; ++i) - processDelta(children[i]); - - // what have we got - if (element.getElementType() == ICElement.C_PROJECT) { - switch (delta.getKind()) { - case ICElementDelta.ADDED: - processNewProject((ICProject)element); - break; - } - } else if (element.getElementType() == ICElement.C_UNIT) { - ITranslationUnit tu = (ITranslationUnit)element; - if (tu.isWorkingCopy()) - // Don't care about working copies either - return; - - switch (delta.getKind()) { - case ICElementDelta.ADDED: - if (addedTUs == null) - addedTUs = new LinkedList(); - addedTUs.add(element); - break; - case ICElementDelta.CHANGED: - if (changedTUs == null) - changedTUs = new LinkedList(); - changedTUs.add(element); - break; - case ICElementDelta.REMOVED: - if (removedTUs == null) - removedTUs = new LinkedList(); - removedTUs.add(element); - break; - } - } - } - - private void processNewProject(final ICProject project) { - try { - project.getProject().accept(new IResourceProxyVisitor() { - public boolean visit(IResourceProxy proxy) throws CoreException { - if (proxy.getType() == IResource.FILE) { - String fileName = proxy.getName(); - IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName); - if (contentType == null) - return true; - String contentTypeId = contentType.getId(); - - if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId) - || CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) { - if (addedTUs == null) - addedTUs = new LinkedList(); - addedTUs.add(CoreModel.getDefault().create((IFile)proxy.requestResource())); - } - // TODO handle header files - return false; - } else { - return true; - } - } - }, 0); - } catch (CoreException e) { - CCorePlugin.log(e); - } - } - } - - public void elementChanged(ElementChangedEvent event) { - new ChangeHandler(event).schedule(); - } - - public void reindex() { - + public void reindex() throws CoreException { + IProgressMonitor group = Platform.getJobManager().createProgressGroup(); + group.beginTask("Reindexing", 100); + new PDOMFastReindex(pdom, group).schedule(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastReindex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastReindex.java new file mode 100644 index 00000000000..45dfc960385 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastReindex.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2006 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * QNX - Initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.core.pdom.indexer.fast; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ITranslationUnit; +import org.eclipse.cdt.internal.core.pdom.PDOM; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceProxy; +import org.eclipse.core.resources.IResourceProxyVisitor; +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; +import org.eclipse.core.runtime.content.IContentType; +import org.eclipse.core.runtime.jobs.Job; + +/** + * @author Doug Schaefer + * + */ +public class PDOMFastReindex extends Job { + + private final PDOM pdom; + private final IProgressMonitor group; + + public PDOMFastReindex(PDOM pdom, IProgressMonitor group) { + super("Reindex"); + this.pdom = pdom; + this.group = group; + setProgressGroup(group, 1); + } + + protected IStatus run(IProgressMonitor monitor) { + try { + // First clear out the DB + pdom.delete(); + + // Now repopulate it + pdom.getProject().getProject().accept(new IResourceProxyVisitor() { + public boolean visit(IResourceProxy proxy) throws CoreException { + if (proxy.getType() == IResource.FILE) { + String fileName = proxy.getName(); + IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName); + if (contentType == null) + return true; + String contentTypeId = contentType.getId(); + + if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId) + || CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) { + new PDOMFastAddTU(pdom, (ITranslationUnit)CoreModel.getDefault().create((IFile)proxy.requestResource()), group).schedule(); + } + // TODO handle header files + return false; + } else { + return true; + } + } + }, 0); + } catch (CoreException e) { + CCorePlugin.log(e); + } + monitor.done(); + return Status.OK_STATUS; + } + +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/nulli/PDOMNullIndexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/nulli/PDOMNullIndexer.java index d391ec62354..af1a705cbad 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/nulli/PDOMNullIndexer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/nulli/PDOMNullIndexer.java @@ -13,21 +13,30 @@ package org.eclipse.cdt.internal.core.pdom.indexer.nulli; import org.eclipse.cdt.core.dom.IPDOM; import org.eclipse.cdt.core.dom.IPDOMIndexer; -import org.eclipse.cdt.core.model.ElementChangedEvent; +import org.eclipse.cdt.core.model.ICElementDelta; +import org.eclipse.cdt.internal.core.pdom.PDOM; +import org.eclipse.core.runtime.CoreException; /** * @author Doug Schaefer * + * The Null Indexer which does nothing. */ public class PDOMNullIndexer implements IPDOMIndexer { + private IPDOM pdom; + public void setPDOM(IPDOM pdom) { + this.pdom = pdom; } - public void reindex() { + public void handleDelta(ICElementDelta delta) { } - - public void elementChanged(ElementChangedEvent event) { + + public void reindex() throws CoreException { + // Just clear out the old index + pdom.delete(); + ((PDOM)pdom).fireChange(); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/PDOMUpdateProjectAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/PDOMUpdateProjectAction.java index 9581dd38d7d..fed55677f4a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/PDOMUpdateProjectAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/PDOMUpdateProjectAction.java @@ -1,8 +1,8 @@ package org.eclipse.cdt.internal.ui.actions; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOM; import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.internal.core.pdom.PDOMUpdator; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; @@ -34,11 +34,10 @@ public class PDOMUpdateProjectAction implements IObjectActionDelegate { if (!(objs[i] instanceof ICProject)) continue; - ICProject cproject = (ICProject)objs[i]; + ICProject project = (ICProject)objs[i]; + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project); try { - CCorePlugin.getPDOMManager().deletePDOM(cproject.getProject()); - PDOMUpdator job = new PDOMUpdator(cproject, null); - job.schedule(); + pdom.getIndexer().reindex(); } catch (CoreException e) { CUIPlugin.getDefault().log(e); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/IndexView.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/IndexView.java index 9a5a8f07ff5..1b3653ea4a5 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/IndexView.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/IndexView.java @@ -263,7 +263,7 @@ public class IndexView extends ViewPart implements PDOM.IListener { public Object[] getChildren(Object parentElement) { if (parentElement instanceof ICProject) { try { - PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(((ICProject)parentElement).getProject()); + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM((ICProject)parentElement); int n = 0; for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage()) ++n; @@ -325,7 +325,7 @@ public class IndexView extends ViewPart implements PDOM.IListener { public boolean hasChildren(Object element) { if (element instanceof ICProject) { - IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()); + IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM((ICProject)element); if (ipdom == null || !(ipdom instanceof PDOM)) return false; @@ -429,10 +429,10 @@ public class IndexView extends ViewPart implements PDOM.IListener { ICModel model = CoreModel.getDefault().getCModel(); viewer.setInput(model); try { - ICProject[] cprojects = model.getCProjects(); + ICProject[] projects = model.getCProjects(); int n = 0; - for (int i = 0; i < cprojects.length; ++i) { - PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(cprojects[i].getProject()); + for (int i = 0; i < projects.length; ++i) { + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(projects[i]); if (pdom != null) { ++n; pdom.addListener(this); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/RebuildIndexAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/RebuildIndexAction.java index 84b413c5bf1..6c5b462ed65 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/RebuildIndexAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/RebuildIndexAction.java @@ -12,15 +12,14 @@ package org.eclipse.cdt.internal.ui.indexview; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOM; import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.internal.core.pdom.PDOMUpdator; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; - /** * @author Doug Schaefer * @@ -41,11 +40,10 @@ public class RebuildIndexAction extends IndexAction { if (!(objs[i] instanceof ICProject)) continue; - ICProject cproject = (ICProject)objs[i]; + ICProject project = (ICProject)objs[i]; + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project); try { - CCorePlugin.getPDOMManager().deletePDOM(cproject.getProject()); - PDOMUpdator job = new PDOMUpdator(cproject, null); - job.schedule(); + pdom.getIndexer().reindex(); } catch (CoreException e) { CUIPlugin.getDefault().log(e); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java index f6a956353f9..ddf706b0b6a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchPatternQuery.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.core.resources.IProject; @@ -93,7 +94,8 @@ public class PDOMSearchPatternQuery extends PDOMSearchQuery { // Not a CDT project return; - PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(project); + ICProject cproject = CoreModel.getDefault().create(project); + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(cproject); PDOMBinding[] bindings = pdom.findBindings(pattern); for (int i = 0; i < bindings.length; ++i) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java index 84ea27ae48f..efa1d7e0b8a 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java @@ -127,12 +127,12 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd IWorkingCopy workingCopy = (IWorkingCopy)fEditor.getInputCElement(); IFile resourceFile = (IFile)workingCopy.getResource(); project = new CProject(null, resourceFile.getProject()); - IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(resourceFile.getProject()); + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject()); try { if (pdom != null) { try { ILanguage language = workingCopy.getLanguage(); - tu = language.getTranslationUnit(workingCopy, + tu = language.getASTTranslationUnit(workingCopy, ILanguage.AST_USE_INDEX | ILanguage.AST_SKIP_INDEXED_HEADERS); } catch (CoreException e) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java index 88b0bc19bdc..38cdd7e0ee5 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CCompletionProcessor2.java @@ -82,8 +82,7 @@ public class CCompletionProcessor2 implements IContentAssistProcessor { IFile file = (IFile)workingCopy.getResource(); if (file != null) { - IProject project = file.getProject(); - IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project); + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject()); ICodeReaderFactory readerFactory; if (pdom != null) readerFactory = pdom.getCodeReaderFactory(workingCopy); @@ -93,7 +92,7 @@ public class CCompletionProcessor2 implements IContentAssistProcessor { } else if (editor.getEditorInput() instanceof ExternalEditorInput) { IStorage storage = ((ExternalEditorInput)(editor.getEditorInput())).getStorage(); IProject project = workingCopy.getCProject().getProject(); - IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project); + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject()); ICodeReaderFactory readerFactory; if (pdom != null) readerFactory = pdom.getCodeReaderFactory(workingCopy); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java index 23d77e383a4..f56918cbf43 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/CTagsIndexerBlock.java @@ -13,7 +13,7 @@ package org.eclipse.cdt.ui.dialogs; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ICDescriptor; import org.eclipse.cdt.core.ICExtensionReference; -import org.eclipse.cdt.core.index.ICDTIndexer; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexer; import org.eclipse.cdt.internal.ui.CUIMessages; import org.eclipse.cdt.internal.ui.util.SWTUtil; @@ -64,11 +64,11 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { /* (non-Javadoc) * @see org.eclipse.cdt.ui.index.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject) */ - public void initialize(IProject project) { + public void initialize(ICProject project) { this.currentProject = project; try { - loadPersistedValues(project); + loadPersistedValues(project.getProject()); } catch (CoreException e) {} } @@ -107,7 +107,7 @@ public class CTagsIndexerBlock extends AbstractIndexerPage { proj = container.getProject(); } else{ - proj = currentProject; + proj = currentProject.getProject(); } if (proj != null) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DOMSourceIndexerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DOMSourceIndexerBlock.java index bfe97086976..e640a7a5e72 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DOMSourceIndexerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/DOMSourceIndexerBlock.java @@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ICDescriptor; import org.eclipse.cdt.core.ICExtensionReference; import org.eclipse.cdt.core.index.ICDTIndexer; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer; import org.eclipse.cdt.internal.ui.CUIMessages; import org.eclipse.cdt.ui.CUIPlugin; @@ -64,7 +65,7 @@ public class DOMSourceIndexerBlock extends AbstractIndexerPage { proj = container.getProject(); } else{ - proj = currentProject; + proj = currentProject.getProject(); } if (proj != null) { @@ -92,12 +93,12 @@ public class DOMSourceIndexerBlock extends AbstractIndexerPage { if (currentProject == null) return; - ICDTIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(currentProject); + ICDTIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(currentProject.getProject()); int indexMarkersInt = Integer.parseInt(indexMarkers); if (indexMarkersInt != oldIndexerProblemsValue && indexMarkersInt == 0) if (indexer instanceof DOMSourceIndexer) - ((DOMSourceIndexer) indexer).removeIndexerProblems(currentProject); + ((DOMSourceIndexer) indexer).removeIndexerProblems(currentProject.getProject()); } /* (non-Javadoc) @@ -142,10 +143,10 @@ public class DOMSourceIndexerBlock extends AbstractIndexerPage { /* (non-Javadoc) * @see org.eclipse.cdt.ui.index2.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject) */ - public void initialize(IProject project) { + public void initialize(ICProject project) { try { - loadPersistedValues(project); + loadPersistedValues(project.getProject()); this.currentProject = project; } catch (CoreException e) {} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java index 37febefaa47..edecd4fa29f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java @@ -16,6 +16,8 @@ import java.util.Iterator; import java.util.List; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.index.nullindexer.NullIndexer; import org.eclipse.cdt.internal.ui.CUIMessages; import org.eclipse.cdt.ui.CUIPlugin; @@ -340,7 +342,8 @@ public class IndexerBlock extends AbstractCOptionPage { : ((AbstractIndexerPage) currentPage).getCurrentProject(); if ( project != null) { - CCorePlugin.getPDOMManager().setIndexerId(project, indexerID); + ICProject cproject = CoreModel.getDefault().create(project); + CCorePlugin.getPDOMManager().setIndexerId(cproject, indexerID); if (currentPage != null && currentPage.getControl() != null) { currentPage.performApply(new SubProgressMonitor(monitor, 1)); } @@ -377,14 +380,14 @@ public class IndexerBlock extends AbstractCOptionPage { * This is needed since we need to pass in the project if we are trying to save changes made to the * property page. */ - public void persistIndexerSettings(IProject project, IProgressMonitor monitor) throws CoreException{ + public void persistIndexerSettings(ICProject project, IProgressMonitor monitor) throws CoreException{ if (currentPage instanceof AbstractIndexerPage) ((AbstractIndexerPage)currentPage).setCurrentProject(project); this.performApply(monitor); } - public void resetIndexerPageSettings(IProject project){ + public void resetIndexerPageSettings(ICProject project){ if (currentPage instanceof AbstractIndexerPage) ((AbstractIndexerPage)currentPage).setCurrentProject(project); @@ -411,7 +414,7 @@ public class IndexerBlock extends AbstractCOptionPage { * @param oldIndexerID * @param project */ - public void setIndexerID(String indexerID, IProject project) { + public void setIndexerID(String indexerID, ICProject project) { //Get the corresponding text for the given indexer id selectedIndexerId = getIndexerPageName(indexerID); //Store the currently selected indexer id diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java index c5ec69d4a3c..efd648d64d0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java @@ -12,7 +12,10 @@ package org.eclipse.cdt.ui.dialogs; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.ui.ICHelpContextIds; +import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; @@ -45,18 +48,22 @@ public class IndexerOptionPropertyPage extends PropertyPage { } protected void performDefaults() { - IProject tempProject = getProject(); + ICProject tempProject = CoreModel.getDefault().create(getProject()); optionPage.resetIndexerPageSettings(tempProject); } private void initialize(){ - IProject project = getProject(); - oldIndexerID = CCorePlugin.getPDOMManager().getIndexerId(project); - optionPage.setIndexerID(oldIndexerID, project); + ICProject project = CoreModel.getDefault().create(getProject()); + try { + oldIndexerID = CCorePlugin.getPDOMManager().getIndexerId(project); + optionPage.setIndexerID(oldIndexerID, project); + } catch (CoreException e) { + CUIPlugin.getDefault().log(e); + } } public boolean performOk() { - IProject tempProject = getProject(); + ICProject tempProject = CoreModel.getDefault().create(getProject()); try { optionPage.persistIndexerSettings(tempProject, new NullProgressMonitor()); } catch (CoreException e) {} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/NullIndexerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/NullIndexerBlock.java index 1d407bf36cf..e2bb88957ea 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/NullIndexerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/NullIndexerBlock.java @@ -10,8 +10,8 @@ *******************************************************************************/ package org.eclipse.cdt.ui.dialogs; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.ui.index.AbstractIndexerPage; -import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.SWT; @@ -22,8 +22,7 @@ import org.eclipse.swt.widgets.Composite; */ public class NullIndexerBlock extends AbstractIndexerPage { - - public void initialize(IProject currentProject) {} + public void initialize(ICProject currentProject) {} public void performApply(IProgressMonitor monitor) throws CoreException {} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/index/AbstractIndexerPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/index/AbstractIndexerPage.java index 979e326f84b..0c97d960b83 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/index/AbstractIndexerPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/index/AbstractIndexerPage.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.ui.index; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage; import org.eclipse.core.resources.IProject; @@ -20,7 +21,7 @@ import org.eclipse.jface.preference.IPreferenceStore; */ public abstract class AbstractIndexerPage extends AbstractCOptionPage { - protected IProject currentProject; + protected ICProject currentProject; protected IPreferenceStore prefStore=CUIPlugin.getDefault().getPreferenceStore(); protected AbstractIndexerPage() { @@ -31,7 +32,7 @@ public abstract class AbstractIndexerPage extends AbstractCOptionPage { * Called by BaseIndexerBlock to give the indexer page a chance to load its state from store * @param currentProject - the project that this page is being created for */ - abstract public void initialize(IProject currentProject); + abstract public void initialize(ICProject currentProject); /** * Called by the indexer block to give the indexer page an opportunity to * load any preferecnes previously set @@ -44,9 +45,10 @@ public abstract class AbstractIndexerPage extends AbstractCOptionPage { abstract public void removePreferences(); public IProject getCurrentProject() { - return currentProject; + return currentProject.getProject(); } - public void setCurrentProject(IProject currentProject) { + + public void setCurrentProject(ICProject currentProject) { this.currentProject = currentProject; } }