/** * Contributed by @lmcgrath (https://github.com/qmx/jitescript/pull/13). */ package me.qmx.jitescript; import static me.qmx.jitescript.util.CodegenUtils.ci; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.tree.AnnotationNode; public class AnnotationData { private final AnnotationVisitor node; public AnnotationData(Class<?> type) { this(ci(type)); } public AnnotationData(String desc) { this.node = new AnnotationNode(desc); } private AnnotationData(AnnotationVisitor node) { this.node = node; } public AnnotationNode getNode() { return (AnnotationNode) node; } public AnnotationData value(String name, Object value) { node.visit(name, value); return this; } public AnnotationData enumValue(String name, Enum value) { enumValue(name, ci(value.getClass()), value.name()); return this; } public AnnotationData enumValue(String name, String desc, String value) { node.visitEnum(name, desc, value); return this; } public AnnotationData annotationValue(String name, Class<?> type) { return annotationValue(name, ci(type)); } public AnnotationData annotationValue(String name, String desc) { return new AnnotationData(node.visitAnnotation(name, desc)); } public AnnotationArrayValue arrayValue(String name) { return new AnnotationArrayValue(name, node.visitArray(name)); } public AnnotationArrayValue arrayValue(String name, Object... values) { AnnotationArrayValue array = arrayValue(name); for (Object value : values) { array.add(value); } return array; } }