From 5caada25a270e1e701a8b72d6e5dd28f931787e2 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 9 Jan 2006 20:23:03 +0000 Subject: [PATCH] Eliminating use of the adapter in IBinding. I'm not sure that was the right choice since you need context information since a binding can exist in more than one project. --- .../pdom/dom/PDOMBindingAdapterFactory.java | 25 +++++++++++-------- .../core/pdom/dom/c/PDOMCLinkage.java | 4 +-- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 4 +-- 3 files changed, 19 insertions(+), 14 deletions(-) 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 index 35401b4e78b..64f35bbe9fc 100644 --- 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 @@ -13,9 +13,11 @@ 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.PDOM; 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.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.pdom.PDOMDatabase; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterFactory; @@ -32,16 +34,19 @@ public class PDOMBindingAdapterFactory implements IAdapterFactory { try { IBinding binding = (IBinding)adaptableObject; - IScope scope = binding.getScope(); - IPDOM ipdom = scope.getPhysicalNode().getTranslationUnit().getIndex(); - if (ipdom == null) - return null; - PDOMDatabase pdom = (PDOMDatabase)ipdom; + ICProject[] projects = CoreModel.getDefault().getCModel().getCProjects(); + for (int i = 0; i < projects.length; ++i) { + IPDOM ipdom = PDOM.getPDOM(projects[i].getProject()); + + if (ipdom == null || !(ipdom instanceof PDOMDatabase)) + continue; + PDOMDatabase pdom = (PDOMDatabase)ipdom; - for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage()) { - PDOMBinding pdomBinding = linkage.adaptBinding(binding); - if (binding != null) - return pdomBinding; + 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) { 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 8cd7c9cb2c0..bf2cf316c33 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 @@ -56,7 +56,7 @@ public class PDOMCLinkage extends PDOMLinkage { IASTName scopeName = scope.getScopeName(); if (scopeName != null) { IBinding scopeBinding = scopeName.resolveBinding(); - PDOMBinding scopePDOMBinding = (PDOMBinding)scopeBinding.getAdapter(PDOMBinding.class); + PDOMBinding scopePDOMBinding = adaptBinding(scopeBinding); if (scopePDOMBinding != null) parent = scopePDOMBinding; } @@ -73,7 +73,7 @@ public class PDOMCLinkage extends PDOMLinkage { if (binding == null || binding instanceof IProblemBinding) return null; - PDOMBinding pdomBinding = (PDOMBinding)binding.getAdapter(PDOMBinding.class); + PDOMBinding pdomBinding = adaptBinding(binding); if (pdomBinding == null) { PDOMNode parent = getParent(binding); 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 3b1568879c3..6d55a82b320 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 @@ -67,7 +67,7 @@ public class PDOMCPPLinkage extends PDOMLinkage { IASTName scopeName = scope.getScopeName(); if (scopeName != null) { IBinding scopeBinding = scopeName.resolveBinding(); - PDOMBinding scopePDOMBinding = (PDOMBinding)scopeBinding.getAdapter(PDOMBinding.class); + PDOMBinding scopePDOMBinding = adaptBinding(scopeBinding); if (scopePDOMBinding != null) parent = scopePDOMBinding; } @@ -84,7 +84,7 @@ public class PDOMCPPLinkage extends PDOMLinkage { // Can't tell what it is return null; - PDOMBinding pdomBinding = (PDOMBinding)binding.getAdapter(PDOMBinding.class); + PDOMBinding pdomBinding = adaptBinding(binding); if (pdomBinding == null) { PDOMNode parent = getParent(binding);