1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-05 23:35:48 +02:00

Fixes CPPFindBinding.findBinding(...) for specializations of class templates.

This commit is contained in:
Markus Schorn 2008-05-15 12:05:26 +00:00
parent c8d02717aa
commit 9f420bc917
2 changed files with 16 additions and 2 deletions

View file

@ -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 { throws CoreException {
CPPFindBindingVisitor visitor= new CPPFindBindingVisitor(pdom, name, constant, sigHash, localToFileRec); CPPFindBindingVisitor visitor= new CPPFindBindingVisitor(pdom, name, constant, sigHash, localToFileRec);
try { try {
node.accept(visitor); node.accept(visitor);
if (searchSpecializations && visitor.getResult() == null) {
if (node instanceof PDOMCPPClassTemplate) {
((PDOMCPPClassTemplate) node).specializationsAccept(visitor);
}
}
} catch(OperationCanceledException ce) { } catch(OperationCanceledException ce) {
} }
return visitor.getResult(); 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 { 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; Integer hash = null;
try { try {
hash = IndexCPPSignatureUtil.getSignatureHash(binding); hash = IndexCPPSignatureUtil.getSignatureHash(binding);
} catch (DOMException e) { } catch (DOMException e) {
} }
if(hash != null) { 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); return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), new int[] {linkage.getBindingType(binding)}, localToFileRec);
} }

View file

@ -222,6 +222,11 @@ class PDOMCPPClassTemplate extends PDOMCPPClassType
list = new PDOMNodeLinkedList(pdom, record + INSTANCES, getLinkageImpl()); list = new PDOMNodeLinkedList(pdom, record + INSTANCES, getLinkageImpl());
list.accept(visitor); list.accept(visitor);
} }
public void specializationsAccept(IPDOMVisitor visitor) throws CoreException {
PDOMNodeLinkedList list= new PDOMNodeLinkedList(pdom, record + SPECIALIZATIONS, getLinkageImpl());
list.accept(visitor);
}
@Override @Override
public void addMember(PDOMNode member) throws CoreException { public void addMember(PDOMNode member) throws CoreException {