Example usage for org.objectweb.asm AnnotationVisitor visitArray

List of usage examples for org.objectweb.asm AnnotationVisitor visitArray

Introduction

In this page you can find the example usage for org.objectweb.asm AnnotationVisitor visitArray.

Prototype

public AnnotationVisitor visitArray(final String name) 

Source Link

Document

Visits an array value of the annotation.

Usage

From source file:ch.raffael.contracts.processor.pmap.ParameterMapAnnotationProcessor.java

License:Apache License

private void writeType(AnnotationVisitor annotation, TypeElement element, AnnotationVisitor innerClassArray) {
    AnnotationVisitor methodsArray = annotation.visitArray("methods");
    for (Element elem : element.getEnclosedElements()) {
        String methodName;//from   w  w w .j av a2 s  . co m
        if (elem.getKind() == ElementKind.CONSTRUCTOR) {
            methodName = CTOR_NAME;
        } else if (elem.getKind() == ElementKind.METHOD) {
            methodName = elem.getSimpleName().toString();
        } else {
            continue;
        }
        AnnotationVisitor methodAnnotation = methodsArray.visitAnnotation(null,
                Type.getDescriptor(ParameterMap.Method.class));
        methodAnnotation.visit("descriptor", getMethodDescriptor((ExecutableElement) elem));
        AnnotationVisitor paramNames = methodAnnotation.visitArray("parameterNames");
        for (VariableElement param : ((ExecutableElement) elem).getParameters()) {
            paramNames.visit(null, param.getSimpleName().toString());
        }
        paramNames.visitEnd();
        methodAnnotation.visitEnd();
    }
    methodsArray.visitEnd();
    boolean endInnerClassArray = false;
    if (innerClassArray == null) {
        innerClassArray = annotation.visitArray("innerClasses");
        endInnerClassArray = true;
    }
    for (Element innerElem : element.getEnclosedElements()) {
        if (isType(innerElem)) {
            AnnotationVisitor innerClass = innerClassArray.visitAnnotation(null,
                    Type.getDescriptor(ParameterMap.InnerClass.class));
            innerClass.visit("name", toInternalName(
                    processingEnv.getElementUtils().getBinaryName((TypeElement) innerElem).toString()));
            writeType(innerClass, (TypeElement) innerElem, innerClassArray);
            innerClass.visitEnd();
        }
    }
    if (endInnerClassArray) {
        innerClassArray.visitEnd();
    }
}

From source file:com.facebook.buck.java.abi.AnnotationValueMirror.java

License:Apache License

public void accept(@Nullable String name, AnnotationVisitor visitor) {
    if (primitiveValue != null) {
        visitor.visit(name, primitiveValue);
    } else if (enumValue != null) {
        visitor.visitEnum(name, enumValue.desc, enumValue.value);
    } else if (annotationValue != null) {
        annotationValue.appendTo(visitor, name);
    } else if (arrayValue != null) {
        AnnotationVisitor arrayVisitor = visitor.visitArray(name);

        for (AnnotationValueMirror element : arrayValue) {
            element.accept(null, arrayVisitor);
        }//from  w w w  . jav a 2s.  co  m

        arrayVisitor.visitEnd();
    }
}

From source file:com.facebook.presto.byteCode.AnnotationDefinition.java

License:Apache License

private void visit(AnnotationVisitor visitor, String name, Object value) {
    if (value instanceof AnnotationDefinition) {
        AnnotationDefinition annotation = (AnnotationDefinition) value;
        AnnotationVisitor annotationVisitor = visitor.visitAnnotation(name, annotation.type.getType());
        annotation.visit(annotationVisitor);
    } else if (value instanceof Enum) {
        Enum<?> enumConstant = (Enum<?>) value;
        visitor.visitEnum(name, type(enumConstant.getDeclaringClass()).getClassName(), enumConstant.name());
    } else if (value instanceof ParameterizedType) {
        ParameterizedType parameterizedType = (ParameterizedType) value;
        visitor.visit(name, Type.getType(parameterizedType.getType()));
    } else if (value instanceof Class) {
        Class<?> clazz = (Class<?>) value;
        visitor.visit(name, Type.getType(clazz));
    } else if (value instanceof List) {
        AnnotationVisitor arrayVisitor = visitor.visitArray(name);
        for (Object element : (List<?>) value) {
            visit(arrayVisitor, null, element);
        }//from www .j  a v  a  2s  . co  m
        arrayVisitor.visitEnd();
    } else {
        visitor.visit(name, value);
    }
}

From source file:com.google.code.nanorm.internal.introspect.asm.MapperBuilder.java

License:Apache License

/**
 * Visit annotation property (String, primitive value, class reference or
 * other annotation)//from  w w  w .ja va2  s.  c  o m
 * @param name annotation name
 * @param obj value
 * @param visitor annotation visitar
 */
private static void visitAnnotationProperty(String name, Object obj, AnnotationVisitor visitor) {
    final Class<?> objClass = obj.getClass();
    if (objClass.isArray()) {
        // Array
        final AnnotationVisitor arrayVisitor = visitor.visitArray(name);
        for (Object o : (Object[]) obj) {
            visitAnnotationProperty(name, o, arrayVisitor);
        }
        arrayVisitor.visitEnd();
    } else if (objClass.isEnum()) {
        // Enumeration
        visitor.visitEnum(name, Type.getDescriptor(obj.getClass()), obj.toString());
    } else if (Annotation.class.isAssignableFrom(obj.getClass())) {
        // Nested annotation
        Annotation nested = (Annotation) obj;
        AnnotationVisitor nestedVisitor = visitor.visitAnnotation(name,
                Type.getDescriptor(nested.annotationType()));
        visitAnnotation(nestedVisitor, nested);
    } else if (obj instanceof Class<?>) {
        // Class reference
        visitor.visit(name, Type.getDescriptor((Class<?>) obj));
    } else {
        // String or primitive type
        visitor.visit(name, obj);
    }
}

