From de14fed9adf39f5d1e907bab24372be5152122f1 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 27 Oct 2006 10:08:08 +0000 Subject: [PATCH] Fix for 162217, by Andrew Ferguson, PDOM bindings constructed off bindings --- .../OverloadsWithinCommonHeaderTests.java | 6 +- .../internal/core/pdom/dom/PDOMBinding.java | 5 -- .../internal/core/pdom/dom/PDOMLinkage.java | 6 +- .../internal/core/pdom/dom/PDOMNamedNode.java | 16 +--- .../core/pdom/dom/c/PDOMCAnnotation.java | 15 ++-- .../core/pdom/dom/c/PDOMCEnumeration.java | 5 +- .../core/pdom/dom/c/PDOMCEnumerator.java | 5 +- .../internal/core/pdom/dom/c/PDOMCField.java | 5 +- .../core/pdom/dom/c/PDOMCFunction.java | 31 ++----- .../core/pdom/dom/c/PDOMCLinkage.java | 26 +++--- .../core/pdom/dom/c/PDOMCParameter.java | 5 +- .../core/pdom/dom/c/PDOMCStructure.java | 5 +- .../core/pdom/dom/c/PDOMCTypedef.java | 5 +- .../core/pdom/dom/c/PDOMCVariable.java | 8 +- .../core/pdom/dom/cpp/CPPBindingIdentity.java | 2 +- .../core/pdom/dom/cpp/PDOMCPPBinding.java | 3 +- .../core/pdom/dom/cpp/PDOMCPPClassType.java | 11 +-- .../core/pdom/dom/cpp/PDOMCPPEnumeration.java | 5 +- .../core/pdom/dom/cpp/PDOMCPPEnumerator.java | 5 +- .../core/pdom/dom/cpp/PDOMCPPField.java | 9 +- .../core/pdom/dom/cpp/PDOMCPPFunction.java | 34 +++----- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 85 ++++++++++--------- .../core/pdom/dom/cpp/PDOMCPPMethod.java | 44 ++++------ .../core/pdom/dom/cpp/PDOMCPPNamespace.java | 4 +- .../pdom/dom/cpp/PDOMCPPNamespaceAlias.java | 7 +- .../core/pdom/dom/cpp/PDOMCPPParameter.java | 9 +- .../core/pdom/dom/cpp/PDOMCPPTypedef.java | 2 +- .../core/pdom/dom/cpp/PDOMCPPVariable.java | 24 ++---- 28 files changed, 150 insertions(+), 237 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/OverloadsWithinCommonHeaderTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/OverloadsWithinCommonHeaderTests.java index 7f4ce6d69e2..415bd437954 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/OverloadsWithinCommonHeaderTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/OverloadsWithinCommonHeaderTests.java @@ -52,7 +52,7 @@ public class OverloadsWithinCommonHeaderTests extends PDOMTestBase { public void testDummy() {} - public void _testOverloadedInCommonHeader_ClassScope() throws CoreException { + public void testOverloadedInCommonHeader_ClassScope() throws CoreException { Pattern[] ManyOverloadedQuxPath = makePatternArray(new String[] {"ManyOverloaded","qux"}); IBinding[] ManyOverloadedQux = pdom.findBindings(ManyOverloadedQuxPath, new NullProgressMonitor()); assertEquals(5,ManyOverloadedQux.length); @@ -73,7 +73,7 @@ public class OverloadsWithinCommonHeaderTests extends PDOMTestBase { assertFunctionRefCount(new Class[]{ICPPClassType.class}, ManyOverloadedQux, 10); } - public void _testOverloadedInCommonHeader_FileScope() throws CoreException { + public void testOverloadedInCommonHeader_FileScope() throws CoreException { Pattern[] QuuxPath = makePatternArray(new String[] {"quux"}); IBinding[] Quux = pdom.findBindings(QuuxPath, false, IndexFilter.getFilter(Linkage.CPP_LINKAGE), new NullProgressMonitor()); @@ -95,7 +95,7 @@ public class OverloadsWithinCommonHeaderTests extends PDOMTestBase { assertFunctionRefCount(new Class[] {ICPPClassType.class}, Quux, 12); } - public void _testOverloadedInCommonHeader_NamespaceScope() throws CoreException { + public void testOverloadedInCommonHeader_NamespaceScope() throws CoreException { Pattern[] GraultPath = makePatternArray(new String[] {"corge","grault"}); IBinding[] Grault = pdom.findBindings(GraultPath, true, IndexFilter.getFilter(Linkage.CPP_LINKAGE), new NullProgressMonitor()); assertEquals(5,Grault.length); 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 88186c57d99..266210f045a 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 @@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.core.pdom.dom; 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.IScope; import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.internal.core.index.IIndexFragment; @@ -35,10 +34,6 @@ public abstract class PDOMBinding extends PDOMNamedNode implements IIndexFragmen protected static final int RECORD_SIZE = PDOMNamedNode.RECORD_SIZE + 12; - protected PDOMBinding(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { - super(pdom, parent, name.toCharArray()); - } - protected PDOMBinding(PDOM pdom, PDOMNode parent, char[] name) throws CoreException { super(pdom, parent, name); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java index 674320a05da..e8ed93c983e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java @@ -177,8 +177,10 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IBindingIdent /** * * @param binding - * @return null for filescope for non-pdom bindings, this for filescope for pdom bindings - * or the parent binding in any other case + * @return * @throws CoreException */ public PDOMNode getAdaptedParent(IBinding binding) throws CoreException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNamedNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNamedNode.java index 7e377ef9a2c..3ca5dc37e0c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNamedNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNamedNode.java @@ -16,7 +16,6 @@ package org.eclipse.cdt.internal.core.pdom.dom; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.Database; -import org.eclipse.cdt.internal.core.pdom.db.IBTreeComparator; import org.eclipse.cdt.internal.core.pdom.db.IString; import org.eclipse.core.runtime.CoreException; @@ -47,9 +46,7 @@ public abstract class PDOMNamedNode extends PDOMNode { name != null ? db.newString(name).getRecord() : 0); } - protected int getRecordSize() { - return RECORD_SIZE; - } + abstract protected int getRecordSize(); public IString getDBName() throws CoreException { Database db = pdom.getDB(); @@ -65,17 +62,6 @@ public abstract class PDOMNamedNode extends PDOMNode { return getDBName().equals(name); } - 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); - int string2 = db.getInt(record2 + NAME); - return db.getString(string1).compare(db.getString(string2)); - } - }; - } - /** * Convenience method for fetching a byte from the database. * @param offset Location of the byte. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCAnnotation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCAnnotation.java index 622bd47c48a..db651c9a264 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCAnnotation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCAnnotation.java @@ -15,7 +15,7 @@ import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IVariable; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; /** * A utility class for packing various annotations into bit fields. This @@ -67,14 +67,17 @@ public class PDOMCAnnotation { /** * Encodes CV qualifiers from a method declarator as a bit vector. - * @param declarator Method declarator. + * @param type the function type * @return a bit vector of the CV qualifiers. */ - public static byte encodeCVQualifiers(ICPPASTFunctionDeclarator declarator) { + /* + * aftodo - will we put CV information in C pdom bindings or should we + * move this to PDOMCPPAnnotation? + */ + public static byte encodeCVQualifiers(ICPPFunctionType type) { byte modifiers = 0; - modifiers |= (declarator.isConst() ? 1 : 0) << CONST_OFFSET; - modifiers |= (declarator.isVolatile() ? 1 : 0) << VOLATILE_OFFSET; + modifiers |= (type.isConst() ? 1 : 0) << CONST_OFFSET; + modifiers |= (type.isVolatile() ? 1 : 0) << VOLATILE_OFFSET; return modifiers; } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumeration.java index a9e0e37b3e7..585f064cd56 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumeration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumeration.java @@ -14,7 +14,6 @@ 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; import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.dom.ast.IType; @@ -33,9 +32,9 @@ class PDOMCEnumeration extends PDOMBinding implements IEnumeration { protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; - public PDOMCEnumeration(PDOM pdom, PDOMNode parent, IASTName name) + public PDOMCEnumeration(PDOM pdom, PDOMNode parent, IEnumeration enumeration) throws CoreException { - super(pdom, parent, name); + super(pdom, parent, enumeration.getNameCharArray()); } public PDOMCEnumeration(PDOM pdom, int record) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumerator.java index 1deec7ec558..ea30788e1cb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCEnumerator.java @@ -13,7 +13,6 @@ 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.IEnumerator; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.pdom.PDOM; @@ -32,9 +31,9 @@ class PDOMCEnumerator extends PDOMBinding implements IEnumerator { protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 8; - public PDOMCEnumerator(PDOM pdom, PDOMNode parent, IASTName name, PDOMCEnumeration enumeration) + public PDOMCEnumerator(PDOM pdom, PDOMNode parent, IEnumerator enumerator, PDOMCEnumeration enumeration) throws CoreException { - super(pdom, parent, name); + super(pdom, parent, enumerator.getNameCharArray()); pdom.getDB().putInt(record + ENUMERATION, enumeration.getRecord()); enumeration.addEnumerator(this); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java index 3f81d109ed8..5960cc68b18 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCField.java @@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.core.pdom.dom.c; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.pdom.PDOM; @@ -28,8 +27,8 @@ import org.eclipse.core.runtime.CoreException; */ class PDOMCField extends PDOMBinding implements IField { - public PDOMCField(PDOM pdom, IPDOMMemberOwner parent, IASTName name) throws CoreException { - super(pdom, (PDOMNode) parent, name); + public PDOMCField(PDOM pdom, IPDOMMemberOwner parent, IField field) throws CoreException { + super(pdom, (PDOMNode) parent, field.getNameCharArray()); } public PDOMCField(PDOM pdom, int record) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java index 23f9ccba94a..67d31da4a93 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCFunction.java @@ -15,17 +15,11 @@ 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.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; -import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator; import org.eclipse.cdt.internal.core.Util; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; @@ -60,25 +54,16 @@ class PDOMCFunction extends PDOMBinding implements IFunction { */ public static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 9; - public PDOMCFunction(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { - super(pdom, parent, name); + public PDOMCFunction(PDOM pdom, PDOMNode parent, IFunction function) throws CoreException { + super(pdom, parent, function.getNameCharArray()); + try { - IASTNode parentNode = name.getParent(); - if (parentNode instanceof IASTStandardFunctionDeclarator) { - IASTStandardFunctionDeclarator funcDecl = (IASTStandardFunctionDeclarator)parentNode; - IASTParameterDeclaration[] params = funcDecl.getParameters(); - pdom.getDB().putInt(record + NUM_PARAMS, params.length); - for (int i = 0; i < params.length; ++i) { - IASTParameterDeclaration param = params[i]; - IASTName paramName = param.getDeclarator().getName(); - IBinding binding = paramName.resolveBinding(); - IParameter paramBinding = (IParameter)binding; - setFirstParameter(new PDOMCParameter(pdom, this, paramName, paramBinding)); - } - } else if(parentNode instanceof ICASTKnRFunctionDeclarator) { - fail(); // aftodo + IParameter[] params = function.getParameters(); + pdom.getDB().putInt(record + NUM_PARAMS, params.length); + for (int i = 0; i < params.length; ++i) { + setFirstParameter(new PDOMCParameter(pdom, this, params[i])); } - pdom.getDB().putByte(record + ANNOTATIONS, PDOMCAnnotation.encodeAnnotation(name.resolveBinding())); + pdom.getDB().putByte(record + ANNOTATIONS, PDOMCAnnotation.encodeAnnotation(function)); } catch(DOMException e) { throw new CoreException(Util.createStatus(e)); } 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 c87fc941afc..a71b9f483fd 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 @@ -102,7 +102,7 @@ class PDOMCLinkage extends PDOMLinkage { if (binding instanceof IParameter) // skip parameters return null; - + PDOMBinding pdomBinding = adaptBinding(binding); try { if (pdomBinding == null) { @@ -114,42 +114,38 @@ class PDOMCLinkage extends PDOMLinkage { return null; // skip parameters else if (binding instanceof IField) { // must be before IVariable if (parent instanceof IPDOMMemberOwner) - pdomBinding = new PDOMCField(pdom, (IPDOMMemberOwner)parent, name); + pdomBinding = new PDOMCField(pdom, (IPDOMMemberOwner)parent, (IField) binding); } else if (binding instanceof IVariable) { IVariable var= (IVariable) binding; if (!var.isStatic()) { // bug 161216 - pdomBinding = new PDOMCVariable(pdom, parent, name); + pdomBinding = new PDOMCVariable(pdom, parent, var); } - } - else if (binding instanceof IFunction) { + } else if (binding instanceof IFunction) { IFunction func= (IFunction) binding; if (!func.isStatic()) { // bug 161216 - pdomBinding = new PDOMCFunction(pdom, parent, name); + pdomBinding = new PDOMCFunction(pdom, parent, func); } - } - else if (binding instanceof ICompositeType) - pdomBinding = new PDOMCStructure(pdom, parent, name); + } else if (binding instanceof ICompositeType) + pdomBinding = new PDOMCStructure(pdom, parent, (ICompositeType) binding); else if (binding instanceof IEnumeration) - pdomBinding = new PDOMCEnumeration(pdom, parent, name); + pdomBinding = new PDOMCEnumeration(pdom, parent, (IEnumeration) binding); else if (binding instanceof IEnumerator) { try { IEnumeration enumeration = (IEnumeration)((IEnumerator)binding).getType(); PDOMBinding pdomEnumeration = adaptBinding(enumeration); if (pdomEnumeration instanceof PDOMCEnumeration) - pdomBinding = new PDOMCEnumerator(pdom, parent, name, - (PDOMCEnumeration)pdomEnumeration); + pdomBinding = new PDOMCEnumerator(pdom, parent, (IEnumerator) binding, (PDOMCEnumeration)pdomEnumeration); } catch (DOMException e) { throw new CoreException(Util.createStatus(e)); } } else if (binding instanceof ITypedef) - pdomBinding = new PDOMCTypedef(pdom, parent, name, (ITypedef)binding); + pdomBinding = new PDOMCTypedef(pdom, parent, (ITypedef)binding); if(pdomBinding!=null) { parent.addChild(pdomBinding); } } - } - catch (DOMException e) { + } catch (DOMException e) { throw new CoreException(Util.createStatus(e)); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCParameter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCParameter.java index 0f650307b85..485662a57a7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCParameter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCParameter.java @@ -15,7 +15,6 @@ 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.IASTInitializer; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; @@ -44,9 +43,9 @@ class PDOMCParameter extends PDOMNamedNode implements IParameter { super(pdom, record); } - public PDOMCParameter(PDOM pdom, PDOMNode parent, IASTName name, IParameter param) + public PDOMCParameter(PDOM pdom, PDOMNode parent, IParameter param) throws CoreException { - super(pdom, parent, name.toCharArray()); + super(pdom, parent, param.getNameCharArray()); Database db = pdom.getDB(); 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 07b0f33ea10..66778b2aac5 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 @@ -20,7 +20,6 @@ import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMNode; import org.eclipse.cdt.core.dom.IPDOMVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; -import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; @@ -42,8 +41,8 @@ public class PDOMCStructure extends PDOMBinding implements ICompositeType, IPDOM private static final int MEMBERLIST = PDOMBinding.RECORD_SIZE; protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; - public PDOMCStructure(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { - super(pdom, parent, name); + public PDOMCStructure(PDOM pdom, PDOMNode parent, ICompositeType compType) throws CoreException { + super(pdom, parent, compType.getNameCharArray()); // linked list is initialized by malloc zeroing allocated storage } 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 index 620c12ff24c..df3eaf66bed 100644 --- 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 @@ -14,7 +14,6 @@ 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.Util; @@ -33,9 +32,9 @@ class PDOMCTypedef extends PDOMBinding implements ITypedef { protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; - public PDOMCTypedef(PDOM pdom, PDOMNode parent, IASTName name, ITypedef typedef) + public PDOMCTypedef(PDOM pdom, PDOMNode parent, ITypedef typedef) throws CoreException { - super(pdom, parent, name); + super(pdom, parent, typedef.getNameCharArray()); try { IType type = typedef.getType(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java index afcd1271063..0bc53065257 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/c/PDOMCVariable.java @@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.core.pdom.dom.c; 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.IVariable; import org.eclipse.cdt.internal.core.Util; @@ -39,12 +38,11 @@ class PDOMCVariable extends PDOMBinding implements IVariable { */ protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 1; - public PDOMCVariable(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { - super(pdom, parent, name); - IVariable binding = (IVariable)name.getBinding(); + public PDOMCVariable(PDOM pdom, PDOMNode parent, IVariable variable) throws CoreException { + super(pdom, parent, variable.getNameCharArray()); try { - pdom.getDB().putByte(record + ANNOTATIONS, PDOMCAnnotation.encodeAnnotation(binding)); + pdom.getDB().putByte(record + ANNOTATIONS, PDOMCAnnotation.encodeAnnotation(variable)); } catch (DOMException e) { throw new CoreException(Util.createStatus(e)); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPBindingIdentity.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPBindingIdentity.java index 7bedfe3e095..e2ee622b808 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPBindingIdentity.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPBindingIdentity.java @@ -102,7 +102,7 @@ public class CPPBindingIdentity extends AbstractCLocalBindingIdentity { } public String toString() { - return name+" "+type+" "+mangledExtendedType; + return name+" "+type+" "+mangledExtendedType; //$NON-NLS-1$ //$NON-NLS-2$ } public char[] getNameCharArray() throws CoreException { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBinding.java index 608cbdfa6ab..d3e57c8398c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPBinding.java @@ -16,7 +16,6 @@ import java.util.List; 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.cpp.ICPPBinding; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding; @@ -31,7 +30,7 @@ abstract public class PDOMCPPBinding extends PDOMBinding implements ICPPBinding public PDOMCPPBinding(PDOM pdom, int record) { super(pdom, record); } - public PDOMCPPBinding(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { + public PDOMCPPBinding(PDOM pdom, PDOMNode parent, char[] name) throws CoreException { super(pdom, parent, 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 index ce83121b5a0..707210b8903 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 @@ -23,7 +23,6 @@ import org.eclipse.cdt.core.dom.IPDOMNode; import org.eclipse.cdt.core.dom.IPDOMVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; 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.IField; import org.eclipse.cdt.core.dom.ast.IScope; @@ -61,16 +60,12 @@ class PDOMCPPClassType extends PDOMCPPBinding implements ICPPClassType, protected static final int RECORD_SIZE = PDOMCPPBinding.RECORD_SIZE + 12; - public PDOMCPPClassType(PDOM pdom, PDOMNode parent, IASTName name) + public PDOMCPPClassType(PDOM pdom, PDOMNode parent, ICPPClassType classType) throws CoreException { - super(pdom, parent, name); + super(pdom, parent, classType.getName().toCharArray()); - IBinding binding = name.resolveBinding(); try { - int key = 0; - if (binding instanceof ICPPClassType) // not sure why it wouldn't - key = ((ICPPClassType) binding).getKey(); - pdom.getDB().putByte(record + KEY, (byte) key); + pdom.getDB().putByte(record + KEY, (byte) classType.getKey()); } catch (DOMException e) { throw new CoreException(Util.createStatus(e)); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumeration.java index 38c421ef25b..eddfc7850e7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumeration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumeration.java @@ -14,7 +14,6 @@ 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; import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.dom.ast.IType; @@ -34,9 +33,9 @@ class PDOMCPPEnumeration extends PDOMCPPBinding implements IEnumeration, ICPPBin protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 4; - public PDOMCPPEnumeration(PDOM pdom, PDOMNode parent, IASTName name) + public PDOMCPPEnumeration(PDOM pdom, PDOMNode parent, IEnumeration enumeration) throws CoreException { - super(pdom, parent, name); + super(pdom, parent, enumeration.getNameCharArray()); } public PDOMCPPEnumeration(PDOM pdom, int record) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumerator.java index f8e2386b8f8..368198b4c25 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPEnumerator.java @@ -13,7 +13,6 @@ 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.IEnumerator; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; @@ -33,9 +32,9 @@ class PDOMCPPEnumerator extends PDOMCPPBinding implements IEnumerator, ICPPBindi protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 8; - public PDOMCPPEnumerator(PDOM pdom, PDOMNode parent, IASTName name, PDOMCPPEnumeration enumeration) + public PDOMCPPEnumerator(PDOM pdom, PDOMNode parent, IEnumerator enumerator, PDOMCPPEnumeration enumeration) throws CoreException { - super(pdom, parent, name); + super(pdom, parent, enumerator.getNameCharArray()); pdom.getDB().putInt(record + ENUMERATION, enumeration.getRecord()); enumeration.addEnumerator(this); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java index 95e6bec8db9..15f991ae5c9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPField.java @@ -14,8 +14,6 @@ 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.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.ICPPField; @@ -44,13 +42,12 @@ class PDOMCPPField extends PDOMCPPBinding implements ICPPField { */ protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 1; - public PDOMCPPField(PDOM pdom, PDOMCPPClassType parent, IASTName name) + public PDOMCPPField(PDOM pdom, PDOMCPPClassType parent, ICPPField field) throws CoreException { - super(pdom, parent, name); - IBinding binding = name.resolveBinding(); + super(pdom, parent, field.getNameCharArray()); try { Database db = pdom.getDB(); - db.putByte(record + ANNOTATION, PDOMCPPAnnotation.encodeAnnotation(binding)); + db.putByte(record + ANNOTATION, PDOMCPPAnnotation.encodeAnnotation(field)); } catch (DOMException e) { throw new CoreException(Util.createStatus(e)); } 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 d47518e99c9..87b9d536127 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 @@ -14,19 +14,13 @@ 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.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.IBinding; 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.IType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTParameterDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameter; import org.eclipse.cdt.internal.core.Util; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.Database; @@ -65,26 +59,18 @@ class PDOMCPPFunction extends PDOMCPPBinding implements ICPPFunction, ICPPFuncti */ protected static final int RECORD_SIZE = PDOMBinding.RECORD_SIZE + 9; - public PDOMCPPFunction(PDOM pdom, PDOMNode parent, IASTName name) throws CoreException { - super(pdom, parent, name); - IASTNode parentNode = name.getParent(); + public PDOMCPPFunction(PDOM pdom, PDOMNode parent, ICPPFunction function) throws CoreException { + super(pdom, parent, function.getNameCharArray()); + Database db = pdom.getDB(); - if (parentNode instanceof ICPPASTFunctionDeclarator) { - ICPPASTFunctionDeclarator funcDecl = (ICPPASTFunctionDeclarator)parentNode; - IASTParameterDeclaration[] params = funcDecl.getParameters(); - db.putInt(record + NUM_PARAMS, params.length); - for (int i = 0; i < params.length; ++i) { - ICPPASTParameterDeclaration param = (ICPPASTParameterDeclaration)params[i]; - IASTName paramName = param.getDeclarator().getName(); - IBinding binding = paramName.resolveBinding(); - if (!(binding instanceof ICPPParameter)) - continue; - ICPPParameter paramBinding = (ICPPParameter)binding; - setFirstParameter(new PDOMCPPParameter(pdom, this, paramName, paramBinding)); - } - } - IBinding binding = name.resolveBinding(); + IBinding binding = function; try { + IParameter[] params = function.getParameters(); + db.putInt(record + NUM_PARAMS, params.length); + + for (int i=0; i