}
protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(ClassInfo info, Factory annotation, BeanMetaData beanMetaData) throws Throwable
{
AbstractBeanMetaData bean = checkIfNotAbstractBeanMetaDataSpecific(beanMetaData);
AbstractConstructorMetaData constructor = new AbstractConstructorMetaData();
if (isAttributePresent(annotation.factoryClass()))
{
constructor.setFactoryClass(annotation.factoryClass().getName());
}
else
{
constructor.setFactory(ValueUtil.createValueMetaData(annotation.factory()));
}
constructor.setFactoryMethod(annotation.factoryMethod());
if (annotation.parameters().length > 0)
{
List<ParameterMetaData> parameters = new ArrayList<ParameterMetaData>();
for(Value parameter : annotation.parameters())
{
AbstractParameterMetaData apmd = new AbstractParameterMetaData(ValueUtil.createValueMetaData(parameter));
if (isAttributePresent(parameter.type()))
apmd.setType(parameter.type().getName());
parameters.add(apmd);
}
constructor.setParameters(parameters);
}
bean.setConstructor(constructor);
return Collections.singletonList(constructor);
}