1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Fix for 192182, ClassCastException in template instanciation.

This commit is contained in:
Markus Schorn 2007-06-12 13:28:18 +00:00
parent e9132a0cf8
commit ff7406087e
3 changed files with 21 additions and 11 deletions

View file

@ -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;

View file

@ -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 );
}
}

View file

@ -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;
}