Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal')
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java16
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCTypedef.java73
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBasicType.java5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassType.java14
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java8
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTypedef.java72
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPVariable.java9
8 files changed, 195 insertions, 11 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java
index b3e826f9562..c6b63d2fbe9 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCLinkage.java
@@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
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.core.dom.ast.IVariable;
import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
@@ -68,6 +69,7 @@ public class PDOMCLinkage extends PDOMLinkage {
public static final int CFIELD = PDOMLinkage.LAST_NODE_TYPE + 4;
public static final int CENUMERATION = PDOMLinkage.LAST_NODE_TYPE + 5;
public static final int CENUMERATOR = PDOMLinkage.LAST_NODE_TYPE + 6;
+ public static final int CTYPEDEF = PDOMLinkage.LAST_NODE_TYPE + 7;
public ILanguage getLanguage() {
return new GCCLanguage();
@@ -138,7 +140,8 @@ public class PDOMCLinkage extends PDOMLinkage {
if (pdomEnumeration instanceof PDOMCEnumeration)
pdomBinding = new PDOMCEnumerator(pdom, parent, name,
(PDOMCEnumeration)pdomEnumeration);
- }
+ } else if (binding instanceof ITypedef)
+ pdomBinding = new PDOMCTypedef(pdom, parent, name, (ITypedef)binding);
}
if (pdomBinding != null)
@@ -184,6 +187,8 @@ public class PDOMCLinkage extends PDOMLinkage {
return CENUMERATION;
else if (binding instanceof IEnumerator)
return CENUMERATOR;
+ else if (binding instanceof ITypedef)
+ return CTYPEDEF;
else
return 0;
}
@@ -223,6 +228,8 @@ public class PDOMCLinkage extends PDOMLinkage {
return new PDOMCEnumeration(pdom, record);
case CENUMERATOR:
return new PDOMCEnumerator(pdom, record);
+ case CTYPEDEF:
+ return new PDOMCTypedef(pdom, record);
}
return super.getNode(record);
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java
index 2c4e4b7c8fd..7a129b6b2ee 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCStructure.java
@@ -11,6 +11,8 @@
package org.eclipse.cdt.internal.core.pdom.dom.c;
+import java.util.ArrayList;
+
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTName;
@@ -52,7 +54,19 @@ public class PDOMCStructure extends PDOMMemberOwner implements ICompositeType {
}
public IField[] getFields() throws DOMException {
- throw new PDOMNotImplementedError();
+ try {
+ ArrayList fields = new ArrayList();
+
+ for (PDOMMember member = getFirstMember(); member != null; member = member.getNextMember()) {
+ if (member instanceof IField)
+ fields.add(member);
+ }
+
+ return (IField[])fields.toArray(new IField[fields.size()]);
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return new IField[0];
+ }
}
public IField findField(String name) throws DOMException {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCTypedef.java
new file mode 100644
index 00000000000..d688c10c158
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCTypedef.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2006 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * QNX - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.core.pdom.dom.c;
+
+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.ITypedef;
+import org.eclipse.cdt.internal.core.pdom.PDOM;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * @author Doug Schaefer
+ */
+public class PDOMCTypedef extends PDOMBinding implements ITypedef {
+
+ private static final int TYPE = PDOMBinding.RECORD_SIZE + 0;
+
+ protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4;
+
+ public PDOMCTypedef(PDOM pdom, PDOMNode parent, IASTName name, ITypedef typedef)
+ throws CoreException {
+ super(pdom, parent, name);
+
+ IType type = typedef.getType();
+ PDOMNode typeNode = parent.getLinkage().addType(this, type);
+ if (typeNode != null)
+ pdom.getDB().putInt(record + TYPE, typeNode.getRecord());
+ }
+
+ public PDOMCTypedef(PDOM pdom, int record) {
+ super(pdom, record);
+ }
+
+ protected int getRecordSize() {
+ return RECORD_SIZE;
+ }
+
+ public int getNodeType() {
+ return PDOMCLinkage.CTYPEDEF;
+ }
+
+ public IType getType() throws DOMException {
+ try {
+ int typeRec = pdom.getDB().getInt(record + TYPE);
+ return (IType)getLinkage().getNode(typeRec);
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return null;
+ }
+ }
+
+ public boolean isSameType(IType type) {
+ throw new PDOMNotImplementedError();
+ }
+
+ public Object clone() {
+ throw new PDOMNotImplementedError();
+ }
+
+}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBasicType.java
index aa31c157714..4cc761b1d5d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBasicType.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBasicType.java
@@ -19,7 +19,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.db.Database;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
-import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
import org.eclipse.core.runtime.CoreException;
/**
@@ -80,7 +79,9 @@ public class PDOMCPPBasicType extends PDOMNode implements ICPPBasicType {
}
public IASTExpression getValue() throws DOMException {
- throw new PDOMNotImplementedError();
+ // Returning null for now, not sure what needs to be here if anything
+ // Values only seem to be used at type resolution time.
+ return null;
}
private char getFlags() throws CoreException {
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 9b31027786b..66f7bd4ba2a 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
@@ -173,7 +173,19 @@ public class PDOMCPPClassType extends PDOMMemberOwner implements ICPPClassType,
}
public ICPPMethod[] getMethods() throws DOMException {
- throw new PDOMNotImplementedError();
+ try {
+ ArrayList methods = new ArrayList();
+
+ for (PDOMMember member = getFirstMember(); member != null; member = member.getNextMember()) {
+ if (member instanceof ICPPMethod)
+ methods.add(member);
+ }
+
+ return (ICPPMethod[])methods.toArray(new ICPPMethod[methods.size()]);
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return new ICPPMethod[0];
+ }
}
public ICPPClassType[] getNestedClasses() throws DOMException {
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 0234e1438d7..0a21062b74d 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
@@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
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.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceAlias;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
@@ -88,6 +89,7 @@ public class PDOMCPPLinkage extends PDOMLinkage {
public static final int CPPPARAMETER = PDOMLinkage.LAST_NODE_TYPE + 9;
public static final int CPPENUMERATION = PDOMLinkage.LAST_NODE_TYPE + 10;
public static final int CPPENUMERATOR = PDOMLinkage.LAST_NODE_TYPE + 11;
+ public static final int CPPTYPEDEF = PDOMLinkage.LAST_NODE_TYPE + 12;
public ILanguage getLanguage() {
return new GPPLanguage();
@@ -159,6 +161,8 @@ public class PDOMCPPLinkage extends PDOMLinkage {
if (pdomEnumeration instanceof PDOMCPPEnumeration)
pdomBinding = new PDOMCPPEnumerator(pdom, parent, name,
(PDOMCPPEnumeration)pdomEnumeration);
+ } else if (binding instanceof ITypedef) {
+ pdomBinding = new PDOMCPPTypedef(pdom, parent, name, (ITypedef)binding);
}
}
@@ -233,6 +237,8 @@ public class PDOMCPPLinkage extends PDOMLinkage {
return CPPENUMERATION;
else if (binding instanceof IEnumerator)
return CPPENUMERATOR;
+ else if (binding instanceof ITypedef)
+ return CPPTYPEDEF;
else
return 0;
}
@@ -382,6 +388,8 @@ public class PDOMCPPLinkage extends PDOMLinkage {
return new PDOMCPPEnumeration(pdom, record);
case CPPENUMERATOR:
return new PDOMCPPEnumerator(pdom, record);
+ case CPPTYPEDEF:
+ return new PDOMCPPTypedef(pdom, record);
default:
return super.getNode(record);
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTypedef.java
new file mode 100644
index 00000000000..5fd23334911
--- /dev/null
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPTypedef.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2006 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * QNX - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.core.pdom.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.ITypedef;
+import org.eclipse.cdt.internal.core.pdom.PDOM;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
+import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * @author Doug Schaefer
+ */
+public class PDOMCPPTypedef extends PDOMBinding implements ITypedef {
+
+ private static final int TYPE = PDOMBinding.RECORD_SIZE + 0;
+
+ protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4;
+
+ public PDOMCPPTypedef(PDOM pdom, PDOMNode parent, IASTName name, ITypedef typedef)
+ throws CoreException {
+ super(pdom, parent, name);
+ IType type = typedef.getType();
+ PDOMNode typeNode = parent.getLinkage().addType(this, type);
+ if (typeNode != null)
+ pdom.getDB().putInt(record + TYPE, typeNode.getRecord());
+ }
+
+ public PDOMCPPTypedef(PDOM pdom, int record) {
+ super(pdom, record);
+ }
+
+ protected int getRecordSize() {
+ return RECORD_SIZE;
+ }
+
+ public int getNodeType() {
+ return PDOMCPPLinkage.CPPTYPEDEF;
+ }
+
+ public IType getType() throws DOMException {
+ try {
+ PDOMNode node = getLinkage().getNode(pdom.getDB().getInt(record + TYPE));
+ return node instanceof IType ? (IType)node : null;
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return null;
+ }
+ }
+
+ public boolean isSameType(IType type) {
+ throw new PDOMNotImplementedError();
+ }
+
+ public Object clone() {
+ throw new PDOMNotImplementedError();
+ }
+
+}
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 22fdb9da0ee..8566b9f2472 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
@@ -16,7 +16,6 @@ import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
-import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVisitor;
@@ -44,11 +43,9 @@ public class PDOMCPPVariable extends PDOMBinding implements ICPPVariable {
if (nameParent instanceof IASTDeclarator) {
IASTDeclarator declarator = (IASTDeclarator)nameParent;
IType type = CPPVisitor.createType(declarator);
- if (type != null && type instanceof IBinding) {
- PDOMBinding pdomType = parent.getLinkage().adaptBinding((IBinding)type);
- if (pdomType != null)
- pdom.getDB().putInt(record + TYPE_OFFSET, pdomType.getRecord());
- }
+ PDOMNode typeNode = parent.getLinkage().addType(this, type);
+ if (typeNode != null)
+ pdom.getDB().putInt(record + TYPE_OFFSET, typeNode.getRecord());
}
}

Back to the top