diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java index 5c9b574b544..bc3c34e54e5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassTemplate.java @@ -8,6 +8,7 @@ * Contributors: * IBM - Initial API and implementation * Bryan Wilkinson (QNX) + * Markus Schorn (Wind River Systems) *******************************************************************************/ /* * Created on Mar 31, 2005 @@ -72,19 +73,25 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements return ((ICPPClassTemplate)getBinding()).getTemplateParameters(); } public void addSpecialization( IType[] arguments, ICPPSpecialization specialization ) { - ((ICPPInternalTemplate)getBinding()).addSpecialization( arguments, specialization ); + final IBinding binding = getBinding(); + if (binding instanceof ICPPInternalBinding) { + ((ICPPInternalTemplate)binding).addSpecialization( arguments, specialization ); + } } public IBinding instantiate( IType[] arguments ) { - return ((ICPPInternalTemplate)getBinding()).instantiate( arguments ); + return ((ICPPInternalTemplateInstantiator)getBinding()).instantiate( arguments ); } public ICPPSpecialization deferredInstance( IType[] arguments ) { - return ((ICPPInternalTemplate)getBinding()).deferredInstance( arguments ); + return ((ICPPInternalTemplateInstantiator)getBinding()).deferredInstance( arguments ); } public ICPPSpecialization getInstance( IType[] arguments ) { - return ((ICPPInternalTemplate)getBinding()).getInstance( arguments ); + return ((ICPPInternalTemplateInstantiator)getBinding()).getInstance( arguments ); } public void addPartialSpecialization( ICPPClassTemplatePartialSpecialization spec ) { - ((ICPPInternalClassTemplate)getBinding()).addPartialSpecialization( spec ); + final IBinding binding = getBinding(); + if (binding instanceof ICPPInternalClassTemplate) { + ((ICPPInternalClassTemplate)getBinding()).addPartialSpecialization( spec ); + } } } private ICPPClassTemplatePartialSpecialization [] partialSpecializations = null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java index 83a6198d480..13fbdb746c0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionTemplate.java @@ -100,16 +100,19 @@ public class CPPFunctionTemplate extends CPPTemplateDefinition implements ICPPFu return ((ICPPFunctionTemplate)getBinding()).getTemplateParameters(); } public void addSpecialization( IType[] arguments, ICPPSpecialization specialization ) { - ((ICPPInternalTemplate)getBinding()).addSpecialization( arguments, specialization ); + final IBinding binding = getBinding(); + if (binding instanceof ICPPInternalBinding) { + ((ICPPInternalTemplate)getBinding()).addSpecialization( arguments, specialization ); + } } public IBinding instantiate( IType[] arguments ) { - return ((ICPPInternalTemplate)getBinding()).instantiate( arguments ); + return ((ICPPInternalTemplateInstantiator)getBinding()).instantiate( arguments ); } public ICPPSpecialization deferredInstance( IType[] arguments ) { - return ((ICPPInternalTemplate)getBinding()).deferredInstance( arguments ); + return ((ICPPInternalTemplateInstantiator)getBinding()).deferredInstance( arguments ); } public ICPPSpecialization getInstance( IType[] arguments ) { - return ((ICPPInternalTemplate)getBinding()).getInstance( arguments ); + return ((ICPPInternalTemplateInstantiator)getBinding()).getInstance( arguments ); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java index 11d1f29a994..c307c5784bb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java @@ -1542,8 +1542,8 @@ public class CPPTemplates { } } - if( template instanceof ICPPInternalTemplate ){ - return ((ICPPInternalTemplate)template).instantiate( args ); + if( template instanceof ICPPInternalTemplateInstantiator ){ + return ((ICPPInternalTemplateInstantiator)template).instantiate( args ); } return template; }