diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionBugs.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionBugs.java index fc91c3139f9..627c528bc62 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionBugs.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexBindingResolutionBugs.java @@ -16,8 +16,12 @@ import junit.framework.TestSuite; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable; +import org.eclipse.cdt.core.parser.util.ObjectMap; /** * For testing PDOM binding resolution @@ -161,6 +165,27 @@ public class IndexBindingResolutionBugs extends IndexBindingResolutionTestBase { IScope scope= binding.getScope(); } + // template + // class A {}; + + // template<> + // class A {}; + public void testBug180784() throws Exception { + IBinding b0= getBindingFromASTName("A {};", 20); + assertInstance(b0, ICPPSpecialization.class); + ICPPSpecialization s= (ICPPSpecialization) b0; + ObjectMap map= s.getArgumentMap(); + IBinding b1= s.getSpecializedBinding(); + assertInstance(b1, ICPPClassTemplate.class); + ICPPClassTemplate t= (ICPPClassTemplate) b1; + ICPPTemplateParameter[] ps = t.getTemplateParameters(); + assertNotNull(ps); + assertEquals(3, ps.length); + assertNotNull(map.get(ps[0])); + assertNotNull(map.get(ps[1])); + assertNotNull(map.get(ps[2])); + } + // class A{}; // // template diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/CompositeIndexBinding.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/CompositeIndexBinding.java index a82025c0434..ed617a2ccd0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/CompositeIndexBinding.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/CompositeIndexBinding.java @@ -100,4 +100,8 @@ public abstract class CompositeIndexBinding implements IIndexBinding { return super.equals(obj); } + + public int hashCode() { + return rbinding.hashCode(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java index 1f15ed04d1c..125de3f5add 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMNode.java @@ -77,6 +77,10 @@ public abstract class PDOMNode implements IPDOMNode { return super.equals(obj); } + public int hashCode() { + return 31 * pdom.getPath().hashCode() + 41 * record; + } + public void accept(IPDOMVisitor visitor) throws CoreException { // No children here. }