From a9d3047502eab85db85c93bb81a7189e3064bac6 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Wed, 21 Dec 2005 21:01:29 +0000 Subject: [PATCH] Pretty massive update to the PDOM. Made IBindings adaptable. Introducing the Index View. --- .../eclipse/cdt/core/model}/ILanguage.java | 27 +- .../cdt/core/model/ITranslationUnit.java | 1 - .../cdt/core/model}/LanguageManager.java | 2 +- .../internal/core/model/TranslationUnit.java | 4 +- .../eclipse/cdt/core/dom/ast/IBinding.java | 4 +- .../cdt/core/dom/ast/cpp/ICPPMember.java | 2 + .../cdt/core/dom/ast/gnu/c/GCCLanguage.java | 9 +- .../cdt/core/dom/ast/gnu/cpp/GPPLanguage.java | 55 +-- .../dom/parser/GCCBuiltinSymbolProvider.java | 5 +- .../core/dom/parser/ProblemBinding.java | 3 +- .../core/dom/parser/c/CEnumeration.java | 3 +- .../core/dom/parser/c/CEnumerator.java | 3 +- .../core/dom/parser/c/CExternalVariable.java | 3 +- .../internal/core/dom/parser/c/CFunction.java | 3 +- .../core/dom/parser/c/CKnRParameter.java | 3 +- .../internal/core/dom/parser/c/CLabel.java | 3 +- .../core/dom/parser/c/CParameter.java | 3 +- .../core/dom/parser/c/CStructure.java | 3 +- .../internal/core/dom/parser/c/CTypedef.java | 3 +- .../internal/core/dom/parser/c/CVariable.java | 3 +- .../core/dom/parser/cpp/CPPClassType.java | 3 +- .../dom/parser/cpp/CPPCompositeBinding.java | 3 +- .../core/dom/parser/cpp/CPPDelegate.java | 3 +- .../core/dom/parser/cpp/CPPEnumeration.java | 3 +- .../core/dom/parser/cpp/CPPEnumerator.java | 3 +- .../core/dom/parser/cpp/CPPField.java | 12 + .../parser/cpp/CPPFieldSpecialization.java | 26 +- .../core/dom/parser/cpp/CPPFunction.java | 3 +- .../dom/parser/cpp/CPPImplicitMethod.java | 6 + .../core/dom/parser/cpp/CPPLabel.java | 3 +- .../core/dom/parser/cpp/CPPMethod.java | 11 + .../dom/parser/cpp/CPPMethodInstance.java | 5 + .../parser/cpp/CPPMethodSpecialization.java | 17 +- .../dom/parser/cpp/CPPMethodTemplate.java | 17 +- .../cpp/CPPMethodTemplateSpecialization.java | 17 +- .../core/dom/parser/cpp/CPPNamespace.java | 3 +- .../dom/parser/cpp/CPPNamespaceAlias.java | 3 +- .../core/dom/parser/cpp/CPPParameter.java | 3 +- .../dom/parser/cpp/CPPSpecialization.java | 3 +- .../dom/parser/cpp/CPPTemplateDefinition.java | 3 +- .../dom/parser/cpp/CPPTemplateParameter.java | 3 +- .../core/dom/parser/cpp/CPPTypedef.java | 3 +- .../dom/parser/cpp/CPPUnknownBinding.java | 3 +- .../dom/parser/cpp/CPPUsingDeclaration.java | 3 +- .../core/dom/parser/cpp/CPPVariable.java | 3 +- .../core/parser/scanner2/MacroBinding.java | 3 +- .../cdt/internal/core/pdom/PDOMDatabase.java | 111 ++--- .../cdt/internal/core/pdom/db/BTree.java | 4 +- .../cdt/internal/core/pdom/db/Database.java | 14 +- .../core/pdom/dom/IPDOMLinkageFactory.java | 27 ++ .../internal/core/pdom/dom/PDOMBinding.java | 156 ++----- .../pdom/dom/PDOMBindingAdapterFactory.java | 64 +++ .../internal/core/pdom/dom/PDOMLinkage.java | 86 ++++ .../internal/core/pdom/dom/PDOMMember.java | 69 +++ .../core/pdom/dom/PDOMMemberOwner.java | 82 ++++ .../cdt/internal/core/pdom/dom/PDOMName.java | 10 +- .../cdt/internal/core/pdom/dom/PDOMNode.java | 136 ++++++ .../core/pdom/dom/cpp/PDOMCPPClassType.java | 119 +++++ .../core/pdom/dom/cpp/PDOMCPPField.java | 94 ++++ .../core/pdom/dom/cpp/PDOMCPPFunction.java | 21 +- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 160 +++++++ .../pdom/dom/cpp/PDOMCPPLinkageFactory.java | 33 ++ .../core/pdom/dom/cpp/PDOMCPPVariable.java | 26 +- core/org.eclipse.cdt.core/plugin.xml | 8 + .../org.eclipse.cdt.core/schema/language.exsd | 2 +- core/org.eclipse.cdt.ui/plugin.properties | 3 + core/org.eclipse.cdt.ui/plugin.xml | 6 + .../internal/ui/CPluginResources.properties | 3 + .../ui/actions/PDOMUpdateProjectAction.java | 55 +++ .../cdt/internal/ui/indexview/IndexView.java | 430 ++++++++++++++++++ 70 files changed, 1652 insertions(+), 374 deletions(-) rename core/org.eclipse.cdt.core/{parser/org/eclipse/cdt/core/dom => model/org/eclipse/cdt/core/model}/ILanguage.java (76%) rename core/org.eclipse.cdt.core/{parser/org/eclipse/cdt/core/dom => model/org/eclipse/cdt/core/model}/LanguageManager.java (98%) create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/IPDOMLinkageFactory.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBindingAdapterFactory.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMember.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMemberOwner.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java create mode 100644 core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkageFactory.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/actions/PDOMUpdateProjectAction.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/indexview/IndexView.java diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ILanguage.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java similarity index 76% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ILanguage.java rename to core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java index b87ed03fc4a..688425b02e6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ILanguage.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ILanguage.java @@ -9,22 +9,21 @@ * QNX - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.core.dom; +package org.eclipse.cdt.core.model; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; -import org.eclipse.cdt.core.model.ITranslationUnit; -import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; /** * @author Doug Schaefer * */ -public interface ILanguage { +public interface ILanguage extends IAdaptable { //public static final QualifiedName KEY = new QualifiedName(CCorePlugin.PLUGIN_ID, "language"); //$NON-NLS-1$ public static final String KEY = "language"; //$NON-NLS-1$ @@ -74,24 +73,4 @@ public interface ILanguage { */ public ASTCompletionNode getCompletionNode(IWorkingCopy workingCopy, int offset); - /** - * Return the PDOM Binding for the given name. Create a new one if necessary - * and store it in the PDOM. - * - * @param binding - * @return - */ - public PDOMBinding getPDOMBinding(PDOMDatabase pdom, int languageId, IASTName name) throws CoreException; - - /** - * Creates a language specific binding given the generic binding extracted - * from the PDOM database. - * - * @param pdom - * @param binding - * - * @return - */ - public PDOMBinding getPDOMBinding(PDOMDatabase pdom, PDOMBinding binding) throws CoreException; - } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ITranslationUnit.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ITranslationUnit.java index b32c8f97efd..9f3a0100032 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ITranslationUnit.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ITranslationUnit.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.core.model; import java.util.Map; -import org.eclipse.cdt.core.dom.ILanguage; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.internal.core.model.IBufferFactory; import org.eclipse.core.runtime.CoreException; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/LanguageManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java similarity index 98% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/LanguageManager.java rename to core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java index 1369bcf735c..be811320db0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/LanguageManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java @@ -9,7 +9,7 @@ * QNX - Initial API and implementation *******************************************************************************/ -package org.eclipse.cdt.core.dom; +package org.eclipse.cdt.core.model; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.core.runtime.CoreException; 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 a65f69a6359..0fccc39602f 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 @@ -16,12 +16,11 @@ import java.util.HashMap; import java.util.Map; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.ILanguage; -import org.eclipse.cdt.core.dom.LanguageManager; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.IBuffer; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.IInclude; +import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.INamespace; import org.eclipse.cdt.core.model.IParent; import org.eclipse.cdt.core.model.IProblemRequestor; @@ -30,6 +29,7 @@ import org.eclipse.cdt.core.model.ISourceReference; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IUsing; import org.eclipse.cdt.core.model.IWorkingCopy; +import org.eclipse.cdt.core.model.LanguageManager; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBinding.java index 382f168c47e..5baf4fc1e18 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IBinding.java @@ -10,10 +10,12 @@ *******************************************************************************/ package org.eclipse.cdt.core.dom.ast; +import org.eclipse.core.runtime.IAdaptable; + /** * @author Doug Schaefer */ -public interface IBinding { +public interface IBinding extends IAdaptable { public static final IBinding[] EMPTY_BINDING_ARRAY = new IBinding[0]; /** * The name of the binding. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPMember.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPMember.java index a6135e842b8..352dacaf1d7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPMember.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPMember.java @@ -32,4 +32,6 @@ public interface ICPPMember extends ICPPBinding{ public static final int v_public = ICPPASTVisiblityLabel.v_public; + public ICPPClassType getClassOwner() throws DOMException; + } 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 cd53ba30ec7..75c6276bb59 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,11 +13,11 @@ 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.ILanguage; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; 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.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.CodeReader; @@ -41,12 +41,13 @@ import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.PlatformObject; /** * @author Doug Schaefer * */ -public class GCCLanguage implements ILanguage { +public class GCCLanguage extends PlatformObject implements ILanguage { protected static final GCCScannerExtensionConfiguration C_GNU_SCANNER_EXTENSION = new GCCScannerExtensionConfiguration(); @@ -105,8 +106,8 @@ public class GCCLanguage implements ILanguage { return null; } - public PDOMBinding getPDOMBinding(PDOMDatabase pdom, PDOMBinding binding) throws CoreException { - return binding; + public PDOMBinding getPDOMBinding(PDOMDatabase pdom, int record) throws CoreException { + return null; } } 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 f02ca5524ea..57c623115a9 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,12 +13,12 @@ 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.ILanguage; import org.eclipse.cdt.core.dom.ast.ASTCompletionNode; 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.dom.ast.IScope; +import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; import org.eclipse.cdt.core.parser.CodeReader; @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.internal.core.dom.SavedCodeReaderFactory; import org.eclipse.cdt.internal.core.dom.parser.ISourceCodeParser; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBlockScope; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPField; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPMethod; @@ -44,23 +45,36 @@ import org.eclipse.cdt.internal.core.parser.scanner2.GPPScannerExtensionConfigur import org.eclipse.cdt.internal.core.parser.scanner2.IScannerExtensionConfiguration; 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.PDOMBinding; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPClassType; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPField; import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPFunction; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPVariable; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.PlatformObject; /** * @author Doug Schaefer * */ -public class GPPLanguage implements ILanguage { +public class GPPLanguage extends PlatformObject implements ILanguage { protected static final GPPScannerExtensionConfiguration CPP_GNU_SCANNER_EXTENSION = new GPPScannerExtensionConfiguration(); + public static final String ID = CCorePlugin.PLUGIN_ID + ".g++"; //$NON-NLS-1$ public String getId() { - return CCorePlugin.PLUGIN_ID + ".g++"; //$NON-NLS-1$ + return ID; + } + + public Object getAdapter(Class adapter) { + if (adapter == IPDOMLinkageFactory.class) + return new PDOMCPPLinkageFactory(); + else + return super.getAdapter(adapter); } public IASTTranslationUnit getTranslationUnit(ITranslationUnit tu, int style) { @@ -109,39 +123,4 @@ public class GPPLanguage implements ILanguage { return null; } - // Binding types - public static final int CPPVARIABLE = 1; - public static final int CPPFUNCTION = 2; - - public PDOMBinding getPDOMBinding(PDOMDatabase pdom, int languageId, IASTName name) throws CoreException { - IBinding binding = name.resolveBinding(); - if (binding == null) - return null; - - if (binding instanceof CPPField) { - return null; - } else if (binding instanceof CPPVariable) { - IScope scope = binding.getScope(); - if (!(scope instanceof CPPBlockScope)) - return new PDOMCPPVariable(pdom, languageId, name, (CPPVariable)binding); - } else if (binding instanceof CPPMethod) { - return null; - } else if (binding instanceof CPPFunction) { - return new PDOMCPPFunction(pdom, languageId, name, (CPPFunction)binding); - } - - return null; - } - - public PDOMBinding getPDOMBinding(PDOMDatabase pdom, PDOMBinding binding) throws CoreException { - switch (binding.getBindingType()) { - case CPPVARIABLE: - return new PDOMCPPVariable(pdom, binding.getRecord()); - case CPPFUNCTION: - return new PDOMCPPFunction(pdom, binding.getRecord()); - } - - return binding; - } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java index 8d6ccafe5b0..3fe89f409b0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java @@ -36,6 +36,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPQualifierType; import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPBasicType; import org.eclipse.cdt.internal.core.dom.parser.cpp.GPPPointerType; +import org.eclipse.core.runtime.PlatformObject; /** * This is the IASTBuiltinSymbolProvider used to implement the "Other" built-in GCC symbols defined: @@ -2295,7 +2296,7 @@ public class GCCBuiltinSymbolProvider implements IASTBuiltinSymbolProvider { return (IBinding[])ArrayUtil.trim(IBinding.class, bindings); } - public static class CBuiltinParameter implements IParameter { + public static class CBuiltinParameter extends PlatformObject implements IParameter { private static final String BLANK_STRING = ""; //$NON-NLS-1$ private IType type=null; @@ -2353,7 +2354,7 @@ public class GCCBuiltinSymbolProvider implements IASTBuiltinSymbolProvider { } - static public class CPPBuiltinParameter implements ICPPParameter { + static public class CPPBuiltinParameter extends PlatformObject implements ICPPParameter { private static final String BLANK_STRING = ""; //$NON-NLS-1$ private IType type=null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemBinding.java index c8064bef91e..e0698a5406b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemBinding.java @@ -26,11 +26,12 @@ import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics; import org.eclipse.cdt.internal.core.parser.ParserMessages; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class ProblemBinding implements IProblemBinding, IType, IScope { +public class ProblemBinding extends PlatformObject implements IProblemBinding, IType, IScope { protected final int id; protected final char [] arg; protected IASTNode node; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java index db58b0876d6..461f68b46cc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java @@ -28,11 +28,12 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTEnumerationSpecifier; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CEnumeration implements IEnumeration { +public class CEnumeration extends PlatformObject implements IEnumeration { private IASTName [] declarations = null; private IASTName definition = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumerator.java index 080013c194b..eb8b79c31e0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumerator.java @@ -24,11 +24,12 @@ import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CEnumerator implements IEnumerator { +public class CEnumerator extends PlatformObject implements IEnumerator { public static class CEnumeratorProblem extends ProblemBinding implements IEnumerator { public CEnumeratorProblem( IASTNode node, int id, char[] arg ) { super( node, id, arg ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CExternalVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CExternalVariable.java index b3015dee61b..878a17188e8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CExternalVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CExternalVariable.java @@ -20,11 +20,12 @@ import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.c.ICExternalBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CExternalVariable implements ICExternalBinding, IVariable { +public class CExternalVariable extends PlatformObject implements ICExternalBinding, IVariable { private IASTTranslationUnit tu; private IASTName name; /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java index d7eef03fc2e..82d1a364b64 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java @@ -32,12 +32,13 @@ import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor; +import org.eclipse.core.runtime.PlatformObject; /** * Created on Nov 5, 2004 * @author aniefer */ -public class CFunction implements IFunction, ICInternalFunction { +public class CFunction extends PlatformObject implements IFunction, ICInternalFunction { private IASTStandardFunctionDeclarator [] declarators = null; private IASTFunctionDeclarator definition; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CKnRParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CKnRParameter.java index b44703cda6f..b0e4f834e77 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CKnRParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CKnRParameter.java @@ -20,13 +20,14 @@ import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.c.ICASTTypedefNameSpecifier; +import org.eclipse.core.runtime.PlatformObject; /** * A K&R C parameter. * * @author dsteffle */ -public class CKnRParameter implements IParameter { +public class CKnRParameter extends PlatformObject implements IParameter { final private IASTDeclaration declaration; final private IASTName name; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CLabel.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CLabel.java index cd1661708c1..f0a10031fdf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CLabel.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CLabel.java @@ -21,11 +21,12 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.ILabel; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CLabel implements ILabel { +public class CLabel extends PlatformObject implements ILabel { public static class CLabelProblem extends ProblemBinding implements ILabel { public CLabelProblem( IASTNode node, int id, char[] arg ) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CParameter.java index a50eb79f515..498e3d8ca3c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CParameter.java @@ -27,12 +27,13 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * Created on Nov 5, 2004 * @author aniefer */ -public class CParameter implements IParameter { +public class CParameter extends PlatformObject implements IParameter { public static class CParameterProblem extends ProblemBinding implements IParameter { public CParameterProblem( IASTNode node, int id, char[] arg ) { super( node, id, arg ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java index 4ae824dadc4..126ff6537c6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java @@ -31,12 +31,13 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICCompositeTypeScope; import org.eclipse.cdt.core.parser.util.ArrayUtil; +import org.eclipse.core.runtime.PlatformObject; /** * Created on Nov 8, 2004 * @author aniefer */ -public class CStructure implements ICompositeType, ICInternalBinding { +public class CStructure extends PlatformObject implements ICompositeType, ICInternalBinding { private IASTName [] declarations = null; private IASTName definition; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypedef.java index 81d51d54432..90c50c1341e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypedef.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypedef.java @@ -19,12 +19,13 @@ import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; +import org.eclipse.core.runtime.PlatformObject; /** * Created on Nov 8, 2004 * @author aniefer */ -public class CTypedef implements ITypedef, ITypeContainer { +public class CTypedef extends PlatformObject implements ITypedef, ITypeContainer { private final IASTName name; private IType type = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVariable.java index b526818dc54..6ddcc3425e4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVariable.java @@ -23,12 +23,13 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * Created on Nov 5, 2004 * @author aniefer */ -public class CVariable implements IVariable, ICInternalBinding { +public class CVariable extends PlatformObject implements IVariable, ICInternalBinding { public static class CVariableProblem extends ProblemBinding implements IVariable { public CVariableProblem( IASTNode node, int id, char[] arg ) { super( node, id, arg ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java index bdbace3468f..a3ab17601e1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java @@ -55,11 +55,12 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.core.parser.util.ObjectSet; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPClassType implements ICPPClassType, ICPPInternalClassType { +public class CPPClassType extends PlatformObject implements ICPPClassType, ICPPInternalClassType { public static class CPPClassTypeDelegate extends CPPDelegate implements ICPPClassType, ICPPInternalClassType { public CPPClassTypeDelegate( IASTName name, ICPPClassType cls ){ super( name, cls ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPCompositeBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPCompositeBinding.java index bb0160b198a..3d48a67e6de 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPCompositeBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPCompositeBinding.java @@ -18,11 +18,12 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.parser.util.ArrayUtil; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPCompositeBinding implements IBinding { +public class CPPCompositeBinding extends PlatformObject implements IBinding { IBinding [] bindings = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDelegate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDelegate.java index 0d86381e0f5..0b8125a0467 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDelegate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDelegate.java @@ -21,11 +21,12 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPDelegate implements ICPPDelegate, ICPPInternalBinding { +public class CPPDelegate extends PlatformObject implements ICPPDelegate, ICPPInternalBinding { private IBinding binding = null; private int type = 0; private IASTName name = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java index 7d17bd49a43..a26373c7027 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java @@ -25,11 +25,12 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPEnumeration implements IEnumeration, ICPPInternalBinding { +public class CPPEnumeration extends PlatformObject implements IEnumeration, ICPPInternalBinding { public static class CPPEnumerationDelegate extends CPPDelegate implements IEnumeration { public CPPEnumerationDelegate( IASTName name, IEnumeration binding ) { super( name, binding ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java index ca2d45b8397..10937f69972 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumerator.java @@ -25,11 +25,12 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPEnumerator implements IEnumerator, ICPPInternalBinding { +public class CPPEnumerator extends PlatformObject implements IEnumerator, ICPPInternalBinding { public static class CPPEnumeratorDelegate extends CPPDelegate implements IEnumerator { public CPPEnumeratorDelegate( IASTName name, IEnumerator binding ) { super( name, binding ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java index 4c6683137fe..bd894d6aaa1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPField.java @@ -24,6 +24,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisiblityLabel; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; import org.eclipse.cdt.core.parser.util.CharArrayUtils; @@ -39,6 +40,9 @@ public class CPPField extends CPPVariable implements ICPPField, ICPPInternalBind public int getVisibility() throws DOMException { return ((ICPPField)getBinding()).getVisibility(); } + public ICPPClassType getClassOwner() throws DOMException { + return ((ICPPField)getBinding()).getClassOwner(); + } } public static class CPPFieldProblem extends CPPVariable.CPPVariableProblem implements ICPPField { /** @@ -52,6 +56,9 @@ public class CPPField extends CPPVariable implements ICPPField, ICPPInternalBind public int getVisibility() throws DOMException { throw new DOMException( this ); } + public ICPPClassType getClassOwner() throws DOMException { + throw new DOMException( this ); + } public boolean isStatic() throws DOMException { throw new DOMException( this ); } @@ -123,6 +130,11 @@ public class CPPField extends CPPVariable implements ICPPField, ICPPInternalBind return ICPPASTVisiblityLabel.v_public; } + public ICPPClassType getClassOwner() throws DOMException { + ICPPClassScope scope = (ICPPClassScope) getScope(); + return scope.getClassType(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable#isMutable() */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldSpecialization.java index 47efdcb2f7e..80d5027ea95 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFieldSpecialization.java @@ -17,6 +17,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.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPField; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; @@ -41,16 +42,14 @@ public class CPPFieldSpecialization extends CPPSpecialization implements ICPPFie return (ICPPField) getSpecializedBinding(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMember#getVisibility() - */ public int getVisibility() throws DOMException { return getField().getVisibility(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IVariable#getType() - */ + public ICPPClassType getClassOwner() throws DOMException { + return getField().getClassOwner(); + } + public IType getType() throws DOMException { if( type == null ){ type = CPPTemplates.instantiateType( getField().getType(), argumentMap ); @@ -58,37 +57,22 @@ public class CPPFieldSpecialization extends CPPSpecialization implements ICPPFie return type; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IVariable#isStatic() - */ public boolean isStatic() throws DOMException { return getField().isStatic(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IVariable#isExtern() - */ public boolean isExtern() throws DOMException { return getField().isExtern(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IVariable#isAuto() - */ public boolean isAuto() throws DOMException { return getField().isAuto(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.IVariable#isRegister() - */ public boolean isRegister() throws DOMException { return getField().isRegister(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable#isMutable() - */ public boolean isMutable() throws DOMException { return getField().isMutable(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java index b5ee0afbf5a..895ae85faee 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunction.java @@ -38,11 +38,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPFunction implements ICPPFunction, ICPPInternalFunction { +public class CPPFunction extends PlatformObject implements ICPPFunction, ICPPInternalFunction { public static class CPPFunctionDelegate extends CPPDelegate implements ICPPFunction, ICPPInternalFunction { public CPPFunctionDelegate( IASTName name, ICPPFunction binding ) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java index df20faeca08..a47cfc9e9a3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPImplicitMethod.java @@ -29,6 +29,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisiblityLabel; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.parser.util.CharArrayUtils; @@ -65,6 +66,11 @@ public class CPPImplicitMethod extends CPPImplicitFunction implements ICPPMethod return ICPPASTVisiblityLabel.v_public; } + public ICPPClassType getClassOwner() throws DOMException { + ICPPClassScope scope = (ICPPClassScope)getScope(); + return scope.getClassType(); + } + public IASTDeclaration getPrimaryDeclaration() throws DOMException{ //first check if we already know it if( declarations != null ){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java index f155a08a605..ec5258ed295 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPLabel.java @@ -20,11 +20,12 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.ILabel; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPLabel implements ILabel, ICPPInternalBinding { +public class CPPLabel extends PlatformObject implements ILabel, ICPPInternalBinding { private IASTName statement; /** * @param gotoStatement diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java index 16a2d80f73e..0e3a7e51f7d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethod.java @@ -45,6 +45,9 @@ public class CPPMethod extends CPPFunction implements ICPPMethod { public int getVisibility() throws DOMException { return ((ICPPMethod)getBinding()).getVisibility(); } + public ICPPClassType getClassOwner() throws DOMException { + return ((ICPPMethod)getBinding()).getClassOwner(); + } public boolean isVirtual() throws DOMException { return ((ICPPMethod)getBinding()).isVirtual(); } @@ -73,6 +76,9 @@ public class CPPMethod extends CPPFunction implements ICPPMethod { public int getVisibility() throws DOMException { throw new DOMException( this ); } + public ICPPClassType getClassOwner() throws DOMException { + throw new DOMException( this ); + } public boolean isStatic() throws DOMException { throw new DOMException( this ); } @@ -167,6 +173,11 @@ public class CPPMethod extends CPPFunction implements ICPPMethod { } return ICPPASTVisiblityLabel.v_public; } + + public ICPPClassType getClassOwner() throws DOMException { + ICPPClassScope scope = (ICPPClassScope)getScope(); + return scope.getClassType(); + } public IScope getScope() { IASTNode node = (declarations != null && declarations.length > 0) ? declarations[0] : definition; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java index 50ee0669782..bf6993f6086 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodInstance.java @@ -16,6 +16,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; 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.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.parser.util.ObjectMap; @@ -42,6 +43,10 @@ public class CPPMethodInstance extends CPPFunctionInstance implements ICPPMethod return ((ICPPMethod)getTemplateDefinition()).getVisibility(); } + public ICPPClassType getClassOwner() throws DOMException { + return ((ICPPMethod)getTemplateDefinition()).getClassOwner(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isVirtual() */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodSpecialization.java index ecb6fc20fad..ad4d0b587dc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodSpecialization.java @@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTDeclSpecifier; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.parser.util.ObjectMap; @@ -36,9 +37,6 @@ public class CPPMethodSpecialization extends CPPFunctionSpecialization super(orig, scope, argMap ); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isVirtual() - */ public boolean isVirtual() throws DOMException { ICPPMethod f = (ICPPMethod) getSpecializedBinding(); if( f != null ) @@ -62,9 +60,6 @@ public class CPPMethodSpecialization extends CPPFunctionSpecialization return false; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMember#getVisibility() - */ public int getVisibility() throws DOMException { ICPPMethod f = (ICPPMethod) getSpecializedBinding(); if( f != null ) @@ -72,9 +67,13 @@ public class CPPMethodSpecialization extends CPPFunctionSpecialization return 0; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isDestructor() - */ + public ICPPClassType getClassOwner() throws DOMException { + ICPPMethod f = (ICPPMethod) getSpecializedBinding(); + if( f != null ) + return f.getClassOwner(); + return null; + } + public boolean isDestructor() { char[] name = getNameCharArray(); if (name.length > 1 && name[0] == '~') diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java index 4a35cb242df..d14a751cf82 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplate.java @@ -93,9 +93,6 @@ public class CPPMethodTemplate extends CPPFunctionTemplate implements return null; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMember#getVisibility() - */ public int getVisibility() throws DOMException { IASTDeclaration decl = getPrimaryDeclaration(); if( decl == null ){ @@ -125,18 +122,17 @@ public class CPPMethodTemplate extends CPPFunctionTemplate implements } return ICPPASTVisiblityLabel.v_public; } + + public ICPPClassType getClassOwner() throws DOMException { + ICPPClassScope scope = (ICPPClassScope)getScope(); + return scope.getClassType(); + } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isVirtual() - */ public boolean isVirtual() { // TODO Auto-generated method stub return false; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction#isInline() - */ public boolean isInline() throws DOMException { IASTDeclaration decl = getPrimaryDeclaration(); if( decl instanceof ICPPASTTemplateDeclaration && ((ICPPASTTemplateDeclaration)decl).getDeclaration() instanceof IASTFunctionDefinition ) @@ -145,9 +141,6 @@ public class CPPMethodTemplate extends CPPFunctionTemplate implements return super.isInline(); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isDestructor() - */ public boolean isDestructor() { char[] name = getNameCharArray(); if (name.length > 1 && name[0] == '~') diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java index cc72bf5c1a6..b50b2a30842 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPMethodTemplateSpecialization.java @@ -16,6 +16,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.parser.util.ObjectMap; @@ -37,27 +38,25 @@ public class CPPMethodTemplateSpecialization extends super(specialized, scope, argumentMap); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isVirtual() - */ public boolean isVirtual() { // TODO Auto-generated method stub return false; } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMember#getVisibility() - */ public int getVisibility() throws DOMException { IBinding m = getSpecializedBinding(); if( m instanceof ICPPMethod ) return ((ICPPMethod)m).getVisibility(); return 0; } + + public ICPPClassType getClassOwner() throws DOMException { + IBinding m = getSpecializedBinding(); + if( m instanceof ICPPMethod ) + return ((ICPPMethod)m).getClassOwner(); + return null; + } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod#isDestructor() - */ public boolean isDestructor() { char[] name = getNameCharArray(); if (name.length > 1 && name[0] == '~') diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java index ec3eaf6b558..16b5121d311 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespace.java @@ -38,11 +38,12 @@ import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.CharArrayUtils; import org.eclipse.cdt.core.parser.util.ObjectSet; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPNamespace implements ICPPNamespace, ICPPInternalBinding { +public class CPPNamespace extends PlatformObject implements ICPPNamespace, ICPPInternalBinding { public static class CPPNamespaceDelegate extends CPPDelegate implements ICPPNamespace { public CPPNamespaceDelegate( IASTName name, ICPPNamespace binding ) { super( name, binding ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java index cee1eaa2a0d..654cf40118c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPNamespaceAlias.java @@ -24,11 +24,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPNamespaceAlias implements ICPPNamespaceAlias, ICPPInternalBinding { +public class CPPNamespaceAlias extends PlatformObject implements ICPPNamespaceAlias, ICPPInternalBinding { private ICPPNamespace namespace; private IASTName alias; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java index 0098a189ad4..5fcc21c1d60 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPParameter.java @@ -29,11 +29,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPParameter implements ICPPParameter, ICPPInternalBinding { +public class CPPParameter extends PlatformObject implements ICPPParameter, ICPPInternalBinding { public static class CPPParameterDelegate extends CPPDelegate implements ICPPParameter { public CPPParameterDelegate( IASTName name, IParameter binding ) { super( name, binding ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSpecialization.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSpecialization.java index 2a759545acf..30a6662978a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSpecialization.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSpecialization.java @@ -23,12 +23,13 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.ObjectMap; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer * */ -public abstract class CPPSpecialization implements ICPPSpecialization, ICPPInternalBinding { +public abstract class CPPSpecialization extends PlatformObject implements ICPPSpecialization, ICPPInternalBinding { private IBinding specialized; private ICPPScope scope; protected ObjectMap argumentMap; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java index 3d133848af2..d7dbaed802c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateDefinition.java @@ -43,11 +43,12 @@ import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.core.parser.util.ObjectMap; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public abstract class CPPTemplateDefinition implements ICPPTemplateDefinition, ICPPInternalTemplate { +public abstract class CPPTemplateDefinition extends PlatformObject implements ICPPTemplateDefinition, ICPPInternalTemplate { public static final class CPPTemplateProblem extends ProblemBinding implements ICPPTemplateDefinition { public CPPTemplateProblem(IASTNode node, int id, char[] arg) { super(node, id, arg); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java index 6f421a0f928..0506617ec1a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplateParameter.java @@ -21,11 +21,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPTemplateParameter implements ICPPTemplateParameter, ICPPInternalBinding { +public class CPPTemplateParameter extends PlatformObject implements ICPPTemplateParameter, ICPPInternalBinding { private IASTName [] declarations; public CPPTemplateParameter( IASTName name ){ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java index c224110b73d..4f532ea3195 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java @@ -25,11 +25,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPTypedef implements ITypedef, ITypeContainer, ICPPInternalBinding { +public class CPPTypedef extends PlatformObject implements ITypedef, ITypeContainer, ICPPInternalBinding { public static class CPPTypedefDelegate extends CPPDelegate implements ITypedef, ITypeContainer { public CPPTypedefDelegate( IASTName name, ITypedef binding ) { super( name, binding ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java index fe53d732dc1..1d7ed9dde4e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUnknownBinding.java @@ -24,11 +24,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.parser.util.ObjectMap; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPUnknownBinding implements ICPPInternalUnknown { +public class CPPUnknownBinding extends PlatformObject implements ICPPInternalUnknown { private ICPPScope unknownScope = null; private IBinding scopeBinding = null; private ICPPScope scope = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java index d0f27de87f3..a00a2aa44ce 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPUsingDeclaration.java @@ -25,11 +25,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration; import org.eclipse.cdt.core.parser.util.ArrayUtil; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPUsingDeclaration implements ICPPUsingDeclaration, ICPPInternalBinding{ +public class CPPUsingDeclaration extends PlatformObject implements ICPPUsingDeclaration, ICPPInternalBinding{ private IASTName name; private ICPPDelegate [] delegates; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java index 710efe2d940..7ba986016b0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVariable.java @@ -30,11 +30,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; +import org.eclipse.core.runtime.PlatformObject; /** * @author aniefer */ -public class CPPVariable implements ICPPVariable, ICPPInternalBinding { +public class CPPVariable extends PlatformObject implements ICPPVariable, ICPPInternalBinding { public static class CPPVariableDelegate extends CPPDelegate implements ICPPVariable { public CPPVariableDelegate( IASTName name, ICPPVariable binding ) { super( name, binding ); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroBinding.java index 8dcad5e76d3..52694649582 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/MacroBinding.java @@ -13,8 +13,9 @@ package org.eclipse.cdt.internal.core.parser.scanner2; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IMacroBinding; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.core.runtime.PlatformObject; -public class MacroBinding implements IMacroBinding { +public class MacroBinding extends PlatformObject implements IMacroBinding { private final char[] name; private final IScope scope; 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/PDOMDatabase.java index f1c9d995a72..bea002d19d5 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/PDOMDatabase.java @@ -10,27 +10,27 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.pdom; -import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; -import java.util.Map; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ICodeReaderFactory; -import org.eclipse.cdt.core.dom.ILanguage; import org.eclipse.cdt.core.dom.IPDOM; -import org.eclipse.cdt.core.dom.LanguageManager; 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.ILanguage; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.model.IWorkingCopy; +import org.eclipse.cdt.core.model.LanguageManager; 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.dom.IPDOMLinkageFactory; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; import org.eclipse.cdt.internal.core.pdom.dom.PDOMFile; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMName; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; @@ -50,15 +50,10 @@ public class PDOMDatabase implements IPDOM { private static final int VERSION = 0; - public static final int LANGUAGES = Database.DATA_AREA; + public static final int LINKAGES = Database.DATA_AREA; public static final int FILE_INDEX = Database.DATA_AREA + 4; - public static final int BINDING_INDEX = Database.DATA_AREA + 8; - - private Map languageCache; - private ILanguage[] languages; private BTree fileIndex; - private BTree bindingIndex; private static final QualifiedName dbNameProperty = new QualifiedName(CCorePlugin.PLUGIN_ID, "dbName"); //$NON-NLS-1$ @@ -114,25 +109,21 @@ public class PDOMDatabase implements IPDOM { return fileIndex; } - public BTree getBindingIndex() throws CoreException { - if (bindingIndex == null) - bindingIndex = new BTree(getDB(), BINDING_INDEX); - return bindingIndex; - } - public void addSymbols(ITranslationUnit tu) throws CoreException { final ILanguage language = tu.getLanguage(); if (language == null) return; - final int languageId = getLanguageId(language); + final PDOMLinkage linkage = getLinkage(language); + if (linkage == null) + return; + IASTTranslationUnit ast = language.getTranslationUnit(tu, ILanguage.AST_USE_INDEX | ILanguage.AST_SKIP_INDEXED_HEADERS); - if (ast == null) return; - + ast.accept(new ASTVisitor() { { shouldVisitNames = true; @@ -141,11 +132,7 @@ public class PDOMDatabase implements IPDOM { public int visit(IASTName name) { try { - if (name.toCharArray().length > 0) { - PDOMBinding binding = language.getPDOMBinding(PDOMDatabase.this, languageId, name); - if (binding != null) - new PDOMName(PDOMDatabase.this, name, binding); - } + linkage.addName(name); return PROCESS_CONTINUE; } catch (CoreException e) { CCorePlugin.log(e); @@ -167,10 +154,7 @@ public class PDOMDatabase implements IPDOM { public void delete() throws CoreException { getDB().clear(); - bindingIndex = null; fileIndex = null; - languageCache = null; - languages = null; } public ICodeReaderFactory getCodeReaderFactory() { @@ -203,49 +187,42 @@ public class PDOMDatabase implements IPDOM { return new IBinding[0]; } - private void initLanguageMap() throws CoreException { - // load in the languages - languageCache = new HashMap(); - int record = db.getInt(LANGUAGES); - PDOMLanguage lang = null; - if (record != 0) - lang = new PDOMLanguage(this, record); - while (lang != null) { - languageCache.put(lang.getName(), lang); - lang = lang.getNext(); + public PDOMLinkage getLinkage(ILanguage language) throws CoreException { + IPDOMLinkageFactory factory = (IPDOMLinkageFactory)language.getAdapter(IPDOMLinkageFactory.class); + String id = language.getId(); + int linkrec = db.getInt(LINKAGES); + while (linkrec != 0) { + if (id.equals(PDOMLinkage.getId(this, linkrec))) { + return factory.getLinkage(this, linkrec); + } } - // map language ids to ILanguage impls. - languages = new ILanguage[languageCache.size() + 1]; // + 1 for the empty zero - Iterator i = languageCache.values().iterator(); - while (i.hasNext()) { - lang = (PDOMLanguage)i.next(); - languages[lang.getId()] = LanguageManager.getInstance().getLanguage(lang.getName()); - } - } - - public int getLanguageId(ILanguage language) throws CoreException { - if (languageCache == null) - initLanguageMap(); - PDOMLanguage pdomLang = (PDOMLanguage)languageCache.get(language.getId()); - if (pdomLang == null) { - // add it in - int next = db.getInt(LANGUAGES); - int id = next == 0 ? 1 : new PDOMLanguage(this, next).getId() + 1; - pdomLang = new PDOMLanguage(this, language.getId(), id, next); - db.putInt(LANGUAGES, pdomLang.getRecord()); - ILanguage[] oldlangs = languages; - languages = new ILanguage[id + 1]; - System.arraycopy(oldlangs, 0, languages, 0, id); - languages[id] = language; - return id; - } else - return pdomLang.getId(); + return factory.createLinkage(this); } - public ILanguage getLanguage(int id) throws CoreException { - if (languages == null) - initLanguageMap(); - return languages[id]; + public PDOMLinkage getLinkage(int record) throws CoreException { + if (record == 0) + return null; + + String id = PDOMLinkage.getId(this, record); + ILanguage language = LanguageManager.getInstance().getLanguage(id); + return getLinkage(language); } + + public PDOMLinkage getFirstLinkage() throws CoreException { + return getLinkage(db.getInt(LINKAGES)); + } + + public void insertLinkage(PDOMLinkage linkage) throws CoreException { + linkage.setNext(db.getInt(LINKAGES)); + db.putInt(LINKAGES, linkage.getRecord()); + } + + public PDOMBinding getBinding(int record) throws CoreException { + if (record == 0) + return null; + else + return PDOMLinkage.getLinkage(this, record).getBinding(record); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/BTree.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/BTree.java index 04af1aef021..439f8c8911d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/BTree.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/BTree.java @@ -18,8 +18,8 @@ import org.eclipse.core.runtime.CoreException; */ public class BTree { - protected Database db; - protected int rootPointer; + protected final Database db; + protected final int rootPointer; protected static final int NUM_RECORDS = 15; protected static final int MEDIAN_RECORD = NUM_RECORDS / 2; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java index f819e5ac492..babc5f592da 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java @@ -271,16 +271,28 @@ public class Database { chunk.putChars(offset, value); } + public int putChars(char[] value) throws CoreException { + int record = malloc((value.length + 1) * 2); + putChars(record, value); + return record; + } + public char[] getChars(int offset) throws CoreException { Chunk chunk = getChunk(offset); return chunk.getChars(offset); } - + public void putString(int offset, String value) throws CoreException { Chunk chunk = getChunk(offset); chunk.putString(offset, value); } + public int putString(String value) throws CoreException { + int record = malloc((value.length() + 1) * 2); + putString(record, value); + return record; + } + public String getString(int offset) throws CoreException { Chunk chunk = getChunk(offset); return chunk.getString(offset); 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 new file mode 100644 index 00000000000..35fd844c000 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/IPDOMLinkageFactory.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * 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.dom; + +import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public interface IPDOMLinkageFactory { + + public PDOMLinkage getLinkage(PDOMDatabase pdom, int record); + + public PDOMLinkage createLinkage(PDOMDatabase 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 4b08f3f8a8b..e6ab0f5633f 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 @@ -11,131 +11,70 @@ package org.eclipse.cdt.internal.core.pdom.dom; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.ILanguage; 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.db.BTree; 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; import org.eclipse.core.runtime.CoreException; /** * @author Doug Schaefer * */ -public class PDOMBinding implements IBinding { +public abstract class PDOMBinding extends PDOMNode implements IBinding { - protected final PDOMDatabase pdom; - protected int record; + private static final int TYPE_OFFSET = PDOMNode.RECORD_SIZE + 4; // size 4 + private static final int FIRST_DECL_OFFSET = PDOMNode.RECORD_SIZE + 8; // size 4 + private static final int FIRST_DEF_OFFSET = PDOMNode.RECORD_SIZE + 12; // size 4 + private static final int FIRST_REF_OFFSET = PDOMNode.RECORD_SIZE + 16; // size 4 - private static final int STRING_REC_OFFSET = 0; // size 4 - private static final int FIRST_DECL_OFFSET = 4; // size 4 - private static final int FIRST_DEF_OFFSET = 8; // size 4 - private static final int FIRST_REF_OFFSET = 12; // size 4 - private static final int LANGUAGE_OFFSET = 16; // size 2 - private static final int TYPE_OFFSET = 18; // size 2 + protected static final int RECORD_SIZE = PDOMNode.RECORD_SIZE + 20; - protected int getRecordSize() { - return 20; - } - - public static class Comparator implements IBTreeComparator { - - private Database db; - - public Comparator(Database db) { - this.db = db; - } - - public int compare(int record1, int record2) throws CoreException { - int string1 = db.getInt(record1 + STRING_REC_OFFSET); - int string2 = db.getInt(record2 + STRING_REC_OFFSET); - // Need to deal with language and type - - return db.stringCompare(string1, string2); - } + protected PDOMBinding(PDOMDatabase pdom, PDOMNode parent, IASTName name, int type) throws CoreException { + super(pdom, parent, name.toCharArray()); + Database db = pdom.getDB(); + // Binding type + db.putInt(record + TYPE_OFFSET, type); } - public abstract static class Visitor implements IBTreeVisitor { - - private Database db; - private char[] key; - - public Visitor(Database db, char[] key, int language, int type) { - this.db = db; - this.key = key; - } - - public int compare(int record1) throws CoreException { - int string1 = db.getInt(record1 + STRING_REC_OFFSET); - // Need to deal with language and type - - return db.stringCompare(string1, key); - } - - } - - public static class FindVisitor extends Visitor { - - private int record; - - public FindVisitor(Database db, char[] stringKey, int language, int type) { - super(db, stringKey, language, type); - } - - public boolean visit(int record) throws CoreException { - this.record = record; - return false; - } - - public int findIn(BTree btree) throws CoreException { - btree.visit(this); - return record; - } - + public PDOMBinding(PDOMDatabase pdom, int record) { + super(pdom, record); } - public PDOMBinding(PDOMDatabase pdom, IASTName name, int language, int type) throws CoreException { - this.pdom = pdom; - - char[] namechars = name.toCharArray(); - - BTree index = pdom.getBindingIndex(); - record = new FindVisitor(pdom.getDB(), namechars, language, type).findIn(index); - - if (record == 0) { - Database db = pdom.getDB(); - record = db.malloc(getRecordSize()); - - db.putChar(record + LANGUAGE_OFFSET, (char)language); - db.putChar(record + TYPE_OFFSET, (char)type); - - int stringRecord = db.malloc((namechars.length + 1) * Database.CHAR_SIZE); - db.putChars(stringRecord, namechars); - - db.putInt(record + STRING_REC_OFFSET, stringRecord); - pdom.getBindingIndex().insert(record, new Comparator(db)); - } + public Object getAdapter(Class adapter) { + if (adapter == PDOMBinding.class) + return this; + else + return null; } - - public PDOMBinding(PDOMDatabase pdom, int bindingRecord) { - this.pdom = pdom; - this.record = bindingRecord; + + public static int getBindingType(PDOMDatabase pdom, int record) throws CoreException { + return pdom.getDB().getInt(record + TYPE_OFFSET); + } + + /** + * Is the binding as the record orphaned, i.e., has no declarations + * or references. + * + * @param pdom + * @param record + * @return + * @throws CoreException + */ + public static boolean isOrphaned(PDOMDatabase pdom, int record) throws CoreException { + Database db = pdom.getDB(); + return db.getInt(record + FIRST_DECL_OFFSET) == 0 + && db.getInt(record + FIRST_DEF_OFFSET) == 0 + && db.getInt(record + FIRST_REF_OFFSET) == 0; } public int getRecord() { return record; } - public ILanguage getLanguage() throws CoreException { - return pdom.getLanguage(pdom.getDB().getChar(record + LANGUAGE_OFFSET)); - } - public int getBindingType() throws CoreException { return pdom.getDB().getChar(record + TYPE_OFFSET); } @@ -205,9 +144,7 @@ public class PDOMBinding implements IBinding { public String getName() { try { - Database db = pdom.getDB(); - int stringRecord = db.getInt(record + STRING_REC_OFFSET); - return db.getString(stringRecord); + return super.getName(); } catch (CoreException e) { CCorePlugin.log(e); } @@ -216,27 +153,20 @@ public class PDOMBinding implements IBinding { public char[] getNameCharArray() { try { - Database db = pdom.getDB(); - int stringRecord = db.getInt(record + STRING_REC_OFFSET); - return db.getChars(stringRecord); + return super.getNameCharArray(); } catch (CoreException e) { CCorePlugin.log(e); } return new char[0]; } + public boolean hasName(char[] name) throws CoreException { + return pdom.getDB().stringCompare(getNameRecord(), name) == 0; + } + public IScope getScope() throws DOMException { // TODO implement this return null; } - public static PDOMBinding find(PDOMDatabase pdom, char[] name, int language, int type) throws CoreException { - BTree index = pdom.getBindingIndex(); - int bindingRecord = new FindVisitor(pdom.getDB(), name, language, type).findIn(index); - if (bindingRecord != 0) - return new PDOMBinding(pdom, bindingRecord); - else - return null; - } - } 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 new file mode 100644 index 00000000000..35401b4e78b --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMBindingAdapterFactory.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * 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.dom; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.IPDOM; +import org.eclipse.cdt.core.dom.ast.DOMException; +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.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdapterFactory; + +/** + * @author Doug Schaefer + * This factory adapts IBinding object to PDOMBinding object + */ +public class PDOMBindingAdapterFactory implements IAdapterFactory { + + public Object getAdapter(Object adaptableObject, Class adapterType) { + if (adaptableObject instanceof PDOMBinding) + return adaptableObject; + + try { + IBinding binding = (IBinding)adaptableObject; + IScope scope = binding.getScope(); + IPDOM ipdom = scope.getPhysicalNode().getTranslationUnit().getIndex(); + if (ipdom == null) + return null; + PDOMDatabase pdom = (PDOMDatabase)ipdom; + + for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage()) { + PDOMBinding pdomBinding = linkage.adaptBinding(binding); + if (binding != null) + return pdomBinding; + } + return null; + } catch (DOMException e) { + CCorePlugin.log(e); + return null; + } catch (CoreException e) { + CCorePlugin.log(e); + return null; + } + } + + private static Class[] adapterList = { + PDOMBinding.class + }; + + public Class[] getAdapterList() { + return adapterList; + } + +} 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 new file mode 100644 index 00000000000..75695e6aa14 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * 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.dom; + +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.db.BTree; +import org.eclipse.cdt.internal.core.pdom.db.Database; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + * This class represents a collection of symbols that can be linked together at + * link time. These are generally global symbols specific to a given language. + */ +public abstract class PDOMLinkage extends PDOMNode { + + private static final int ID_OFFSET = PDOMNode.RECORD_SIZE + 0; + private static final int NEXT_OFFSET = PDOMNode.RECORD_SIZE + 4; + private static final int INDEX_OFFSET = PDOMNode.RECORD_SIZE + 8; + + protected static final int RECORD_SIZE = PDOMNode.RECORD_SIZE + 12; + + public PDOMLinkage(PDOMDatabase pdom, int record) { + super(pdom, record); + } + + protected PDOMLinkage(PDOMDatabase pdom, String languageId, char[] name) throws CoreException { + super(pdom, null, name); + Database db = pdom.getDB(); + + // id + int idrec = db.putString(languageId); + db.putInt(record + ID_OFFSET, idrec); + + pdom.insertLinkage(this); + } + + protected int getRecordSize() { + return RECORD_SIZE; + } + + public static String getId(PDOMDatabase pdom, int record) throws CoreException { + Database db = pdom.getDB(); + int namerec = db.getInt(record + ID_OFFSET); + return db.getString(namerec); + } + + public PDOMLinkage getNextLinkage() throws CoreException { + return pdom.getLinkage(pdom.getDB().getInt(record + NEXT_OFFSET)); + } + + public void setNext(int nextrec) throws CoreException { + pdom.getDB().putInt(record + NEXT_OFFSET, nextrec); + } + + public BTree getIndex() throws CoreException { + return new BTree(pdom.getDB(), record + INDEX_OFFSET); + } + + public PDOMLinkage getLinkage() throws CoreException { + return this; + } + + protected void addChild(PDOMNode child) throws CoreException { + getIndex().insert(child.getRecord(), child.getIndexComparator()); + } + + public abstract PDOMBinding addName(IASTName name) throws CoreException; + + public abstract PDOMBinding adaptBinding(IBinding binding) throws CoreException; + + public abstract PDOMBinding getBinding(int record) throws CoreException; + +} 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 new file mode 100644 index 00000000000..9ac85b6a4d7 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMember.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * 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.dom; + +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPClassType; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public abstract class PDOMMember extends PDOMBinding { + + private static final int OWNER = PDOMBinding.RECORD_SIZE + 0; + private static final int NEXT_MEMBER = PDOMBinding.RECORD_SIZE + 4; + private static final int PREV_MEMBER = PDOMBinding.RECORD_SIZE + 8; + + protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 12; + + public PDOMMember(PDOMDatabase pdom, PDOMNode parent, IASTName name, int type) throws CoreException { + super(pdom, parent, name, type); + } + + public PDOMMember(PDOMDatabase pdom, int record) { + super(pdom, record); + } + + public PDOMMember getNextMember() throws CoreException { + return (PDOMMember)getLinkage().getBinding( + pdom.getDB().getInt(record + NEXT_MEMBER)); + } + + public void setNextMember(PDOMMember member) throws CoreException { + pdom.getDB().putInt(record + NEXT_MEMBER, + member != null ? member.getRecord() : 0); + } + + public PDOMMember getPrevMember() throws CoreException { + return (PDOMMember)getLinkage().getBinding( + pdom.getDB().getInt(record + PREV_MEMBER)); + } + + public void setPrevMember(PDOMMember member) throws CoreException { + pdom.getDB().putInt(record + PREV_MEMBER, + member != null ? member.getRecord() : 0); + } + + public PDOMMemberOwner getMemberOwner() throws CoreException { + return (PDOMCPPClassType)getLinkage().getBinding( + pdom.getDB().getInt(record + OWNER)); + } + + public void setMemberOwner(PDOMMemberOwner owner) throws CoreException { + pdom.getDB().putInt(record + OWNER, + owner != null ? owner.getRecord() : 0); + } + +} 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 new file mode 100644 index 00000000000..9b1da41d830 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMMemberOwner.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * 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.dom; + +import java.util.ArrayList; + +import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public class PDOMMemberOwner extends PDOMBinding { + + private static final int FIRST_MEMBER = PDOMBinding.RECORD_SIZE + 0; + + protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; + + public PDOMMemberOwner(PDOMDatabase pdom, PDOMNode parent, IASTName name, + int type) throws CoreException { + super(pdom, parent, name, type); + } + + public PDOMMemberOwner(PDOMDatabase pdom, int record) { + super(pdom, record); + } + + protected int getRecordSize() { + return RECORD_SIZE; + } + + public void addMember(PDOMMember member) throws CoreException { + PDOMMember first = getFirstMember(); + if (first != null) { + first.setPrevMember(member); + member.setNextMember(first); + } + setFirstMember(member); + member.setMemberOwner(this); + } + + public PDOMMember getFirstMember() throws CoreException { + return (PDOMMember)getLinkage().getBinding( + pdom.getDB().getInt(record + FIRST_MEMBER)); + } + + public void setFirstMember(PDOMMember member) throws CoreException { + int memberrec = member != null ? member.getRecord() : 0; + pdom.getDB().putInt(record + FIRST_MEMBER, memberrec); + } + + public int getNumMembers() throws CoreException { + int n = 0; + + for (PDOMMember member = getFirstMember(); member != null; member = member.getNextMember()) + ++n; + + return n; + } + + public PDOMMember[] findMembers(char[] name) throws CoreException { + ArrayList members = new ArrayList(); + + for (PDOMMember member = getFirstMember(); member != null; member = member.getNextMember()) + if (member.hasName(name)) + members.add(member); + + return (PDOMMember[])members.toArray(new PDOMMember[members.size()]); + } + +} 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 9e3a7bb0ec1..1741c44d53d 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 @@ -117,7 +117,7 @@ public class PDOMName implements IASTName, IASTFileLocation { public PDOMBinding getPDOMBinding() throws CoreException { int bindingrec = getRecField(BINDING_REC_OFFSET); - return bindingrec != 0 ? new PDOMBinding(pdom, bindingrec) : null; + return pdom.getBinding(bindingrec); } public void setBinding(PDOMBinding binding) throws CoreException { @@ -175,7 +175,7 @@ public class PDOMName implements IASTName, IASTFileLocation { public IBinding resolveBinding() { try { int bindingRecord = pdom.getDB().getInt(record + BINDING_REC_OFFSET); - return new PDOMBinding(pdom, bindingRecord); + return pdom.getBinding(bindingRecord); } catch (CoreException e) { CCorePlugin.log(e); return null; @@ -198,10 +198,8 @@ public class PDOMName implements IASTName, IASTFileLocation { try { Database db = pdom.getDB(); int bindingRec = db.getInt(record + BINDING_REC_OFFSET); - if (bindingRec == 0) - return null; - - return new PDOMBinding(pdom, bindingRec).getNameCharArray(); + PDOMBinding binding = pdom.getBinding(bindingRec); + return binding != null ? binding.getNameCharArray() : null; } catch (CoreException e) { CCorePlugin.log(e); return null; 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 new file mode 100644 index 00000000000..258ceaca596 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * 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.dom; + +import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; +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; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + * This is a basic node in the PDOM database. + * PDOM nodes form a multi-root tree with linkages being the roots. + * This class managed the parent pointer. + */ +public abstract class PDOMNode { + + private static final int PARENT_OFFSET = 0; + private static final int NAME_OFFSET = 4; + + protected static final int RECORD_SIZE = 8; + + protected final PDOMDatabase pdom; + protected final int record; + + protected PDOMNode(PDOMDatabase pdom, int record) { + this.pdom = pdom; + this.record = record; + } + + protected PDOMNode(PDOMDatabase pdom, PDOMNode parent, char[] name) throws CoreException { + this.pdom = pdom; + Database db = pdom.getDB(); + + record = db.malloc(getRecordSize()); + + // name - must be before parent + int namerec = db.putChars(name); + db.putInt(record + NAME_OFFSET, namerec); + + // parent + if (parent != null) { + pdom.getDB().putInt(record + PARENT_OFFSET, parent.getRecord()); + parent.addChild(this); + } + + } + + protected abstract int getRecordSize(); + + public PDOMDatabase getPDOM() { + return pdom; + } + + public int getRecord() { + return record; + } + + public PDOMLinkage getLinkage() throws CoreException { + return getLinkage(pdom, record); + } + + public static PDOMLinkage getLinkage(PDOMDatabase pdom, int record) throws CoreException { + Database db = pdom.getDB(); + int linkagerec = record; + int parentrec = db.getInt(linkagerec + PARENT_OFFSET); + while (parentrec != 0) { + linkagerec = parentrec; + parentrec = db.getInt(linkagerec + PARENT_OFFSET); + } + + return pdom.getLinkage(linkagerec); + } + + public String getName() throws CoreException { + Database db = pdom.getDB(); + int namerec = db.getInt(record + NAME_OFFSET); + return db.getString(namerec); + } + + public char[] getNameCharArray() throws CoreException { + Database db = pdom.getDB(); + int namerec = db.getInt(record + NAME_OFFSET); + return db.getChars(namerec); + } + + protected int getNameRecord() throws CoreException { + return pdom.getDB().getInt(record + NAME_OFFSET); + } + + protected void addChild(PDOMNode child) throws CoreException { + // by defaut do nothing + } + + public boolean hasName(char[] name) throws CoreException { + Database db = pdom.getDB(); + int namerec = db.getInt(record + NAME_OFFSET); + return pdom.getDB().stringCompare(namerec, name) == 0; + } + + public IBTreeComparator getIndexComparator() { + return new IBTreeComparator() { + public int compare(int record1, int record2) throws CoreException { + Database db = pdom.getDB(); + int string1 = db.getInt(record1 + NAME_OFFSET); + int string2 = db.getInt(record2 + NAME_OFFSET); + return db.stringCompare(string1, string2); + }; + }; + } + + public abstract static class NodeVisitor implements IBTreeVisitor { + protected final PDOMDatabase pdom; + protected final char[] name; + protected NodeVisitor(PDOMDatabase pdom, char [] name) { + this.pdom = pdom; + this.name = name; + } + public int compare(int record) throws CoreException { + Database db = pdom.getDB(); + int namerec = db.getInt(record + NAME_OFFSET); + return db.stringCompare(namerec, name); + } + } +} 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 new file mode 100644 index 00000000000..54d989a4fca --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * 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.dom.cpp; + +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.IField; +import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; +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.dom.PDOMMemberOwner; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +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 { + super(pdom, parent, name, PDOMCPPLinkage.CPPCLASSTYPE); + } + + public PDOMCPPClassType(PDOMDatabase pdom, int bindingRecord) { + super(pdom, bindingRecord); + } + + protected int getRecordSize() { + return RECORD_SIZE; + } + + public boolean isSameType(IType type) { + throw new PDOMNotImplementedError(); + } + + public Object clone() { + throw new PDOMNotImplementedError(); + } + + public IField findField(String name) throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPMethod[] getAllDeclaredMethods() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPBase[] getBases() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPConstructor[] getConstructors() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPField[] getDeclaredFields() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPMethod[] getDeclaredMethods() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public IField[] getFields() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public IBinding[] getFriends() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPMethod[] getMethods() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public ICPPClassType[] getNestedClasses() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public IScope getCompositeScope() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public int getKey() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public String[] getQualifiedName() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public char[][] getQualifiedNameCharArray() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isGloballyQualified() throws DOMException { + throw new PDOMNotImplementedError(); + } + +} 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 new file mode 100644 index 00000000000..e4dcc4884bc --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java @@ -0,0 +1,94 @@ +/******************************************************************************* + * 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.dom.cpp; + +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.dom.ast.DOMException; +import org.eclipse.cdt.core.dom.ast.IASTName; +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.pdom.PDOMDatabase; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public class PDOMCPPField extends PDOMMember implements ICPPField { + + public PDOMCPPField(PDOMDatabase pdom, PDOMNode parent, IASTName name) + throws CoreException { + super(pdom, parent, name, PDOMCPPLinkage.CPPFIELD); + } + + public PDOMCPPField(PDOMDatabase pdom, int bindingRecord) { + super(pdom, bindingRecord); + } + + protected int getRecordSize() { + return RECORD_SIZE; + } + + public ICPPClassType getClassOwner() throws DOMException { + try { + return (ICPPClassType)getMemberOwner(); + } catch (CoreException e) { + CCorePlugin.log(e); + return null; + } + } + + public String[] getQualifiedName() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public char[][] getQualifiedNameCharArray() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isGloballyQualified() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public int getVisibility() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isMutable() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public IType getType() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isAuto() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isExtern() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isRegister() throws DOMException { + throw new PDOMNotImplementedError(); + } + + public boolean isStatic() throws DOMException { + throw new PDOMNotImplementedError(); + } + +} 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 e8a96bea6ba..a8bdf6f2a65 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 @@ -17,10 +17,10 @@ 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.core.dom.ast.cpp.ICPPFunction; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; 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.dom.PDOMBinding; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; import org.eclipse.core.runtime.CoreException; @@ -30,25 +30,18 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPFunction extends PDOMBinding implements ICPPFunction { - /** - * @param pdom - * @param name - * @param language - * @param type - * @throws CoreException - */ - public PDOMCPPFunction(PDOMDatabase pdom, int languageId, IASTName name, CPPFunction binding) throws CoreException { - super(pdom, name, languageId, GPPLanguage.CPPFUNCTION); + public PDOMCPPFunction(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + super(pdom, parent, name, PDOMCPPLinkage.CPPFUNCTION); } - /** - * @param pdom - * @param bindingRecord - */ public PDOMCPPFunction(PDOMDatabase pdom, int bindingRecord) { super(pdom, bindingRecord); } + protected int getRecordSize() { + return RECORD_SIZE; + } + public boolean isInline() throws DOMException { throw new PDOMNotImplementedError(); } 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 new file mode 100644 index 00000000000..6b76394f27d --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -0,0 +1,160 @@ +/******************************************************************************* + * 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.dom.cpp; + +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.core.dom.ast.cpp.ICPPVariable; +import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBlockScope; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassType; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPField; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPMethod; +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.db.BTree; +import org.eclipse.cdt.internal.core.pdom.db.Database; +import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor; +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.PDOMName; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode.NodeVisitor; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public class PDOMCPPLinkage extends PDOMLinkage { + + public PDOMCPPLinkage(PDOMDatabase pdom, int record) { + super(pdom, record); + } + + public PDOMCPPLinkage(PDOMDatabase pdom) + throws CoreException { + super(pdom, GPPLanguage.ID, "C++".toCharArray()); + } + + protected int getRecordSize() { + return RECORD_SIZE; + } + + // Binding types + public static final int CPPVARIABLE = 1; + public static final int CPPFUNCTION = 2; + public static final int CPPCLASSTYPE = 3; + public static final int CPPFIELD = 4; + + public PDOMNode getParent(IBinding binding) throws CoreException { + PDOMNode parent = this; + IScope scope = binding.getScope(); + if (scope != null) { + IASTName scopeName = scope.getScopeName(); + if (scopeName != null) { + IBinding scopeBinding = scopeName.resolveBinding(); + PDOMBinding scopePDOMBinding = (PDOMBinding)scopeBinding.getAdapter(PDOMBinding.class); + if (scopePDOMBinding != null) + parent = scopePDOMBinding; + } + } + return parent; + } + + public PDOMBinding addName(IASTName name) throws CoreException { + if (name == null) + return null; + + IBinding binding = name.resolveBinding(); + if (binding == null) + // Can't tell what it is + return null; + + PDOMBinding pdomBinding = (PDOMBinding)binding.getAdapter(PDOMBinding.class); + if (pdomBinding == null) { + PDOMNode parent = getParent(binding); + + if (binding instanceof PDOMBinding) + pdomBinding = (PDOMBinding)binding; + else if (binding instanceof CPPField) + pdomBinding = new PDOMCPPField(pdom, parent, name); + else if (binding instanceof CPPVariable) { + if (!(binding.getScope() instanceof CPPBlockScope)) + pdomBinding = new PDOMCPPVariable(pdom, parent, name); + } else if (binding instanceof CPPMethod) { + ; // TODO + } else if (binding instanceof CPPFunction) { + pdomBinding = new PDOMCPPFunction(pdom, parent, name); + } else if (binding instanceof CPPClassType) { + pdomBinding = new PDOMCPPClassType(pdom, parent, name); + } + } + + // Add in the name + if (pdomBinding != null) + new PDOMName(pdom, name, pdomBinding); + + return pdomBinding; + } + + private static final class FindBinding extends PDOMNode.NodeVisitor { + private final IBinding binding; + public PDOMBinding pdomBinding; + public FindBinding(PDOMDatabase pdom, IBinding binding) { + super(pdom, binding.getNameCharArray()); + this.binding = binding; + } + public boolean visit(int record) throws CoreException { + if (record == 0) + return true; + PDOMBinding tBinding = pdom.getBinding(record); + if (!tBinding.hasName(name)) + return false; + switch (tBinding.getBindingType()) { + case CPPVARIABLE: + if (binding instanceof ICPPVariable) + pdomBinding = tBinding; + break; + } + return pdomBinding == null; + } + } + + public PDOMBinding adaptBinding(IBinding binding) throws CoreException { + PDOMNode parent = getParent(binding); + if (parent == this) { + FindBinding visitor = new FindBinding(pdom, binding); + getIndex().visit(visitor); + return visitor.pdomBinding; + } + return null; + } + + public PDOMBinding getBinding(int record) throws CoreException { + if (record == 0) + return null; + + switch (PDOMBinding.getBindingType(pdom, record)) { + case CPPVARIABLE: + return new PDOMCPPVariable(pdom, record); + case CPPFUNCTION: + return new PDOMCPPFunction(pdom, record); + case CPPCLASSTYPE: + return new PDOMCPPClassType(pdom, record); + } + + return null; + } +} 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 new file mode 100644 index 00000000000..5f9520c1baa --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkageFactory.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * 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.dom.cpp; + +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.PDOMLinkage; +import org.eclipse.core.runtime.CoreException; + +/** + * @author Doug Schaefer + * + */ +public class PDOMCPPLinkageFactory implements IPDOMLinkageFactory { + + public PDOMLinkage getLinkage(PDOMDatabase pdom, int record) { + return new PDOMCPPLinkage(pdom, record); + } + + public PDOMLinkage createLinkage(PDOMDatabase pdom) throws CoreException { + return new PDOMCPPLinkage(pdom); + } + +} 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 ad942d7dc92..232ed31642a 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 @@ -15,10 +15,9 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; -import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; -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.dom.PDOMBinding; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; import org.eclipse.core.runtime.CoreException; @@ -28,23 +27,16 @@ import org.eclipse.core.runtime.CoreException; */ public class PDOMCPPVariable extends PDOMBinding implements ICPPVariable { - /** - * @param pdom - * @param name - * @param binding - * @throws CoreException - */ - public PDOMCPPVariable(PDOMDatabase pdom, int languageId, IASTName name, CPPVariable binding) - throws CoreException { - super(pdom, name, languageId, GPPLanguage.CPPVARIABLE); + public PDOMCPPVariable(PDOMDatabase pdom, PDOMNode parent, IASTName name) throws CoreException { + super(pdom, parent, name, PDOMCPPLinkage.CPPVARIABLE); } - /** - * @param pdom - * @param bindingRecord - */ - public PDOMCPPVariable(PDOMDatabase pdom, int bindingRecord) { - super(pdom, bindingRecord); + public PDOMCPPVariable(PDOMDatabase pdom, int record) { + super(pdom, record); + } + + protected int getRecordSize() { + return RECORD_SIZE; } public boolean isMutable() throws DOMException { diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml index a2c12a91422..ad1f7ded337 100644 --- a/core/org.eclipse.cdt.core/plugin.xml +++ b/core/org.eclipse.cdt.core/plugin.xml @@ -590,6 +590,14 @@ + + + + + diff --git a/core/org.eclipse.cdt.core/schema/language.exsd b/core/org.eclipse.cdt.core/schema/language.exsd index 6f2c891eabb..d61057489ef 100644 --- a/core/org.eclipse.cdt.core/schema/language.exsd +++ b/core/org.eclipse.cdt.core/schema/language.exsd @@ -67,7 +67,7 @@ - + diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties index 2d44df6f655..3a08913bc76 100644 --- a/core/org.eclipse.cdt.ui/plugin.properties +++ b/core/org.eclipse.cdt.ui/plugin.properties @@ -325,3 +325,6 @@ 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) + +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 8c20f5355d5..d41ba1f5c0f 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -234,6 +234,12 @@ class="org.eclipse.cdt.internal.ui.cview.CView" id="org.eclipse.cdt.ui.CView"> +