mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 18:26:01 +02:00
Fix for 192182, ClassCastException in template instanciation.
This commit is contained in:
parent
e9132a0cf8
commit
ff7406087e
3 changed files with 21 additions and 11 deletions
|
@ -8,6 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM - Initial API and implementation
|
* IBM - Initial API and implementation
|
||||||
* Bryan Wilkinson (QNX)
|
* Bryan Wilkinson (QNX)
|
||||||
|
* Markus Schorn (Wind River Systems)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
/*
|
/*
|
||||||
* Created on Mar 31, 2005
|
* Created on Mar 31, 2005
|
||||||
|
@ -72,19 +73,25 @@ public class CPPClassTemplate extends CPPTemplateDefinition implements
|
||||||
return ((ICPPClassTemplate)getBinding()).getTemplateParameters();
|
return ((ICPPClassTemplate)getBinding()).getTemplateParameters();
|
||||||
}
|
}
|
||||||
public void addSpecialization( IType[] arguments, ICPPSpecialization specialization ) {
|
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 ) {
|
public IBinding instantiate( IType[] arguments ) {
|
||||||
return ((ICPPInternalTemplate)getBinding()).instantiate( arguments );
|
return ((ICPPInternalTemplateInstantiator)getBinding()).instantiate( arguments );
|
||||||
}
|
}
|
||||||
public ICPPSpecialization deferredInstance( IType[] arguments ) {
|
public ICPPSpecialization deferredInstance( IType[] arguments ) {
|
||||||
return ((ICPPInternalTemplate)getBinding()).deferredInstance( arguments );
|
return ((ICPPInternalTemplateInstantiator)getBinding()).deferredInstance( arguments );
|
||||||
}
|
}
|
||||||
public ICPPSpecialization getInstance( IType[] arguments ) {
|
public ICPPSpecialization getInstance( IType[] arguments ) {
|
||||||
return ((ICPPInternalTemplate)getBinding()).getInstance( arguments );
|
return ((ICPPInternalTemplateInstantiator)getBinding()).getInstance( arguments );
|
||||||
}
|
}
|
||||||
public void addPartialSpecialization( ICPPClassTemplatePartialSpecialization spec ) {
|
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;
|
private ICPPClassTemplatePartialSpecialization [] partialSpecializations = null;
|
||||||
|
|
|
@ -100,16 +100,19 @@ public class CPPFunctionTemplate extends CPPTemplateDefinition implements ICPPFu
|
||||||
return ((ICPPFunctionTemplate)getBinding()).getTemplateParameters();
|
return ((ICPPFunctionTemplate)getBinding()).getTemplateParameters();
|
||||||
}
|
}
|
||||||
public void addSpecialization( IType[] arguments, ICPPSpecialization specialization ) {
|
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 ) {
|
public IBinding instantiate( IType[] arguments ) {
|
||||||
return ((ICPPInternalTemplate)getBinding()).instantiate( arguments );
|
return ((ICPPInternalTemplateInstantiator)getBinding()).instantiate( arguments );
|
||||||
}
|
}
|
||||||
public ICPPSpecialization deferredInstance( IType[] arguments ) {
|
public ICPPSpecialization deferredInstance( IType[] arguments ) {
|
||||||
return ((ICPPInternalTemplate)getBinding()).deferredInstance( arguments );
|
return ((ICPPInternalTemplateInstantiator)getBinding()).deferredInstance( arguments );
|
||||||
}
|
}
|
||||||
public ICPPSpecialization getInstance( IType[] arguments ) {
|
public ICPPSpecialization getInstance( IType[] arguments ) {
|
||||||
return ((ICPPInternalTemplate)getBinding()).getInstance( arguments );
|
return ((ICPPInternalTemplateInstantiator)getBinding()).getInstance( arguments );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1542,8 +1542,8 @@ public class CPPTemplates {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( template instanceof ICPPInternalTemplate ){
|
if( template instanceof ICPPInternalTemplateInstantiator ){
|
||||||
return ((ICPPInternalTemplate)template).instantiate( args );
|
return ((ICPPInternalTemplateInstantiator)template).instantiate( args );
|
||||||
}
|
}
|
||||||
return template;
|
return template;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue