mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Add bindings for specialization to the index only once, bug 207477.
This commit is contained in:
parent
a5e61e2f26
commit
8737024fef
3 changed files with 10 additions and 10 deletions
|
@ -1878,7 +1878,7 @@ public class CPPTemplates {
|
|||
}
|
||||
|
||||
if (argsContainDependentType) {
|
||||
return ((ICPPInternalTemplateInstantiator) template).deferredInstance(map, arguments);
|
||||
return ((ICPPInternalTemplateInstantiator) template).deferredInstance(map, actualArgs);
|
||||
}
|
||||
|
||||
ICPPSpecialization instance = ((ICPPInternalTemplateInstantiator) template).getInstance(actualArgs);
|
||||
|
@ -1898,9 +1898,12 @@ public class CPPTemplates {
|
|||
} catch (DOMException e) {
|
||||
return e.getProblem();
|
||||
}
|
||||
instance = (ICPPTemplateInstance) CPPTemplates.createInstance(scope, template, map, arguments);
|
||||
if (template instanceof ICPPInternalTemplate)
|
||||
((ICPPInternalTemplate) template).addSpecialization(arguments, instance);
|
||||
instance = (ICPPTemplateInstance) CPPTemplates.createInstance(scope, template, map, actualArgs);
|
||||
if (template instanceof ICPPInternalTemplate) {
|
||||
final ICPPInternalTemplate internalTmpl = (ICPPInternalTemplate) template;
|
||||
internalTmpl.addSpecialization(arguments, instance);
|
||||
internalTmpl.addSpecialization(actualArgs, instance);
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp;
|
|||
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||
import org.eclipse.cdt.internal.core.index.IndexCPPSignatureUtil;
|
||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||
import org.eclipse.cdt.internal.core.pdom.db.BTree;
|
||||
|
@ -132,17 +133,13 @@ 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, searchSpecializations);
|
||||
return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), linkage.getBindingType(binding), hash.intValue(), localToFileRec, binding instanceof ICPPSpecialization);
|
||||
}
|
||||
return findBinding(node, linkage.getPDOM(), binding.getNameCharArray(), new int[] {linkage.getBindingType(binding)}, localToFileRec);
|
||||
}
|
||||
|
|
|
@ -669,7 +669,7 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
|
|||
}
|
||||
if (parent instanceof IPDOMMemberOwner) {
|
||||
int localToFileRec= getLocalToFileRec(parent, binding);
|
||||
return CPPFindBinding.findBinding(parent, this, binding, localToFileRec, parent instanceof ICPPSpecialization);
|
||||
return CPPFindBinding.findBinding(parent, this, binding, localToFileRec);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue