From 8737024fefc574cc6d419353760307150eb19bfb Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 29 May 2008 08:51:48 +0000 Subject: [PATCH] Add bindings for specialization to the index only once, bug 207477. --- .../core/dom/parser/cpp/semantics/CPPTemplates.java | 11 +++++++---- .../internal/core/pdom/dom/cpp/CPPFindBinding.java | 7 ++----- .../internal/core/pdom/dom/cpp/PDOMCPPLinkage.java | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index a8080b175eb..bfa940242ce 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -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; } 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 31bc53a1240..378221fb0e9 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 @@ -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); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index bc6b4542035..20e9b74c67c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -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; }