From 9f420bc917d64b759167f39f2d956f870a97cc68 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 15 May 2008 12:05:26 +0000 Subject: [PATCH] Fixes CPPFindBinding.findBinding(...) for specializations of class templates. --- .../internal/core/pdom/dom/cpp/CPPFindBinding.java | 13 +++++++++++-- .../core/pdom/dom/cpp/PDOMCPPClassTemplate.java | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPFindBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPFindBinding.java index 11ec3fa9086..31bc53a1240 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPFindBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/CPPFindBinding.java @@ -103,11 +103,16 @@ public class CPPFindBinding extends FindBinding { } - public static PDOMBinding findBinding(PDOMNode node, PDOM pdom, char[]name, int constant, int sigHash, int localToFileRec) + public static PDOMBinding findBinding(PDOMNode node, PDOM pdom, char[]name, int constant, int sigHash, int localToFileRec, boolean searchSpecializations) throws CoreException { CPPFindBindingVisitor visitor= new CPPFindBindingVisitor(pdom, name, constant, sigHash, localToFileRec); try { node.accept(visitor); + if (searchSpecializations && visitor.getResult() == null) { + if (node instanceof PDOMCPPClassTemplate) { + ((PDOMCPPClassTemplate) node).specializationsAccept(visitor); + } + } } catch(OperationCanceledException ce) { } return visitor.getResult(); @@ -127,13 +132,17 @@ public class CPPFindBinding extends FindBinding { } public static PDOMBinding findBinding(PDOMNode node, PDOMLinkage linkage, IBinding binding, int localToFileRec) throws CoreException { + return findBinding(node, linkage, binding, localToFileRec, false); + } + + public static PDOMBinding findBinding(PDOMNode node, PDOMLinkage linkage, IBinding binding, int localToFileRec, boolean searchSpecializations) throws CoreException { Integer hash = null; try { hash = IndexCPPSignatureUtil.getSignatureHash(binding); } catch (DOMException e) { } if(hash != null) { - return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), linkage.getBindingType(binding), hash.intValue(), localToFileRec); + return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), linkage.getBindingType(binding), hash.intValue(), localToFileRec, searchSpecializations); } return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), new int[] {linkage.getBindingType(binding)}, localToFileRec); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java index 4408286c240..9fdcb720c7c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPClassTemplate.java @@ -222,6 +222,11 @@ class PDOMCPPClassTemplate extends PDOMCPPClassType list = new PDOMNodeLinkedList(pdom, record + INSTANCES, getLinkageImpl()); list.accept(visitor); } + + public void specializationsAccept(IPDOMVisitor visitor) throws CoreException { + PDOMNodeLinkedList list= new PDOMNodeLinkedList(pdom, record + SPECIALIZATIONS, getLinkageImpl()); + list.accept(visitor); + } @Override public void addMember(PDOMNode member) throws CoreException {