From source file:com.google.template.soy.jbcsrc.AnnotationRef.java

License:Apache License

/** Writes an array valued field to the annotation visitor. */
private static FieldWriter arrayFieldWriter(final String name) {
    return new FieldWriter() {
        @Override//from ww w. j  a va 2s.  c  o  m
        public void write(AnnotationVisitor visitor, Object value) {
            int len = Array.getLength(value);
            AnnotationVisitor arrayVisitor = visitor.visitArray(name);
            for (int i = 0; i < len; i++) {
                arrayVisitor.visit(null, Array.get(value, i));
            }
            arrayVisitor.visitEnd();
        }
    };
}

From source file:com.google.template.soy.jbcsrc.restricted.AnnotationRef.java

License:Apache License

/** Writes an simple array valued field to the annotation visitor. */
private static FieldWriter simpleArrayFieldWriter(final String name) {
    return new FieldWriter() {
        @Override/*  w w w.j a va2 s  . c om*/
        public void write(AnnotationVisitor visitor, Object value) {
            int len = Array.getLength(value);
            AnnotationVisitor arrayVisitor = visitor.visitArray(name);
            for (int i = 0; i < len; i++) {
                arrayVisitor.visit(null, Array.get(value, i));
            }
            arrayVisitor.visitEnd();
        }
    };
}

From source file:com.google.template.soy.jbcsrc.restricted.AnnotationRef.java

License:Apache License

/** Writes an annotation array valued field to the annotation visitor. */
private static <T extends Annotation> FieldWriter annotationArrayFieldWriter(final String name,
        final AnnotationRef<T> ref) {
    return new FieldWriter() {
        @Override//from   w w  w  .j  av  a2s  .  c o  m
        public void write(AnnotationVisitor visitor, Object value) {
            int len = Array.getLength(value);
            AnnotationVisitor arrayVisitor = visitor.visitArray(name);
            for (int i = 0; i < len; i++) {
                ref.doWrite(ref.annType.cast(Array.get(value, i)),
                        arrayVisitor.visitAnnotation(null, ref.typeDescriptor));
            }
            arrayVisitor.visitEnd();
        }
    };
}

From source file:com.googlecode.ddom.weaver.asm.AnnotationVisitorTee.java

License:Apache License

public AnnotationVisitor visitArray(String name) {
    AnnotationVisitor result = null;/* ww w. ja v  a 2 s .  c o  m*/
    for (AnnotationVisitor visitor : visitors) {
        result = mergeVisitors(result, visitor.visitArray(name));
    }
    return result;
}

From source file:com.googlecode.dex2jar.v3.AnnotationNode.java

License:Apache License

@SuppressWarnings("unchecked")
public static void accept(String name, Object v, AnnotationVisitor av) {
    if (v instanceof AnnotationNode) {
        AnnotationNode a = (AnnotationNode) v;
        AnnotationVisitor av1 = av.visitAnnotation(name, a.type);
        accept(a.items, av1);//w  w  w .  java  2 s . com
        av1.visitEnd();
    } else if (v instanceof Field) {
        Field e = (Field) v;
        av.visitEnum(name, e.getOwner(), e.getName());
    } else if (v instanceof List) {
        List<Object> list = (List<Object>) v;
        AnnotationVisitor av1 = av.visitArray(name);
        for (Object i : list) {
            accept(null, i, av1);
        }
        av1.visitEnd();
    } else if (v instanceof Method) {
        // Method method = (Method) v;
        // AnnotationVisitor av1 = av.visitAnnotation(item.name, "Lcom.googlecode.Method;");
        // av1.visit("owner", method.getOwner());
        // av1.visit("name", method.getName());
        // av1.visit("desc", method.getType().getDesc());
        // av1.visitEnd();
        av.visit(name, v);
    } else if (v instanceof DexType) {
        av.visit(name, ((DexType) v).desc);
    } else {
        av.visit(name, v);
    }
}

From source file:com.googlecode.dex2jar.v3.V3AnnAdapter.java

License:Apache License

public static void accept(List<Item> items, AnnotationVisitor av) {
    if (av == null) {
        return;/*  ww  w. j  a  v a2 s.  c o m*/
    }
    for (Item item : items) {
        Object v = item.value;
        if (v instanceof Annotation) {
            Annotation a = (Annotation) v;
            if (a.type != null) {
                AnnotationVisitor av1 = av.visitAnnotation(item.name, a.type);
                accept(a.items, av1);
                av1.visitEnd();
            } else {// array
                AnnotationVisitor av1 = av.visitArray(item.name);
                accept(a.items, av1);
                av1.visitEnd();
            }
        } else if (v instanceof Field) {
            Field e = (Field) v;
            av.visitEnum(item.name, e.getType(), e.getName());
        } else if (v instanceof Method) {
            // Method method = (Method) v;
            // AnnotationVisitor av1 = av.visitAnnotation(item.name, "Lcom.googlecode.Method;");
            // av1.visit("owner", method.getOwner());
            // av1.visit("name", method.getName());
            // av1.visit("desc", method.getType().getDesc());
            // av1.visitEnd();
            av.visit(item.name, v);
        } else {
            av.visit(item.name, v);
        }
    }
}