From 487aa70ebca6bf0837149fa91ade54ec500de079 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Thu, 30 Mar 2006 21:59:22 +0000 Subject: [PATCH] Integrated indexing into PDOM. Also change the names of a couple of things, such as PDOM which used to be PDOMDatabase. Cleaned up the indexing setting so that it is a ProjectScope preference instead of a ICExtension. Conversion should happen automagically. --- .../core/indexer/tests/DependencyTests.java | 2 +- .../cdt/core/search/tests/BaseSearchTest.java | 3 +- .../core/suite/AutomatedIntegrationSuite.java | 15 ++- .../internal/core/model/CModelManager.java | 3 +- .../cdt/internal/core/model/CProject.java | 3 +- .../internal/core/model/TranslationUnit.java | 3 +- .../org/eclipse/cdt/core/dom/IPDOM.java | 3 +- .../eclipse/cdt/core/dom/IPDOMManager.java | 33 ++++++ .../cdt/core/dom/ast/gnu/c/GCCLanguage.java | 8 +- .../cdt/core/dom/ast/gnu/cpp/GPPLanguage.java | 8 +- .../pdom/{PDOMDatabase.java => PDOM.java} | 71 ++++++++++-- .../core/pdom/PDOMCodeReaderFactory.java | 6 +- .../cdt/internal/core/pdom/PDOMLanguage.java | 6 +- .../cdt/internal/core/pdom/PDOMManager.java | 108 ++++++++++++++++-- .../cdt/internal/core/pdom/PDOMUpdator.java | 21 ++-- .../core/pdom/dom/IPDOMLinkageFactory.java | 6 +- .../internal/core/pdom/dom/PDOMBinding.java | 10 +- .../pdom/dom/PDOMBindingAdapterFactory.java | 9 +- .../cdt/internal/core/pdom/dom/PDOMFile.java | 10 +- .../internal/core/pdom/dom/PDOMLinkage.java | 14 +-- .../internal/core/pdom/dom/PDOMMember.java | 6 +- .../core/pdom/dom/PDOMMemberOwner.java | 6 +- .../cdt/internal/core/pdom/dom/PDOMName.java | 8 +- .../cdt/internal/core/pdom/dom/PDOMNode.java | 16 +-- .../internal/core/pdom/dom/c/PDOMCField.java | 6 +- .../core/pdom/dom/c/PDOMCFunction.java | 6 +- .../core/pdom/dom/c/PDOMCLinkage.java | 8 +- .../core/pdom/dom/c/PDOMCLinkageFactory.java | 6 +- .../core/pdom/dom/c/PDOMCStructure.java | 6 +- .../core/pdom/dom/c/PDOMCVariable.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPClassType.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPField.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPFunction.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 8 +- .../pdom/dom/cpp/PDOMCPPLinkageFactory.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPMethod.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPNamespace.java | 8 +- .../pdom/dom/cpp/PDOMCPPNamespaceAlias.java | 6 +- .../core/pdom/dom/cpp/PDOMCPPVariable.java | 6 +- .../core/pdom/indexer/fast/PDOMFastAddTU.java | 30 ++++- .../pdom/indexer/fast/PDOMFastChangeTU.java | 30 ++++- .../pdom/indexer/fast/PDOMFastIndexer.java | 21 ++-- .../pdom/indexer/fast/PDOMFastRemoveTU.java | 14 ++- .../pdom/indexer/nulli/PDOMNullIndexer.java | 33 ++++++ core/org.eclipse.cdt.core/plugin.properties | 4 +- core/org.eclipse.cdt.core/plugin.xml | 14 +++ .../org.eclipse.cdt.core/schema/CIndexer.exsd | 17 ++- .../src/org/eclipse/cdt/core/CCorePlugin.java | 15 ++- .../src/org/eclipse/cdt/core/dom/PDOM.java | 94 --------------- .../core/CCorePluginResources.properties | 1 + core/org.eclipse.cdt.ui/plugin.properties | 1 + core/org.eclipse.cdt.ui/plugin.xml | 5 + .../ui/actions/PDOMUpdateProjectAction.java | 4 +- .../cdt/internal/ui/indexview/IndexView.java | 30 ++--- .../internal/ui/indexview/LinkageCache.java | 14 +-- .../ui/indexview/RebuildIndexAction.java | 4 +- .../ui/search/PDOMSearchPatternQuery.java | 6 +- .../actions/OpenDeclarationsAction.java | 4 +- .../contentassist/CCompletionProcessor2.java | 6 +- .../eclipse/cdt/ui/dialogs/IndexerBlock.java | 100 ++-------------- .../ui/dialogs/IndexerOptionPropertyPage.java | 68 +---------- 61 files changed, 522 insertions(+), 467 deletions(-) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java rename core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/{PDOMDatabase.java => PDOM.java} (83%) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/nulli/PDOMNullIndexer.java delete mode 100644 core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java diff --git a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java index 8b11b6e697f..072867ead2e 100644 --- a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java +++ b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java @@ -121,7 +121,7 @@ import org.eclipse.core.runtime.Platform; if (testProject==null) fail("Unable to create project"); - resetIndexer(CCorePlugin.DEFAULT_INDEXER_UNIQ_ID); + resetIndexer(DOMSourceIndexer.ID); //The DOM Source Indexer checks to see if a file has any scanner info //set prior to indexing it in order to increase efficiency. We need to let it know //that it is running in test mode in order to allow for this scanner info test to be skipped diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java index 432fa63f8d9..8f1961adad7 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java @@ -71,7 +71,8 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants { try { //Create temp project testProject = createProject("SearchTestProject"); - + resetIndexer(DOMSourceIndexer.ID); + testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true)); //Set the id of the source indexer extension point as a session property to allow diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java index 13c37cffb7f..c77320ac9ff 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java @@ -20,8 +20,6 @@ import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.cdt.core.cdescriptor.tests.CDescriptorTests; -import org.eclipse.cdt.core.indexer.tests.DependencyTests; -import org.eclipse.cdt.core.indexer.tests.DOMSourceIndexerTests; import org.eclipse.cdt.core.model.tests.AllCoreTests; import org.eclipse.cdt.core.model.tests.BinaryTests; import org.eclipse.cdt.core.model.tests.ElementDeltaTests; @@ -30,8 +28,6 @@ import org.eclipse.cdt.core.parser.failedTests.ASTFailedTests; import org.eclipse.cdt.core.parser.failedTests.FailedCompleteParseASTTest; import org.eclipse.cdt.core.parser.failedTests.STLFailedTests; import org.eclipse.cdt.core.parser.tests.ParserTestSuite; -import org.eclipse.cdt.core.search.tests.SearchTestSuite; -import org.eclipse.cdt.core.tests.RegressionTestSuite; /** * @author vhirsl @@ -66,12 +62,15 @@ public class AutomatedIntegrationSuite extends TestSuite { suite.addTest(BinaryTests.suite()); suite.addTest(ElementDeltaTests.suite()); suite.addTest(WorkingCopyTests.suite()); - suite.addTest(SearchTestSuite.suite()); - suite.addTest(DependencyTests.suite()); - suite.addTest(RegressionTestSuite.suite()); + + // TODO turning off indexer/search tests until the PDOM + // settles. These'll probably have to be rewritten anyway. +// suite.addTest(SearchTestSuite.suite()); +// suite.addTest(DependencyTests.suite()); +// suite.addTest(RegressionTestSuite.suite()); //Indexer Tests need to be run after any indexer client tests //as the last test shuts down the indexing thread - suite.addTest(DOMSourceIndexerTests.suite()); +// suite.addTest(DOMSourceIndexerTests.suite()); // Last test to trigger report generation // Add all failed tests 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 313785531e4..43354f41cd3 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 @@ -34,7 +34,6 @@ import org.eclipse.cdt.core.ICExtensionReference; import org.eclipse.cdt.core.IBinaryParser.IBinaryArchive; import org.eclipse.cdt.core.IBinaryParser.IBinaryFile; import org.eclipse.cdt.core.IBinaryParser.IBinaryObject; -import org.eclipse.cdt.core.dom.PDOM; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ElementChangedEvent; @@ -1139,7 +1138,7 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe this.getIndexManager().discardJobs(project.getName()); // delete the PDOM for this project try { - PDOM.deletePDOM(project); + CCorePlugin.getPDOMManager().deletePDOM(project); } catch (CoreException e) { CCorePlugin.log(e); } 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 29510e377cf..5e337df5c9c 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 @@ -43,7 +43,6 @@ import org.eclipse.cdt.core.model.IOutputEntry; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.ISourceEntry; import org.eclipse.cdt.core.model.ISourceRoot; -import org.eclipse.cdt.internal.core.pdom.PDOMManager; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; @@ -698,7 +697,7 @@ public class CProject extends Openable implements ICProject { } public IPDOM getIndex() { - return PDOMManager.getInstance().getPDOM(getProject()); + return CCorePlugin.getPDOMManager().getPDOM(getProject()); } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java index d243ca0a92c..fc5e22c235d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java @@ -687,7 +687,8 @@ public class TranslationUnit extends Openable implements ITranslationUnit { // Special magic for C/C++ header files if (language == null && isHeaderUnit()) { - contentType = CoreModel.hasCCNature(getResource().getProject()) + IResource resource = getResource(); + contentType = resource != null && CoreModel.hasCCNature(resource.getProject()) ? manager.getContentType(CCorePlugin.CONTENT_TYPE_CXXSOURCE) : manager.getContentType(CCorePlugin.CONTENT_TYPE_CSOURCE); language = LanguageManager.getInstance().getLanguage(contentType); 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 af50aa132c4..8c983ecf605 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 @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; /** * @author Doug Schaefer @@ -22,7 +23,7 @@ import org.eclipse.core.runtime.CoreException; * It provides services to allow access to DOM information * persisted between parses. */ -public interface IPDOM { +public interface IPDOM extends IAdaptable { public IBinding resolveBinding(IASTName name); 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 new file mode 100644 index 00000000000..f94ed6e69a5 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * 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.core.dom; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public interface IPDOMManager { + + // Getting and deleting a PDOM for a project + public IPDOM getPDOM(IProject project); + public void deletePDOM(IProject 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); +} 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 d208007b83e..088b546555f 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 @@ -13,8 +13,6 @@ package org.eclipse.cdt.core.dom.ast.gnu.c; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; -import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.dom.PDOM; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.IContributedModelBuilder; @@ -37,8 +35,8 @@ import org.eclipse.cdt.internal.core.dom.parser.c.GNUCSourceParser; import org.eclipse.cdt.internal.core.parser.scanner2.DOMScanner; import org.eclipse.cdt.internal.core.parser.scanner2.GCCScannerExtensionConfiguration; import org.eclipse.cdt.internal.core.parser.scanner2.IScannerExtensionConfiguration; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.PDOMCodeReaderFactory; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory; import org.eclipse.core.resources.IFile; @@ -97,10 +95,10 @@ public class GCCLanguage extends PlatformObject implements ILanguage { scanInfo = new ScannerInfo(); } - IPDOM pdom = PDOM.getPDOM(project); + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(project).getAdapter(PDOM.class); ICodeReaderFactory fileCreator; if ((style & ILanguage.AST_SKIP_INDEXED_HEADERS) != 0) - fileCreator = new PDOMCodeReaderFactory((PDOMDatabase)pdom); + fileCreator = new PDOMCodeReaderFactory(pdom); else fileCreator = SavedCodeReaderFactory.getInstance(); 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 e272f9b9a8d..1e0276e0c55 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 @@ -13,8 +13,6 @@ package org.eclipse.cdt.core.dom.ast.gnu.cpp; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; -import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.dom.PDOM; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.model.IContributedModelBuilder; @@ -37,8 +35,8 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPParserExtensionConfigurat import org.eclipse.cdt.internal.core.parser.scanner2.DOMScanner; import org.eclipse.cdt.internal.core.parser.scanner2.GPPScannerExtensionConfiguration; import org.eclipse.cdt.internal.core.parser.scanner2.IScannerExtensionConfiguration; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.PDOMCodeReaderFactory; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory; import org.eclipse.core.resources.IFile; @@ -96,10 +94,10 @@ public class GPPLanguage extends PlatformObject implements ILanguage { scanInfo = new ScannerInfo(); } - IPDOM pdom = PDOM.getPDOM(project); + PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(project).getAdapter(PDOM.class); ICodeReaderFactory fileCreator; if ((style & ILanguage.AST_SKIP_INDEXED_HEADERS) != 0) - fileCreator = new PDOMCodeReaderFactory((PDOMDatabase)pdom); + fileCreator = new PDOMCodeReaderFactory(pdom); else fileCreator = SavedCodeReaderFactory.getInstance(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMDatabase.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java similarity index 83% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMDatabase.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 854224a6426..e8607b87939 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMDatabase.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -18,6 +18,7 @@ import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; import org.eclipse.cdt.core.dom.IPDOM; +import org.eclipse.cdt.core.dom.IPDOMIndexer; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; @@ -37,17 +38,20 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.PlatformObject; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.jobs.ISchedulingRule; +import org.eclipse.core.runtime.jobs.Job; /** * The PDOM Database. * * @author Doug Schaefer */ -public class PDOMDatabase implements IPDOM { +public class PDOM extends PlatformObject implements IPDOM { private final IProject project; + private IPDOMIndexer indexer; private final IPath dbPath; private Database db; @@ -62,25 +66,40 @@ public class PDOMDatabase implements IPDOM { private static final QualifiedName dbNameProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "dbName"); //$NON-NLS-1$ - public PDOMDatabase(IProject project, PDOMManager manager) throws CoreException { + public PDOM(IProject project, IPDOMIndexer indexer) throws CoreException { this.project = project; + this.indexer = indexer; + + // Load up the database String dbName = project.getPersistentProperty(dbNameProperty); if (dbName == null) { dbName = project.getName() + "_" + System.currentTimeMillis() + ".pdom"; project.setPersistentProperty(dbNameProperty, dbName); } - dbPath = CCorePlugin.getDefault().getStateLocation().append(dbName); db = new Database(dbPath.toOSString(), VERSION); + + // Create the appropriate indexer } + public Object getAdapter(Class adapter) { + if (adapter == PDOM.class) + return this; + else + return super.getAdapter(adapter); + } + public IProject getProject() { return project; } + public IPDOMIndexer getIndexer() { + return indexer; + } + public static interface IListener { - public void handleChange(PDOMDatabase pdom); + public void handleChange(PDOM pdom); } private List listeners; @@ -97,7 +116,7 @@ public class PDOMDatabase implements IPDOM { listeners.remove(listener); } - private void fireChange() { + public void fireChange() { if (listeners == null) return; Iterator i = listeners.iterator(); @@ -118,6 +137,9 @@ public class PDOMDatabase implements IPDOM { return fileIndex; } + /** + * @deprecated + */ public void addSymbols(ITranslationUnit tu) throws CoreException { final ILanguage language = tu.getLanguage(); if (language == null) @@ -154,6 +176,31 @@ public class PDOMDatabase implements IPDOM { fireChange(); } + public void addSymbols(ILanguage language, IASTTranslationUnit ast) throws CoreException { + final PDOMLinkage linkage = getLinkage(language); + if (linkage == null) + return; + + ast.accept(new ASTVisitor() { + { + shouldVisitNames = true; + shouldVisitDeclarations = true; + } + + public int visit(IASTName name) { + try { + linkage.addName(name); + return PROCESS_CONTINUE; + } catch (CoreException e) { + CCorePlugin.log(e); + return PROCESS_ABORT; + } + }; + });; + + fireChange(); + } + public void removeSymbols(ITranslationUnit tu) throws CoreException { String filename = ((IFile)tu.getResource()).getLocation().toOSString(); PDOMFile file = PDOMFile.find(this, filename); @@ -251,7 +298,7 @@ public class PDOMDatabase implements IPDOM { // Read-write lock rules. Readers don't conflict with other readers, // Writers conflict with readers, and everyone conflicts with writers. - private class ReaderLockRule implements ISchedulingRule { + private final ISchedulingRule readerLockRule = new ISchedulingRule() { public boolean isConflicting(ISchedulingRule rule) { if (rule == this) return false; @@ -263,9 +310,9 @@ public class PDOMDatabase implements IPDOM { public boolean contains(ISchedulingRule rule) { return rule == this; } - } + }; - private class WriterLockRule implements ISchedulingRule { + private final ISchedulingRule writerLockRule = new ISchedulingRule() { public boolean isConflicting(ISchedulingRule rule) { if (rule == this || rule == getReaderLockRule()) return true; @@ -275,10 +322,7 @@ public class PDOMDatabase implements IPDOM { public boolean contains(ISchedulingRule rule) { return rule == this; } - } - - private ReaderLockRule readerLockRule = new ReaderLockRule(); - private WriterLockRule writerLockRule = new WriterLockRule(); + }; public ISchedulingRule getReaderLockRule() { return readerLockRule; @@ -288,4 +332,7 @@ public class PDOMDatabase implements IPDOM { return writerLockRule; } + // These are really only recommendations + public static final int READER_PRIORITY = Job.SHORT; + public static final int WRITER_PRIORITY = Job.LONG; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMCodeReaderFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMCodeReaderFactory.java index 269d3ff38f8..85e804844a1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMCodeReaderFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMCodeReaderFactory.java @@ -33,14 +33,14 @@ import org.eclipse.core.runtime.Status; */ public class PDOMCodeReaderFactory implements ICodeReaderFactory { - private final PDOMDatabase pdom; + private final PDOM pdom; private List workingCopies; - public PDOMCodeReaderFactory(PDOMDatabase pdom) { + public PDOMCodeReaderFactory(PDOM pdom) { this.pdom = pdom; } - public PDOMCodeReaderFactory(PDOMDatabase pdom, IWorkingCopy workingCopy) { + public PDOMCodeReaderFactory(PDOM pdom, IWorkingCopy workingCopy) { this(pdom); workingCopies = new ArrayList(1); workingCopies.add(workingCopy); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMLanguage.java index c0ff252016d..8f7fc709df8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMLanguage.java @@ -20,19 +20,19 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMLanguage { - private PDOMDatabase pdom; + private PDOM pdom; private int record; private static final int NEXT = 0; // int private static final int ID = 4; // char private static final int NAME = 6; // string - public PDOMLanguage(PDOMDatabase pdom, int record) { + public PDOMLanguage(PDOM pdom, int record) { this.pdom = pdom; this.record = record; } - public PDOMLanguage(PDOMDatabase pdom, String name, int id, int next) throws CoreException { + public PDOMLanguage(PDOM pdom, String name, int id, int next) throws CoreException { this.pdom = pdom; Database db = pdom.getDB(); record = db.malloc(6 + (name.length() + 1) * 2); 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 431c1423fc7..2674c89bee4 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 @@ -11,14 +11,29 @@ package org.eclipse.cdt.internal.core.pdom; import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.ICDescriptor; +import org.eclipse.cdt.core.ICExtensionReference; import org.eclipse.cdt.core.dom.IPDOM; +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.IElementChangedListener; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ProjectScope; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +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; +import org.osgi.service.prefs.BackingStoreException; /** * The PDOM Provider. This is likely temporary since I hope @@ -27,26 +42,19 @@ import org.eclipse.core.runtime.jobs.IJobChangeListener; * * @author Doug Schaefer */ -public class PDOMManager implements IElementChangedListener, IJobChangeListener { +public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobChangeListener { - private static PDOMManager instance; private PDOMUpdator currJob; private static final QualifiedName pdomProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "pdom"); //$NON-NLS-1$ - public static PDOMManager getInstance() { - if (instance == null) - instance = new PDOMManager(); - return instance; - } - public IPDOM getPDOM(IProject project) { try { IPDOM pdom = (IPDOM)project.getSessionProperty(pdomProperty); if (pdom == null) { - pdom = new PDOMDatabase(project, this); + pdom = new PDOM(project, createIndexer(project)); project.setSessionProperty(pdomProperty, pdom); } @@ -97,4 +105,86 @@ public class PDOMManager implements IElementChangedListener, IJobChangeListener return this; } + private static final String INDEXER_ID_KEY = "indexerId"; //$NON-NLS-1$ + + public String getDefaultIndexerId() { + IPreferencesService prefService = Platform.getPreferencesService(); + return prefService.getString(CCorePlugin.PLUGIN_ID, INDEXER_ID_KEY, + CCorePlugin.DEFAULT_INDEXER_UNIQ_ID, null); + } + + public void setDefaultIndexerId(String indexerId) { + IEclipsePreferences prefs = new InstanceScope().getNode(CCorePlugin.PLUGIN_ID); + if (prefs == null) + return; // TODO why would this be null? + + prefs.put(INDEXER_ID_KEY, indexerId); + try { + prefs.flush(); + } catch (BackingStoreException e) { + } + } + + public String getIndexerId(IProject project) { + IEclipsePreferences prefs = new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID); + if (prefs == null) + return getDefaultIndexerId(); + + String indexerId = prefs.get(INDEXER_ID_KEY, null); + if (indexerId == null) { + // See if it is in the ICDescriptor + try { + ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project, true); + ICExtensionReference[] ref = desc.get(CCorePlugin.INDEXER_UNIQ_ID); + if (ref != null && ref.length > 0) { + indexerId = ref[0].getID(); + } + } catch (CoreException e) { + } + + if (indexerId == null) + // make it the default + indexerId = getDefaultIndexerId(); + + setIndexerId(project, indexerId); + } + return indexerId; + } + + public void setIndexerId(IProject project, String indexerId) { + IEclipsePreferences prefs = new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID); + if (prefs == null) + return; // TODO why would this be null? + + prefs.put(INDEXER_ID_KEY, indexerId); + try { + prefs.flush(); + } catch (BackingStoreException e) { + } + } + + private IPDOMIndexer createIndexer(IProject project) throws CoreException { + String indexerId = getIndexerId(project); + + // Look up in extension point + IExtension indexerExt = Platform.getExtensionRegistry() + .getExtension(CCorePlugin.INDEXER_UNIQ_ID, indexerId); + IConfigurationElement[] elements = indexerExt.getConfigurationElements(); + for (int i = 0; i < elements.length; ++i) { + IConfigurationElement element = elements[i]; + if ("run".equals(element.getName())) //$NON-NLS-1$ + return (IPDOMIndexer)element.createExecutableExtension("class"); //$NON-NLS-1$ + } + throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, + 0, CCorePlugin.getResourceString("indexer.notFound"), null)); //$NON-NLS-1$ + } + + /** + * Startup the PDOM. This mainly sets us up to handle model + * change events. + */ + public void startup() { + CoreModel.getDefault().addElementChangedListener(this); + } + } 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 index 901c8d8fd37..f7535ee10a1 100644 --- 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 @@ -16,7 +16,6 @@ import java.util.List; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.dom.PDOM; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElementDelta; @@ -141,7 +140,7 @@ public class PDOMUpdator extends Job { private void processDelta(ICElementDelta delta) { // First make sure this project is PDOMable ICElement element = delta.getElement(); - if (element instanceof ICProject && PDOM.getPDOM(((ICProject)element).getProject()) == null) + if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()) == null) return; // process the children first @@ -184,8 +183,6 @@ public class PDOMUpdator extends Job { private void processNewProject(final ICProject project) { try { - if (!PDOM.isEnabled(project.getProject())) - return; project.getProject().accept(new IResourceProxyVisitor() { public boolean visit(IResourceProxy proxy) throws CoreException { if (proxy.getType() == IResource.FILE) { @@ -215,30 +212,30 @@ public class PDOMUpdator extends Job { private void processAddedTU(ITranslationUnit tu) throws CoreException { IPDOM pdom = tu.getCProject().getIndex(); - if (pdom == null || !(pdom instanceof PDOMDatabase)) + if (pdom == null || !(pdom instanceof PDOM)) return; - PDOMDatabase mypdom = (PDOMDatabase)pdom; + PDOM mypdom = (PDOM)pdom; mypdom.addSymbols(tu); } private void processRemovedTU(ITranslationUnit tu) throws CoreException { IProject project = tu.getCProject().getProject(); - IPDOM pdom = PDOM.getPDOM(project); - if (pdom == null || !(pdom instanceof PDOMDatabase)) + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project); + if (pdom == null || !(pdom instanceof PDOM)) return; - PDOMDatabase mypdom = (PDOMDatabase)pdom; + 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 = PDOM.getPDOM(tu.getCProject().getProject()); - if (pdom == null || !(pdom instanceof PDOMDatabase)) + IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(tu.getCProject().getProject()); + if (pdom == null || !(pdom instanceof PDOM)) return; - PDOMDatabase mypdom = (PDOMDatabase)pdom; + 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/IPDOMLinkageFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/IPDOMLinkageFactory.java index 35fd844c000..3ee10e7d315 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/IPDOMLinkageFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/IPDOMLinkageFactory.java @@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.pdom.dom; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.core.runtime.CoreException; /** @@ -20,8 +20,8 @@ import org.eclipse.core.runtime.CoreException; */ public interface IPDOMLinkageFactory { - public PDOMLinkage getLinkage(PDOMDatabase pdom, int record); + public PDOMLinkage getLinkage(PDOM pdom, int record); - public PDOMLinkage createLinkage(PDOMDatabase pdom) throws CoreException; + public PDOMLinkage createLinkage(PDOM pdom) throws CoreException; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java index 0880a982d6d..d3b1096f2cb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBinding.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.core.runtime.CoreException; @@ -32,7 +32,7 @@ public abstract class PDOMBinding extends PDOMNode implements IBinding { protected static final int RECORD_SIZE = PDOMNode.RECORD_SIZE + 20; - protected PDOMBinding(PDOMDatabase pdom, PDOMNode parent, IASTName name, int type) throws CoreException { + protected PDOMBinding(PDOM pdom, PDOMNode parent, IASTName name, int type) throws CoreException { super(pdom, parent, name.toCharArray()); Database db = pdom.getDB(); @@ -40,7 +40,7 @@ public abstract class PDOMBinding extends PDOMNode implements IBinding { db.putInt(record + BINDING_TYPE_OFFSET, type); } - public PDOMBinding(PDOMDatabase pdom, int record) { + public PDOMBinding(PDOM pdom, int record) { super(pdom, record); } @@ -51,7 +51,7 @@ public abstract class PDOMBinding extends PDOMNode implements IBinding { return null; } - public static int getBindingType(PDOMDatabase pdom, int record) throws CoreException { + public static int getBindingType(PDOM pdom, int record) throws CoreException { return pdom.getDB().getInt(record + BINDING_TYPE_OFFSET); } @@ -64,7 +64,7 @@ public abstract class PDOMBinding extends PDOMNode implements IBinding { * @return * @throws CoreException */ - public static boolean isOrphaned(PDOMDatabase pdom, int record) throws CoreException { + public static boolean isOrphaned(PDOM pdom, int record) throws CoreException { Database db = pdom.getDB(); return db.getInt(record + FIRST_DECL_OFFSET) == 0 && db.getInt(record + FIRST_DEF_OFFSET) == 0 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 64f35bbe9fc..29ef03cb954 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 @@ -13,12 +13,11 @@ package org.eclipse.cdt.internal.core.pdom.dom; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.dom.PDOM; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterFactory; @@ -36,11 +35,11 @@ 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 = PDOM.getPDOM(projects[i].getProject()); + IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(projects[i].getProject()); - if (ipdom == null || !(ipdom instanceof PDOMDatabase)) + if (ipdom == null || !(ipdom instanceof PDOM)) continue; - PDOMDatabase pdom = (PDOMDatabase)ipdom; + PDOM pdom = (PDOM)ipdom; for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage()) { PDOMBinding pdomBinding = linkage.adaptBinding(binding); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java index 22f11bbbb06..18d58f0d98c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.pdom.dom; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.BTree; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.cdt.internal.core.pdom.db.IBTreeComparator; @@ -25,7 +25,7 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMFile { - private PDOMDatabase pdom; + private PDOM pdom; private int record; private static final int FIRST_NAME_OFFSET = 0; @@ -77,7 +77,7 @@ public class PDOMFile { } - public static PDOMFile insert(PDOMDatabase pdom, String filename) throws CoreException { + public static PDOMFile insert(PDOM pdom, String filename) throws CoreException { BTree index = pdom.getFileIndex(); PDOMFile pdomFile = find(pdom, filename); if (pdomFile == null) { @@ -91,13 +91,13 @@ public class PDOMFile { return pdomFile; } - public static PDOMFile find(PDOMDatabase pdom, String filename) throws CoreException { + public static PDOMFile find(PDOM pdom, String filename) throws CoreException { BTree index = pdom.getFileIndex(); int record = new FindVisitor(pdom.getDB(), filename).findIn(index); return (record != 0) ? new PDOMFile(pdom, record) : null; } - public PDOMFile(PDOMDatabase pdom, int record) { + public PDOMFile(PDOM pdom, int record) { this.pdom = pdom; this.record = record; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java index 5f409526b07..0caddda7bf5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java @@ -17,7 +17,7 @@ import java.util.regex.Pattern; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.BTree; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor; @@ -32,11 +32,11 @@ import org.eclipse.core.runtime.CoreException; public abstract class PDOMLinkage extends PDOMNode { protected static final class MatchBinding implements IBTreeVisitor { - private final PDOMDatabase pdom; + private final PDOM pdom; private final List bindings; private final Pattern pattern; - public MatchBinding(PDOMDatabase pdom, String pattern, List bindings) { + public MatchBinding(PDOM pdom, String pattern, List bindings) { this.pdom = pdom; this.bindings = bindings; this.pattern = Pattern.compile(pattern); @@ -66,11 +66,11 @@ public abstract class PDOMLinkage extends PDOMNode { protected static final int RECORD_SIZE = PDOMNode.RECORD_SIZE + 12; - public PDOMLinkage(PDOMDatabase pdom, int record) { + public PDOMLinkage(PDOM pdom, int record) { super(pdom, record); } - protected PDOMLinkage(PDOMDatabase pdom, String languageId, char[] name) throws CoreException { + protected PDOMLinkage(PDOM pdom, String languageId, char[] name) throws CoreException { super(pdom, null, name); Database db = pdom.getDB(); @@ -85,13 +85,13 @@ public abstract class PDOMLinkage extends PDOMNode { return RECORD_SIZE; } - public static String getId(PDOMDatabase pdom, int record) throws CoreException { + public static String getId(PDOM pdom, int record) throws CoreException { Database db = pdom.getDB(); int namerec = db.getInt(record + ID_OFFSET); return db.getString(namerec); } - public static int getNextLinkageRecord(PDOMDatabase pdom, int record) throws CoreException { + public static int getNextLinkageRecord(PDOM pdom, int record) throws CoreException { return pdom.getDB().getInt(record + NEXT_OFFSET); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMember.java index d95da9cc2dc..058959da252 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMember.java @@ -12,7 +12,7 @@ package org.eclipse.cdt.internal.core.pdom.dom; import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPClassType; import org.eclipse.core.runtime.CoreException; @@ -28,12 +28,12 @@ public abstract class PDOMMember extends PDOMBinding { protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 12; - public PDOMMember(PDOMDatabase pdom, PDOMMemberOwner parent, IASTName name, int type) throws CoreException { + public PDOMMember(PDOM pdom, PDOMMemberOwner parent, IASTName name, int type) throws CoreException { super(pdom, parent, name, type); parent.addMember(this); } - public PDOMMember(PDOMDatabase pdom, int record) { + public PDOMMember(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMemberOwner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMemberOwner.java index 8d1d5a8d652..41db9092d40 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMemberOwner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMemberOwner.java @@ -14,7 +14,7 @@ package org.eclipse.cdt.internal.core.pdom.dom; import java.util.ArrayList; import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.core.runtime.CoreException; /** @@ -28,12 +28,12 @@ public class PDOMMemberOwner extends PDOMBinding { protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 8; - public PDOMMemberOwner(PDOMDatabase pdom, PDOMNode parent, IASTName name, + public PDOMMemberOwner(PDOM pdom, PDOMNode parent, IASTName name, int type) throws CoreException { super(pdom, parent, name, type); } - public PDOMMemberOwner(PDOMDatabase pdom, int record) { + public PDOMMemberOwner(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java index cb235e1eb77..0b60995c73f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMName.java @@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNodeLocation; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope2; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.core.runtime.CoreException; @@ -30,7 +30,7 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMName implements IASTName, IASTFileLocation { - private final PDOMDatabase pdom; + private final PDOM pdom; private final int record; private static final int FILE_REC_OFFSET = 0; @@ -50,7 +50,7 @@ public class PDOMName implements IASTName, IASTFileLocation { private static final int IS_REFERENCE = 3; - public PDOMName(PDOMDatabase pdom, IASTName name, PDOMBinding binding) throws CoreException { + public PDOMName(PDOM pdom, IASTName name, PDOMBinding binding) throws CoreException { this.pdom = pdom; Database db = pdom.getDB(); record = db.malloc(RECORD_SIZE); @@ -98,7 +98,7 @@ public class PDOMName implements IASTName, IASTFileLocation { db.putInt(record + NODE_LENGTH_OFFSET, fileloc.getNodeLength()); } - public PDOMName(PDOMDatabase pdom, int nameRecord) { + public PDOMName(PDOM pdom, int nameRecord) { this.pdom = pdom; this.record = nameRecord; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java index 258ceaca596..a660bd73ab4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java @@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.pdom.dom; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.cdt.internal.core.pdom.db.IBTreeComparator; import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor; @@ -31,15 +31,15 @@ public abstract class PDOMNode { protected static final int RECORD_SIZE = 8; - protected final PDOMDatabase pdom; + protected final PDOM pdom; protected final int record; - protected PDOMNode(PDOMDatabase pdom, int record) { + protected PDOMNode(PDOM pdom, int record) { this.pdom = pdom; this.record = record; } - protected PDOMNode(PDOMDatabase pdom, PDOMNode parent, char[] name) throws CoreException { + protected PDOMNode(PDOM pdom, PDOMNode parent, char[] name) throws CoreException { this.pdom = pdom; Database db = pdom.getDB(); @@ -59,7 +59,7 @@ public abstract class PDOMNode { protected abstract int getRecordSize(); - public PDOMDatabase getPDOM() { + public PDOM getPDOM() { return pdom; } @@ -71,7 +71,7 @@ public abstract class PDOMNode { return getLinkage(pdom, record); } - public static PDOMLinkage getLinkage(PDOMDatabase pdom, int record) throws CoreException { + public static PDOMLinkage getLinkage(PDOM pdom, int record) throws CoreException { Database db = pdom.getDB(); int linkagerec = record; int parentrec = db.getInt(linkagerec + PARENT_OFFSET); @@ -121,9 +121,9 @@ public abstract class PDOMNode { } public abstract static class NodeVisitor implements IBTreeVisitor { - protected final PDOMDatabase pdom; + protected final PDOM pdom; protected final char[] name; - protected NodeVisitor(PDOMDatabase pdom, char [] name) { + protected NodeVisitor(PDOM pdom, char [] name) { this.pdom = pdom; this.name = name; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java index 41e78f62082..6709c2d9d1c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -27,11 +27,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCField extends PDOMMember implements IField { - public PDOMCField(PDOMDatabase pdom, PDOMMemberOwner parent, IASTName name) throws CoreException { + public PDOMCField(PDOM pdom, PDOMMemberOwner parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCLinkage.CFIELD); } - public PDOMCField(PDOMDatabase pdom, int record) { + public PDOMCField(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java index dd15711faff..761fb7d05ef 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java @@ -17,7 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -29,11 +29,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCFunction extends PDOMBinding implements IFunction { - public PDOMCFunction(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCFunction(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCLinkage.CFUNCTION); } - public PDOMCFunction(PDOMDatabase pdom, int record) { + public PDOMCFunction(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java index 72ab5e50c62..56dda83f02e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java @@ -29,7 +29,7 @@ import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; @@ -43,11 +43,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCLinkage extends PDOMLinkage { - public PDOMCLinkage(PDOMDatabase pdom, int record) { + public PDOMCLinkage(PDOM pdom, int record) { super(pdom, record); } - public PDOMCLinkage(PDOMDatabase pdom) throws CoreException { + public PDOMCLinkage(PDOM pdom) throws CoreException { super(pdom, GCCLanguage.ID, "C".toCharArray()); } @@ -115,7 +115,7 @@ public class PDOMCLinkage extends PDOMLinkage { private static final class FindBinding extends PDOMNode.NodeVisitor { PDOMBinding pdomBinding; final int desiredType; - public FindBinding(PDOMDatabase pdom, char[] name, int desiredType) { + public FindBinding(PDOM pdom, char[] name, int desiredType) { super(pdom, name); this.desiredType = desiredType; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkageFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkageFactory.java index 99f80fbdb77..67d599bd168 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkageFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkageFactory.java @@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.pdom.dom.c; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.core.runtime.CoreException; @@ -21,11 +21,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCLinkageFactory implements IPDOMLinkageFactory { - public PDOMLinkage getLinkage(PDOMDatabase pdom, int record) { + public PDOMLinkage getLinkage(PDOM pdom, int record) { return new PDOMCLinkage(pdom, record); } - public PDOMLinkage createLinkage(PDOMDatabase pdom) throws CoreException { + public PDOMLinkage createLinkage(PDOM pdom) throws CoreException { return new PDOMCLinkage(pdom); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java index 22530535735..c8e5a598517 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java @@ -18,7 +18,7 @@ import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; @@ -31,11 +31,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCStructure extends PDOMMemberOwner implements ICompositeType { - public PDOMCStructure(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCStructure(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCLinkage.CSTRUCTURE); } - public PDOMCStructure(PDOMDatabase pdom, int record) { + public PDOMCStructure(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java index 733b1a57b27..ada649993b5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java @@ -17,7 +17,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.internal.core.dom.parser.c.CVariable; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -29,13 +29,13 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCVariable extends PDOMBinding implements IVariable { - public PDOMCVariable(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCVariable(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCLinkage.CVARIABLE); CVariable binding = (CVariable)name.getBinding(); IType type = binding.getType(); } - public PDOMCVariable(PDOMDatabase pdom, int record) { + public PDOMCVariable(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java index 97901952030..280c9945257 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java @@ -25,7 +25,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner; @@ -41,11 +41,11 @@ public class PDOMCPPClassType extends PDOMMemberOwner implements ICPPClassType, protected static final int RECORD_SIZE = PDOMMemberOwner.RECORD_SIZE + 0; - public PDOMCPPClassType(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCPPClassType(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPCLASSTYPE); } - public PDOMCPPClassType(PDOMDatabase pdom, int bindingRecord) { + public PDOMCPPClassType(PDOM pdom, int bindingRecord) { super(pdom, bindingRecord); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java index 31d7e50d655..ed3cd9c55c9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java @@ -18,7 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; import org.eclipse.core.runtime.CoreException; @@ -29,12 +29,12 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPField extends PDOMMember implements ICPPField { - public PDOMCPPField(PDOMDatabase pdom, PDOMCPPClassType parent, IASTName name) + public PDOMCPPField(PDOM pdom, PDOMCPPClassType parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPFIELD); } - public PDOMCPPField(PDOMDatabase pdom, int bindingRecord) { + public PDOMCPPField(PDOM pdom, int bindingRecord) { super(pdom, bindingRecord); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java index 8f233e7ec01..65c339b5963 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPFunction.java @@ -18,7 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -30,11 +30,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPFunction extends PDOMBinding implements ICPPFunction { - public PDOMCPPFunction(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCPPFunction(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPFUNCTION); } - public PDOMCPPFunction(PDOMDatabase pdom, int bindingRecord) { + public PDOMCPPFunction(PDOM pdom, int bindingRecord) { super(pdom, bindingRecord); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index d2988cd7ae6..5ca66b27b69 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -39,7 +39,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPMethod; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNamespace; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNamespaceAlias; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; @@ -54,11 +54,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPLinkage extends PDOMLinkage { - public PDOMCPPLinkage(PDOMDatabase pdom, int record) { + public PDOMCPPLinkage(PDOM pdom, int record) { super(pdom, record); } - public PDOMCPPLinkage(PDOMDatabase pdom) + public PDOMCPPLinkage(PDOM pdom) throws CoreException { super(pdom, GPPLanguage.ID, "C++".toCharArray()); } @@ -133,7 +133,7 @@ public class PDOMCPPLinkage extends PDOMLinkage { private static final class FindBinding extends PDOMNode.NodeVisitor { PDOMBinding pdomBinding; final int desiredType; - public FindBinding(PDOMDatabase pdom, char[] name, int desiredType) { + public FindBinding(PDOM pdom, char[] name, int desiredType) { super(pdom, name); this.desiredType = desiredType; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkageFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkageFactory.java index 5f9520c1baa..12857f9acca 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkageFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkageFactory.java @@ -11,7 +11,7 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.core.runtime.CoreException; @@ -22,11 +22,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPLinkageFactory implements IPDOMLinkageFactory { - public PDOMLinkage getLinkage(PDOMDatabase pdom, int record) { + public PDOMLinkage getLinkage(PDOM pdom, int record) { return new PDOMCPPLinkage(pdom, record); } - public PDOMLinkage createLinkage(PDOMDatabase pdom) throws CoreException { + public PDOMLinkage createLinkage(PDOM pdom) throws CoreException { return new PDOMCPPLinkage(pdom); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java index f02aaaa3e68..82c0ecc3825 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java @@ -19,7 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -31,11 +31,11 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPMethod extends PDOMMember implements ICPPMethod { - public PDOMCPPMethod(PDOMDatabase pdom, PDOMMemberOwner parent, IASTName name) throws CoreException { + public PDOMCPPMethod(PDOM pdom, PDOMMemberOwner parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPMETHOD); } - public PDOMCPPMethod(PDOMDatabase pdom, int record) { + public PDOMCPPMethod(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java index 317f60d1b11..b285d24a772 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java @@ -23,7 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.BTree; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; @@ -41,11 +41,11 @@ public class PDOMCPPNamespace extends PDOMBinding protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; - public PDOMCPPNamespace(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCPPNamespace(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPNAMESPACE); } - public PDOMCPPNamespace(PDOMDatabase pdom, int record) { + public PDOMCPPNamespace(PDOM pdom, int record) { super(pdom, record); } @@ -109,7 +109,7 @@ public class PDOMCPPNamespace extends PDOMBinding private static final class FindBinding extends PDOMNode.NodeVisitor { PDOMBinding pdomBinding; final int desiredType; - public FindBinding(PDOMDatabase pdom, char[] name, int desiredType) { + public FindBinding(PDOM pdom, char[] name, int desiredType) { super(pdom, name); this.desiredType = desiredType; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespaceAlias.java index a2e64ab5cd3..487728aecc6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespaceAlias.java @@ -16,7 +16,7 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -29,12 +29,12 @@ import org.eclipse.core.runtime.CoreException; public class PDOMCPPNamespaceAlias extends PDOMBinding implements ICPPNamespaceAlias { - public PDOMCPPNamespaceAlias(PDOMDatabase pdom, PDOMNode parent, + public PDOMCPPNamespaceAlias(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPNAMESPACEALIAS); } - public PDOMCPPNamespaceAlias(PDOMDatabase pdom, int record) { + public PDOMCPPNamespaceAlias(PDOM pdom, int record) { super(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariable.java index d86b79d444c..74d7b258052 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariable.java @@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; @@ -36,7 +36,7 @@ public class PDOMCPPVariable extends PDOMBinding implements ICPPVariable { protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; - public PDOMCPPVariable(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCPPVariable(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { super(pdom, parent, name, PDOMCPPLinkage.CPPVARIABLE); // Find the type record @@ -52,7 +52,7 @@ public class PDOMCPPVariable extends PDOMBinding implements ICPPVariable { } } - public PDOMCPPVariable(PDOMDatabase pdom, int record) { + public PDOMCPPVariable(PDOM pdom, int record) { super(pdom, record); } 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 fc3109c764a..85e7c153a31 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 @@ -12,8 +12,11 @@ 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.PDOMDatabase; +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; @@ -27,18 +30,35 @@ import org.eclipse.core.runtime.jobs.Job; public class PDOMFastAddTU extends Job { private final ITranslationUnit tu; - private final IPDOM pdom; + private final PDOM pdom; public PDOMFastAddTU(IPDOM pdom, ITranslationUnit tu) { super("PDOM Fast Add TU"); - this.pdom = pdom; + this.pdom = (pdom instanceof PDOM) ? (PDOM)pdom : null; this.tu = tu; + setPriority(PDOM.WRITER_PRIORITY); } protected IStatus run(IProgressMonitor monitor) { + if (pdom == null) + return Status.CANCEL_STATUS; + try { - PDOMDatabase mypdom = (PDOMDatabase)pdom; - mypdom.addSymbols(tu); + ILanguage language = tu.getLanguage(); + if (language == null) + return Status.CANCEL_STATUS; + + // get the AST in a "Fast" way + IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(), + 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); + getJobManager().endRule(pdom.getWriterLockRule()); return Status.OK_STATUS; } catch (CoreException e) { return e.getStatus(); 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 0689d0e5569..50a3b7a5cbf 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 @@ -12,8 +12,11 @@ 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.PDOMDatabase; +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; @@ -26,20 +29,35 @@ import org.eclipse.core.runtime.jobs.Job; */ public class PDOMFastChangeTU extends Job { - private final IPDOM pdom; + private final PDOM pdom; private final ITranslationUnit tu; public PDOMFastChangeTU(IPDOM pdom, ITranslationUnit tu) { super("PDOM Fast Change TU"); - this.pdom = pdom; + this.pdom = (pdom instanceof PDOM) ? (PDOM)pdom : null; this.tu = tu; } protected IStatus run(IProgressMonitor monitor) { + if (pdom == null) + return Status.CANCEL_STATUS; try { - PDOMDatabase mypdom = (PDOMDatabase)pdom; - mypdom.removeSymbols(tu); - mypdom.addSymbols(tu); + ILanguage language = tu.getLanguage(); + if (language == null) + return Status.CANCEL_STATUS; + + // get the AST in a "Fast" way + IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(), + 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()); return Status.OK_STATUS; } catch (CoreException e) { return e.getStatus(); 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 0d32b1b5f64..04bcb1c91a6 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 @@ -18,14 +18,13 @@ 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.dom.PDOM; 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.PDOMDatabase; +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; @@ -44,11 +43,19 @@ import org.eclipse.core.runtime.jobs.Job; */ public class PDOMFastIndexer implements IPDOMIndexer { - private PDOMDatabase pdom; + private PDOM pdom; public void setPDOM(IPDOM pdom) { - if (pdom instanceof PDOMDatabase) - this.pdom = (PDOMDatabase)pdom; + if (pdom instanceof PDOM) + this.pdom = (PDOM)pdom; + } + + private IProgressMonitor progressGroup; + + private IProgressMonitor getProgressGroup() { + if (progressGroup == null) + progressGroup = Platform.getJobManager().createProgressGroup(); + return progressGroup; } private class ChangeHandler extends Job { @@ -130,7 +137,7 @@ public class PDOMFastIndexer implements IPDOMIndexer { private void processDelta(ICElementDelta delta) { // First make sure this project is PDOMable ICElement element = delta.getElement(); - if (element instanceof ICProject && PDOM.getPDOM(((ICProject)element).getProject()) == null) + if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()) == null) return; // process the children first @@ -173,8 +180,6 @@ public class PDOMFastIndexer implements IPDOMIndexer { private void processNewProject(final ICProject project) { try { - if (!PDOM.isEnabled(project.getProject())) - return; project.getProject().accept(new IResourceProxyVisitor() { public boolean visit(IResourceProxy proxy) throws CoreException { if (proxy.getType() == IResource.FILE) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastRemoveTU.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastRemoveTU.java index 5fdab656a31..f61987fbc89 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastRemoveTU.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastRemoveTU.java @@ -13,7 +13,7 @@ package org.eclipse.cdt.internal.core.pdom.indexer.fast; import org.eclipse.cdt.core.dom.IPDOM; import org.eclipse.cdt.core.model.ITranslationUnit; -import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -26,22 +26,24 @@ import org.eclipse.core.runtime.jobs.Job; */ public class PDOMFastRemoveTU extends Job { - private final IPDOM pdom; + private final PDOM pdom; private final ITranslationUnit tu; public PDOMFastRemoveTU(IPDOM pdom, ITranslationUnit tu) { super("PDOM Fast Remove TU"); - this.pdom = pdom; + this.pdom = (pdom instanceof PDOM) ? (PDOM)pdom : null; this.tu = tu; } protected IStatus run(IProgressMonitor monitor) { + if (pdom == null) + return Status.CANCEL_STATUS; try { - PDOMDatabase mypdom = (PDOMDatabase)pdom; - mypdom.removeSymbols(tu); + getJobManager().beginRule(pdom.getWriterLockRule(), monitor); + pdom.removeSymbols(tu); // TODO delete the file itself from the database // the removeSymbols only removes the names in the file - // TODO Auto-generated method stub + getJobManager().endRule(pdom.getWriterLockRule()); return Status.OK_STATUS; } catch (CoreException e) { return e.getStatus(); 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 new file mode 100644 index 00000000000..d391ec62354 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/nulli/PDOMNullIndexer.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * 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.nulli; + +import org.eclipse.cdt.core.dom.IPDOM; +import org.eclipse.cdt.core.dom.IPDOMIndexer; +import org.eclipse.cdt.core.model.ElementChangedEvent; + +/** + * @author Doug Schaefer + * + */ +public class PDOMNullIndexer implements IPDOMIndexer { + + public void setPDOM(IPDOM pdom) { + } + + public void reindex() { + } + + public void elementChanged(ElementChangedEvent event) { + } + +} diff --git a/core/org.eclipse.cdt.core/plugin.properties b/core/org.eclipse.cdt.core/plugin.properties index 954026614a8..078b3375d46 100644 --- a/core/org.eclipse.cdt.core/plugin.properties +++ b/core/org.eclipse.cdt.core/plugin.properties @@ -72,4 +72,6 @@ cdt_pathentry_var.description=CDT PathEntry Variable PDOMProviderName=PDOM Provider -language.name=Language \ No newline at end of file +fastIndexer.name=Fast Indexer + +language.name=Language diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml index ad1f7ded337..eb30e7f85ef 100644 --- a/core/org.eclipse.cdt.core/plugin.xml +++ b/core/org.eclipse.cdt.core/plugin.xml @@ -540,6 +540,7 @@ class="org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer"> + + + + + + + + + + diff --git a/core/org.eclipse.cdt.core/schema/CIndexer.exsd b/core/org.eclipse.cdt.core/schema/CIndexer.exsd index c9806ca2d0d..0e42c7ddc90 100644 --- a/core/org.eclipse.cdt.core/schema/CIndexer.exsd +++ b/core/org.eclipse.cdt.core/schema/CIndexer.exsd @@ -13,7 +13,7 @@ - + @@ -39,6 +39,21 @@ + + + + + + + + + + + + + + + diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index db8cd366d81..b8aeedecc3f 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -24,7 +24,7 @@ import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.cdt.core.dom.CDOM; -import org.eclipse.cdt.core.dom.PDOM; +import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.IScannerInfoProvider; @@ -41,6 +41,7 @@ import org.eclipse.cdt.internal.core.model.CModelManager; import org.eclipse.cdt.internal.core.model.DeltaProcessor; import org.eclipse.cdt.internal.core.model.IBufferFactory; import org.eclipse.cdt.internal.core.model.Util; +import org.eclipse.cdt.internal.core.pdom.PDOMManager; import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.cdt.internal.core.search.matching.MatchLocator; import org.eclipse.cdt.internal.core.search.processing.JobManager; @@ -88,8 +89,9 @@ public class CCorePlugin extends Plugin { public static final String INDEXER_UNIQ_ID = PLUGIN_ID + "." + INDEXER_SIMPLE_ID; //$NON-NLS-1$ public final static String PREF_INDEXER = "indexer"; //$NON-NLS-1$ public final static String USE_PDOM_PREF = "usePDOM"; //$NON-NLS-1$ - public final static String DEFAULT_INDEXER_SIMPLE_ID = "domsourceindexer"; //$NON-NLS-1$ public final static String NULL_INDEXER_SIMPLE_ID = "nullindexer"; //$NON-NLS-1$ +// public final static String DEFAULT_INDEXER_SIMPLE_ID = "domsourceindexer"; //$NON-NLS-1$ + public final static String DEFAULT_INDEXER_SIMPLE_ID = NULL_INDEXER_SIMPLE_ID; //$NON-NLS-1$ public final static String NULL_INDEXER_UNIQUE_ID = PLUGIN_ID + "." + NULL_INDEXER_SIMPLE_ID ; //$NON-NLS-1$ public final static String DEFAULT_INDEXER_UNIQ_ID = PLUGIN_ID + "." + DEFAULT_INDEXER_SIMPLE_ID; //$NON-NLS-1$ @@ -158,6 +160,8 @@ public class CCorePlugin extends Plugin { private CDescriptorManager fDescriptorManager = new CDescriptorManager(); private CoreModel fCoreModel; + + private PDOMManager pdomManager; private PathEntryVariableManager fPathEntryVariableManager; @@ -295,7 +299,8 @@ public class CCorePlugin extends Plugin { fCoreModel.startIndexing(); // Fire up the PDOM - PDOM.startup(); + pdomManager = new PDOMManager(); + pdomManager.startup(); // Set the default for using the structual parse mode to build the CModel getPluginPreferences().setDefault(PREF_USE_STRUCTURAL_PARSE_MODE, false); @@ -617,6 +622,10 @@ public class CCorePlugin extends Plugin { return fCoreModel; } + public static IPDOMManager getPDOMManager() { + return getDefault().pdomManager; + } + public IPathEntryVariableManager getPathEntryVariableManager() { return fPathEntryVariableManager; } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java deleted file mode 100644 index 5798a644ca6..00000000000 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java +++ /dev/null @@ -1,94 +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.core.dom; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.IElementChangedListener; -import org.eclipse.cdt.internal.core.pdom.PDOMManager; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ProjectScope; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.preferences.IEclipsePreferences; -import org.eclipse.core.runtime.preferences.IScopeContext; -import org.osgi.service.prefs.BackingStoreException; - -/** - * @author Doug Schaefer - * - */ -public class PDOM { - - private static final String PDOM_NODE = CCorePlugin.PLUGIN_ID + ".pdom"; //$NON-NLS-1$ - private static final String ENABLED_KEY = "enabled"; //$NON-NLS-1$ - - private static IEclipsePreferences getPreferences(IProject project) { - IScopeContext projectScope = new ProjectScope(project); - if (projectScope == null) - return null; - else - return projectScope.getNode(PDOM_NODE); - } - - public static boolean isEnabled(IProject project) { - IEclipsePreferences prefs = getPreferences(project); - if (prefs == null) - return false; - else - return prefs.getBoolean(ENABLED_KEY, false); - } - - public static void setEnabled(IProject project, boolean enabled) { - IEclipsePreferences prefs = getPreferences(project); - if (prefs == null) - return; - - prefs.putBoolean(ENABLED_KEY, enabled); - try { - prefs.flush(); - } catch (BackingStoreException e) { - } - } - - public static boolean isInitialized(IProject project) { - return getPreferences(project) != null; - } - - /** - * Get the PDOM for the given project. - * - * @param project - * @return the PDOM for the project - */ - public static IPDOM getPDOM(IProject project) { - if (isEnabled(project)) - return PDOMManager.getInstance().getPDOM(project); - else - return null; - } - - public static void deletePDOM(IProject project) throws CoreException { - if (isEnabled(project)) - PDOMManager.getInstance().getPDOM(project).delete(); - } - - /** - * Startup the PDOM. This mainly sets us up to handle model - * change events. - */ - public static void startup() { - IElementChangedListener listener = PDOMManager.getInstance(); - if (listener != null) { - CoreModel.getDefault().addElementChangedListener(listener); - } - } - -} diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties index 3938be3b6a3..d89ac04d3d5 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties @@ -70,3 +70,4 @@ CTagsIndexMarker.CTagsMissing=CTags not installed or not in path DOMIndexerMarker.EmptyScannerInfo=File not indexed because it was not built dom.languageError=Language not found +indexer.notFound = Indexer not found \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties index 3a08913bc76..2c7839a6393 100644 --- a/core/org.eclipse.cdt.ui/plugin.properties +++ b/core/org.eclipse.cdt.ui/plugin.properties @@ -325,6 +325,7 @@ indexerPrefName=Indexer CDTIndexer.domsourceindexer=Full C/C++ Indexer (declarations and cross references) CDTIndexer.ctagsindexer=CTags Indexer (declarations only) CDTIndexer.nullindexer=No Indexer (search-based features will not work correctly) +CDTIndexer.fastindexer=Fast C/C++ Indexer (declarations and cross references) IndexView.name=C/C++ Index UpdateIndex.name=Update Index diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 4534ad9e8b7..4b59eb6ada1 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1367,6 +1367,11 @@ id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI" indexerID="org.eclipse.cdt.core.domsourceindexer" name="%CDTIndexer.domsourceindexer"/> +