From baa29bb0f5830aca92686f7e2918044701353a88 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 20 Oct 2006 13:19:52 +0000 Subject: [PATCH] Fix for 156504 by Andrew Ferguson, Overloaded functions/methods in PDOM --- .../core/pdom/dom/FindBindingsInBTree.java | 19 +++++----- .../core/pdom/dom/c/PDOMCLinkage.java | 4 ++- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 36 ++++--------------- .../core/pdom/dom/cpp/PDOMCPPNamespace.java | 8 ++--- 4 files changed, 23 insertions(+), 44 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/FindBindingsInBTree.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/FindBindingsInBTree.java index e3267e09ec7..ce7bce64539 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/FindBindingsInBTree.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/FindBindingsInBTree.java @@ -14,17 +14,16 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.core.dom.ast.IBinding; -import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor; import org.eclipse.core.runtime.CoreException; public final class FindBindingsInBTree implements IBTreeVisitor { - protected final PDOM pdom; + protected final PDOMLinkage linkage; protected final char[] name; public int compare(int record) throws CoreException { - PDOMNamedNode node = ((PDOMNamedNode)pdom.getLinkage(record).getNode(record)); + PDOMNamedNode node = ((PDOMNamedNode)linkage.getNode(record)); return node.getDBName().compare(name); } @@ -37,8 +36,8 @@ public final class FindBindingsInBTree implements IBTreeVisitor { * @param pdom * @param name */ - public FindBindingsInBTree(PDOM pdom, char[] name) { - this(pdom, name, null); + public FindBindingsInBTree(PDOMLinkage linkage, char[] name) { + this(linkage, name, null); } /** @@ -48,8 +47,8 @@ public final class FindBindingsInBTree implements IBTreeVisitor { * @param name * @param desiredType */ - public FindBindingsInBTree(PDOM pdom, char[] name, int desiredType) { - this(pdom, name, new int[] { desiredType }); + public FindBindingsInBTree(PDOMLinkage linkage, char[] name, int desiredType) { + this(linkage, name, new int[] { desiredType }); } /** @@ -59,17 +58,17 @@ public final class FindBindingsInBTree implements IBTreeVisitor { * @param name * @param desiredType */ - public FindBindingsInBTree(PDOM pdom, char[] name, int[] desiredType) { - this.pdom = pdom; + public FindBindingsInBTree(PDOMLinkage linkage, char[] name, int[] desiredType) { this.name = name; this.desiredType = desiredType; + this.linkage= linkage; } public boolean visit(int record) throws CoreException { if (record == 0) return true; - PDOMBinding tBinding = pdom.getBinding(record); + PDOMBinding tBinding = linkage.getPDOM().getBinding(record); if (!tBinding.hasName(name)) // no more bindings with our desired name return false; 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 1d94c633879..88b0d4c5133 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 @@ -135,7 +135,9 @@ class PDOMCLinkage extends PDOMLinkage { } else if (binding instanceof ITypedef) pdomBinding = new PDOMCTypedef(pdom, parent, name, (ITypedef)binding); - parent.addChild(pdomBinding); + if(pdomBinding!=null) { + parent.addChild(pdomBinding); + } } if (pdomBinding != null) 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 b8e64b7e750..16477e2f8b1 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 @@ -112,13 +112,12 @@ class PDOMCPPLinkage extends PDOMLinkage { public PDOMBinding addName(IASTName name, PDOMFile file) throws CoreException { if (name == null || name instanceof ICPPASTQualifiedName) return null; - + // Check for null name char[] namechars = name.toCharArray(); if (namechars == null || namechars.length == 0) return null; - IBinding binding = name.resolveBinding(); if (binding == null || binding instanceof IProblemBinding) @@ -144,32 +143,8 @@ class PDOMCPPLinkage extends PDOMLinkage { } else if (binding instanceof CPPImplicitMethod && parent instanceof PDOMCPPClassType) { if(!name.isReference()) { //because we got the implicit method off of an IASTName that is not a reference, - //it is no longer completly implicit and it should be treated as a normal method. + //it is no longer completly implicit and it should be treated as a normal method. pdomBinding = new PDOMCPPMethod(pdom, parent, name); - } else if (binding instanceof CPPImplicitMethod && parent instanceof PDOMCPPClassType) { - if(!name.isReference()) { - //because we got the implicit method off of an IASTName that is not a reference, - //it is no longer completly implicit and it should be treated as a normal method. - pdomBinding = new PDOMCPPMethod(pdom, parent, name); - } - } else if (binding instanceof ICPPFunction) { - pdomBinding = new PDOMCPPFunction(pdom, parent, name); - } else if (binding instanceof ICPPClassType) { - pdomBinding = new PDOMCPPClassType(pdom, parent, name); - } else if (binding instanceof ICPPNamespaceAlias) { - pdomBinding = new PDOMCPPNamespaceAlias(pdom, parent, name); - } else if (binding instanceof ICPPNamespace) { - pdomBinding = new PDOMCPPNamespace(pdom, parent, name); - } else if (binding instanceof IEnumeration) { - pdomBinding = new PDOMCPPEnumeration(pdom, parent, name); - } else if (binding instanceof IEnumerator) { - IEnumeration enumeration = (IEnumeration)((IEnumerator)binding).getType(); - PDOMBinding pdomEnumeration = adaptBinding(enumeration); - 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); } } else if (binding instanceof ICPPFunction) { pdomBinding = new PDOMCPPFunction(pdom, parent, name); @@ -190,7 +165,10 @@ class PDOMCPPLinkage extends PDOMLinkage { } else if (binding instanceof ITypedef) { pdomBinding = new PDOMCPPTypedef(pdom, parent, name, (ITypedef)binding); } - parent.addChild(pdomBinding); + + if(pdomBinding!=null) { + parent.addChild(pdomBinding); + } } } } catch(DOMException e) { @@ -296,7 +274,7 @@ class PDOMCPPLinkage extends PDOMLinkage { throw new CoreException(Util.createStatus(e)); } } - + private PDOMBinding _resolveBinding(IASTName name) throws CoreException, DOMException { // mstodo revisit IBinding origBinding = name.getBinding(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java index 127d7547779..01ae69fd6a2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPNamespace.java @@ -102,7 +102,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding public IBinding[] find(String name) throws DOMException { try { - FindBindingsInBTree visitor = new FindBindingsInBTree(pdom, name.toCharArray()); + FindBindingsInBTree visitor = new FindBindingsInBTree(getLinkageImpl(), name.toCharArray()); getIndex().accept(visitor); return visitor.getBinding(); } catch (CoreException e) { @@ -133,7 +133,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding return null; // Look up the name - FindBindingsInBTree visitor = new FindBindingsInBTree(pdom, name.toCharArray(), + FindBindingsInBTree visitor = new FindBindingsInBTree(getLinkageImpl(), name.toCharArray(), new int[] { PDOMCPPLinkage.CPPCLASSTYPE, PDOMCPPLinkage.CPPNAMESPACE, @@ -160,7 +160,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding getIndex().accept(feb); return feb.getResult(); } else { - FindBindingsInBTree visitor = new FindBindingsInBTree(pdom, name.toCharArray(), + FindBindingsInBTree visitor = new FindBindingsInBTree(getLinkageImpl(), name.toCharArray(), (name.getParent() instanceof ICPPASTQualifiedName && ((ICPPASTQualifiedName)name.getParent()).getLastName() != name) ? PDOMCPPLinkage.CPPNAMESPACE : PDOMCPPLinkage.CPPVARIABLE); @@ -171,7 +171,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding : null; } } else if (parent instanceof IASTNamedTypeSpecifier) { - FindBindingsInBTree visitor = new FindBindingsInBTree(pdom, name.toCharArray(), PDOMCPPLinkage.CPPCLASSTYPE); + FindBindingsInBTree visitor = new FindBindingsInBTree(getLinkageImpl(), name.toCharArray(), PDOMCPPLinkage.CPPCLASSTYPE); getIndex().accept(visitor); IBinding[] bindings = visitor.getBinding(); return bindings.length > 0