package net.bytebuddy.description.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class AnnotationDescriptionLatentTest extends AbstractAnnotationDescriptionTest { @SuppressWarnings("unchecked") private static AnnotationDescription build(Annotation annotation) throws Exception { AnnotationDescription.Builder builder = AnnotationDescription.Builder.ofType(annotation.annotationType()); for (Method method : annotation.annotationType().getDeclaredMethods()) { Object value = method.invoke(annotation); if (value instanceof Annotation) { builder = builder.define(method.getName(), (Annotation) value); } else if (value instanceof Annotation[]) { builder = builder.defineAnnotationArray(method.getName(), (Class) method.getReturnType().getComponentType(), (Annotation[]) value); } else if (value instanceof Enum<?>) { builder = builder.define(method.getName(), (Enum<?>) value); } else if (value instanceof Enum<?>[]) { builder = builder.defineEnumerationArray(method.getName(), (Class) method.getReturnType().getComponentType(), (Enum[]) value); } else if (value instanceof Class<?>) { builder = builder.define(method.getName(), (Class<?>) value); } else if (value instanceof Class<?>[]) { builder = builder.defineTypeArray(method.getName(), (Class<?>[]) value); } else if (value instanceof String) { builder = builder.define(method.getName(), (String) value); } else if (value instanceof String[]) { builder = builder.defineArray(method.getName(), (String[]) value); } else if (value instanceof Boolean) { builder = builder.define(method.getName(), (Boolean) value); } else if (value instanceof Byte) { builder = builder.define(method.getName(), (Byte) value); } else if (value instanceof Character) { builder = builder.define(method.getName(), (Character) value); } else if (value instanceof Short) { builder = builder.define(method.getName(), (Short) value); } else if (value instanceof Integer) { builder = builder.define(method.getName(), (Integer) value); } else if (value instanceof Long) { builder = builder.define(method.getName(), (Long) value); } else if (value instanceof Float) { builder = builder.define(method.getName(), (Float) value); } else if (value instanceof Double) { builder = builder.define(method.getName(), (Double) value); } else if (value instanceof boolean[]) { builder = builder.defineArray(method.getName(), (boolean[]) value); } else if (value instanceof byte[]) { builder = builder.defineArray(method.getName(), (byte[]) value); } else if (value instanceof char[]) { builder = builder.defineArray(method.getName(), (char[]) value); } else if (value instanceof short[]) { builder = builder.defineArray(method.getName(), (short[]) value); } else if (value instanceof int[]) { builder = builder.defineArray(method.getName(), (int[]) value); } else if (value instanceof long[]) { builder = builder.defineArray(method.getName(), (long[]) value); } else if (value instanceof float[]) { builder = builder.defineArray(method.getName(), (float[]) value); } else if (value instanceof double[]) { builder = builder.defineArray(method.getName(), (double[]) value); } else { throw new IllegalArgumentException("Cannot handle: " + method); } } return builder.build(); } @Override protected AnnotationDescription describe(Annotation annotation, Class<?> declaringType) { try { return build(annotation); } catch (Exception exception) { throw new AssertionError(exception); } } }