String componentClassName = getClassName();
String name = ClassFabUtils.generateClassName("Instantiator");
ClassFab cf = classFactory.newClass(name, AbstractInstantiator.class);
Object[] componentConstructorArgs = constructorArgs.toArray(new Object[constructorArgs.size()]);
cf.addConstructor(new Class[]
{ ComponentModel.class, String.class, Object[].class }, null, "super($1, $2, $3);");
// Pass $1 (the InternalComponentResources object) and the constructorArgs (from the AbstractIntantiator
// base class) into the new component instance's constructor
cf.addMethod(Modifier.PUBLIC, NEW_INSTANCE_SIGNATURE,
String.format("return new %s($1, constructorArgs);", componentClassName));
Class instantiatorClass = cf.createClass();
try
{
Object instance = instantiatorClass.getConstructors()[0].newInstance(componentModel,
String.format("Instantiator[%s]", componentClassName), componentConstructorArgs);