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:
parent
c8d02717aa
commit
9f420bc917
2 changed files with 16 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue