/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser;
import gw.lang.annotation.Annotations;
import gw.lang.reflect.IConstructorHandler;
import gw.lang.reflect.java.IJavaClassMethod;
import java.lang.annotation.Annotation;
class StandardJavaAnnotationConstructor implements IConstructorHandler {
private final IJavaClassMethod[] methods;
private JavaTypeInfo javaTypeInfo;
public StandardJavaAnnotationConstructor(JavaTypeInfo javaTypeInfo, IJavaClassMethod[] methods) {
this.javaTypeInfo = javaTypeInfo;
this.methods = methods;
}
@Override
public Object newInstance( Object... args )
{
if (!(javaTypeInfo.getAnnotatedElement() instanceof ClassJavaClassInfo)) {
throw new RuntimeException("ClassJavaClassInfo expected but found " + javaTypeInfo.getAnnotatedElement().getClass().getSimpleName());
}
Class<?> javaClass = ((ClassJavaClassInfo) javaTypeInfo.getAnnotatedElement()).getJavaClass();
Annotations.Builder<? extends Annotation> builder = Annotations.builder( (Class) javaClass );
for( int i = 0; i < args.length; i++ )
{
builder.withElement( methods[i].getName(), args[i] );
}
return builder.create();
}
}