1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-03 14:25:37 +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 {
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);
}

View file

@ -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 {