From 3139aa57929a716549a2d70e092e9a80a64806e9 Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Wed, 4 Apr 2007 15:44:08 +0000 Subject: [PATCH] 180948: fix ClassCastException --- .../core/index/composite/cpp/CPPCompositesFactory.java | 10 +++++----- .../core/index/composite/cpp/TemplateInstanceUtil.java | 9 +++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java index f08a30b9ea5..3ea74a9cb27 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/CPPCompositesFactory.java @@ -155,7 +155,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC result = null; } else if (binding instanceof ICPPTemplateDefinition) { if(binding instanceof ICPPClassTemplate) { - return new CompositeCPPClassTemplate(this, (ICPPClassType) binding); + return new CompositeCPPClassTemplate(this, (ICPPClassType) findOneDefinition(binding)); } else if (binding instanceof ICPPFunctionTemplate) { return new CompositeCPPFunctionTemplate(this, (ICPPFunction) binding); } else { @@ -165,7 +165,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC if(binding instanceof ICPPTemplateInstance) { if(binding instanceof ICPPDeferredTemplateInstance) { if(binding instanceof ICPPClassType) { - return new CompositeCPPDeferredClassInstance(this, (ICPPClassType) binding); + return new CompositeCPPDeferredClassInstance(this, (ICPPClassType) findOneDefinition(binding)); } else if(binding instanceof ICPPFunction) { return new CompositeCPPDeferredFunctionInstance(this, (ICPPFunction) binding); } else { @@ -173,7 +173,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC } } else { if(binding instanceof ICPPClassType) { - return new CompositeCPPClassInstance(this, (ICPPClassType) binding); + return new CompositeCPPClassInstance(this, (ICPPClassType) findOneDefinition(binding)); } if(binding instanceof ICPPFunction) { return new CompositeCPPFunctionInstance(this, (ICPPFunction) binding); } else { @@ -185,7 +185,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC if(binding instanceof ICPPClassTemplatePartialSpecialization) { return new CompositeCPPClassTemplatePartialSpecialization(this, (ICPPClassTemplatePartialSpecialization) binding); } else { - return new CompositeCPPClassSpecialization(this, (ICPPClassType) binding); + return new CompositeCPPClassSpecialization(this, (ICPPClassType) findOneDefinition(binding)); } } if(binding instanceof ICPPConstructor) { return new CompositeCPPConstructorSpecialization(this, (ICPPConstructor) binding); @@ -196,7 +196,7 @@ public class CPPCompositesFactory extends AbstractCompositeFactory implements IC } if(binding instanceof ICPPField) { return new CompositeCPPField(this, (ICPPField) binding); } if(binding instanceof ICPPParameter) { - return new CompositeCPPParameter(this, (ICPPParameter) binding); + return new CompositeCPPParameterSpecialization(this, (ICPPParameter) binding); } else { throw new CompositingNotImplementedError("composite binding unavailable for "+binding+" "+binding.getClass()); //$NON-NLS-1$ //$NON-NLS-2$ } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/TemplateInstanceUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/TemplateInstanceUtil.java index 1c5aca31d3e..fb3145d2a43 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/TemplateInstanceUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/composite/cpp/TemplateInstanceUtil.java @@ -34,9 +34,14 @@ public class TemplateInstanceUtil { Object[] keys= preresult.keyArray(); for(int i=0; i