diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java index 3bf7ff4a058..4d6b4bac9c9 100644 --- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java +++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/core/suite/AutomatedIntegrationSuite.java @@ -88,4 +88,4 @@ public class AutomatedIntegrationSuite extends TestSuite { return suite; } -} +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 1192759b7c0..6c86221360c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -54,7 +54,7 @@ public class PDOM extends PlatformObject private Database db; - public static final int VERSION = 9; + public static final int VERSION = 10; // 0 - the beginning of it all // 1 - first change to kick off upgrades // 2 - added file inclusions @@ -65,6 +65,7 @@ public class PDOM extends PlatformObject // 7 - class key // 8 - enumerators // 9 - base classes + // 10 - typedefs, types on C++ variables public static final int LINKAGES = Database.DATA_AREA; public static final int FILE_INDEX = Database.DATA_AREA + 4; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java index dc1c0d14314..738b8cac031 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java @@ -82,6 +82,11 @@ public abstract class PDOMNode implements IPDOMNode{ return pdom.getDB().getInt(record + TYPE); } + public PDOMNode getParentNode() throws CoreException { + int parentrec = pdom.getDB().getInt(record + PARENT); + return parentrec != 0 ? getLinkage().getNode(parentrec) : null; + } + public PDOMLinkage getLinkage() throws CoreException { return getLinkage(pdom, record); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMPointerType.java index 19b3c0a4abe..90b3b9ef9be 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMPointerType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMPointerType.java @@ -45,12 +45,13 @@ public class PDOMPointerType extends PDOMNode implements IPointerType, // type IType targetType = ((ITypeContainer)type).getType(); + int typeRec = 0; if (type != null) { PDOMNode targetTypeNode = getLinkage().addType(this, targetType); - if (targetTypeNode != null) { - db.putInt(record + TYPE, targetTypeNode.getRecord()); - } + if (targetTypeNode != null) + typeRec = targetTypeNode.getRecord(); } + db.putInt(record + TYPE, typeRec); // flags byte flags = 0; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java index 66f7bd4ba2a..e4e58f5cfa5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java @@ -33,6 +33,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; +import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMember; import org.eclipse.cdt.internal.core.pdom.dom.PDOMMemberOwner; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode; @@ -214,13 +215,15 @@ public class PDOMCPPClassType extends PDOMMemberOwner implements ICPPClassType, } public boolean isGloballyQualified() throws DOMException { - throw new PDOMNotImplementedError(); + try { + return getParentNode() instanceof PDOMLinkage; + } catch (CoreException e) { + return true; + } } public ICPPClassType getClassType() { - return null; - // TODO - do we need the real type? - // throw new PDOMNotImplementedError(); + return this; } public ICPPMethod[] getImplicitMethods() { @@ -287,4 +290,4 @@ public class PDOMCPPClassType extends PDOMMemberOwner implements ICPPClassType, throw new PDOMNotImplementedError(); } -} +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index 0a21062b74d..11527a77267 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -37,6 +37,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; 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.ICPPTemplateDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage; @@ -221,6 +222,9 @@ public class PDOMCPPLinkage extends PDOMLinkage { protected int getBindingType(IBinding binding) { if (binding instanceof ICPPVariable) return CPPVARIABLE; + else if (binding instanceof ICPPTemplateDefinition) + // this must be before class type + return 0; else if (binding instanceof ICPPFunction) return CPPFUNCTION; else if (binding instanceof ICPPClassType) @@ -395,4 +399,4 @@ public class PDOMCPPLinkage extends PDOMLinkage { } } -} +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java index 68304e9b8da..9cf48c44724 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPMethod.java @@ -197,7 +197,12 @@ public class PDOMCPPMethod extends PDOMMember implements ICPPMethod, ICPPFunctio } public boolean isSameType(IType type) { - throw new PDOMNotImplementedError(); + if (type == this) + return true; + if (type instanceof PDOMCPPMethod) + return getRecord() == ((PDOMCPPMethod)type).getRecordSize(); + // TODO further analysis to compare with DOM objects + return false; } }