Example usage for org.objectweb.asm.tree MethodNode visitParameterAnnotation

List of usage examples for org.objectweb.asm.tree MethodNode visitParameterAnnotation

Introduction

In this page you can find the example usage for org.objectweb.asm.tree MethodNode visitParameterAnnotation.

Prototype

@Override
    @SuppressWarnings("unchecked")
    public AnnotationVisitor visitParameterAnnotation(final int parameter, final String descriptor,
            final boolean visible) 

Source Link

Usage

From source file:pxb.android.dex2jar.v3.V3MethodAdapter.java

License:Apache License

private void build() {
    List<String> exceptions = new ArrayList<String>();
    String signature = null;// w  w w  . jav a2  s .  co  m
    for (Iterator<Ann> it = anns.iterator(); it.hasNext();) {
        Ann ann = it.next();
        if ("Ldalvik/annotation/Throws;".equals(ann.type)) {
            it.remove();
            for (Item item : ann.items) {
                if (item.name.equals("value")) {
                    Ann values = (Ann) item.value;
                    for (Item i : values.items) {
                        exceptions.add(i.value.toString());
                    }
                }
            }
        } else if ("Ldalvik/annotation/Signature;".equals(ann.type)) {
            it.remove();
            for (Item item : ann.items) {
                if (item.name.equals("value")) {
                    Ann values = (Ann) item.value;
                    StringBuilder sb = new StringBuilder();
                    for (Item i : values.items) {
                        sb.append(i.value.toString());
                    }
                    signature = sb.toString();
                }
            }
        }
    }

    MethodNode methodNode = this.methodNode;
    methodNode.access = method.getAccessFlags();
    methodNode.name = method.getName();
    methodNode.desc = method.getType().getDesc();
    methodNode.signature = signature;
    methodNode.exceptions = exceptions;
    for (Ann ann : anns) {
        AnnotationVisitor av = methodNode.visitAnnotation(ann.type, ann.visible);
        V3AnnAdapter.accept(ann.items, av);
        av.visitEnd();
    }

    for (int i = 0; i < paramAnns.length; i++) {
        for (Ann ann : paramAnns[i]) {
            AnnotationVisitor av = methodNode.visitParameterAnnotation(i, ann.type, ann.visible);
            V3AnnAdapter.accept(ann.items, av);
            av.visitEnd();
        }
    }
}