Example usage for org.objectweb.asm MethodVisitor visitAnnotation

List of usage examples for org.objectweb.asm MethodVisitor visitAnnotation

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitAnnotation.

Prototype

public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible) 

Source Link

Document

Visits an annotation of this method.

Usage

From source file:org.spongepowered.mod.asm.util.ASMEventListenerHolderFactory.java

License:MIT License

public static Class<?> getClass(Class<?> eventClass, EventPriority priority, boolean canceled) {
    ClassWriter cwRaw = new ClassWriter(0);
    CheckClassAdapter cw = new CheckClassAdapter(cwRaw);

    MethodVisitor mv;
    AnnotationVisitor av0;/*from w  w  w. j a  v  a  2s  .  c  o  m*/

    String className = getClassName(eventClass, priority, canceled);
    String classNameInternal = className.replace('.', '/');

    String invokeMethodDesc = "(" + Type.getDescriptor(eventClass) + ")V";

    String eventPriorityName = priority.name();

    cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, classNameInternal, null,
            "org/spongepowered/mod/event/EventListenerHolder", null);

    cw.visitInnerClass("net/minecraftforge/event/world/BlockEvent$BreakEvent",
            "net/minecraftforge/event/world/BlockEvent", "BreakEvent", ACC_PUBLIC + ACC_STATIC);

    {
        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
        mv.visitCode();
        mv.visitVarInsn(ALOAD, 0);
        mv.visitMethodInsn(INVOKESPECIAL, "org/spongepowered/mod/event/EventListenerHolder", "<init>", "()V",
                false);
        mv.visitInsn(RETURN);
        mv.visitMaxs(1, 1);
        mv.visitEnd();
    }
    {
        mv = cw.visitMethod(ACC_PUBLIC, "invoke", invokeMethodDesc, null, null);
        {
            av0 = mv.visitAnnotation("Lnet/minecraftforge/fml/common/eventhandler/SubscribeEvent;", true);
            av0.visitEnum("priority", "Lnet/minecraftforge/fml/common/eventhandler/EventPriority;",
                    eventPriorityName);
            av0.visit("receiveCanceled", canceled);
            av0.visitEnd();
        }
        mv.visitCode();
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ALOAD, 1);
        mv.visitMethodInsn(INVOKESPECIAL, "org/spongepowered/mod/event/EventListenerHolder", "invoke",
                "(Ljava/lang/Object;)V", false);
        mv.visitInsn(RETURN);
        mv.visitMaxs(2, 2);
        mv.visitEnd();
    }
    cw.visitEnd();

    if (loaderAccess == null) {
        loaderAccess = new ClassLoaderAccess();
    }
    return loaderAccess.defineClass(className, cwRaw.toByteArray());
}

From source file:org.springframework.migrationanalyzer.contributions.bytecode.DelegatingMethodVisitor.java

License:Apache License

@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
    Set<AnnotationVisitor> delegateVisitors = new HashSet<AnnotationVisitor>();

    for (MethodVisitor delegate : this.delegates) {
        AnnotationVisitor delegateAnnotationVisitor = delegate.visitAnnotation(desc, visible);
        if (delegateAnnotationVisitor != null) {
            delegateVisitors.add(delegateAnnotationVisitor);
        }//from   www  .j  ava  2  s.  c  o m
    }

    delegateVisitors.add(this.annotationVisitor);

    return new DelegatingAnnotationVisitor(delegateVisitors);
}

From source file:org.teiid.jboss.rest.RestASMBasedWebArchiveBuilder.java

License:Open Source License

private void buildRestService(String vdbName, int vdbVersion, String modelName, Procedure procedure,
        String method, String uri, ClassWriter cw, String contentType, String charSet,
        boolean passthroughAuth) {

    List<ProcedureParameter> params = new ArrayList<ProcedureParameter>(procedure.getParameters().size());
    boolean usingReturn = false;
    boolean hasLobInput = false;
    for (ProcedureParameter p : procedure.getParameters()) {
        if (p.getType() == Type.In || p.getType() == Type.InOut) {
            params.add(p);/*from  w w  w  .j ava2s  .  c  o  m*/
        } else if (p.getType() == Type.ReturnValue && procedure.getResultSet() == null) {
            usingReturn = true;
        }
        if (!hasLobInput) {
            String runtimeType = p.getRuntimeType();
            hasLobInput = DataTypeManager.isLOB(runtimeType);
        }
    }
    int paramsSize = params.size();
    MethodVisitor mv;

    boolean useMultipart = false;
    if (method.toUpperCase().equals("POST") && hasLobInput) {
        useMultipart = true;
    }

    AnnotationVisitor av0;
    {

        StringBuilder paramSignature = new StringBuilder();
        paramSignature.append("(");
        for (int i = 0; i < paramsSize; i++) {
            paramSignature.append("Ljava/lang/String;");
        }
        paramSignature.append(")");

        if (useMultipart) {
            mv = cw.visitMethod(ACC_PUBLIC, procedure.getName() + contentType.replace('/', '_'),
                    "(Lorg/jboss/resteasy/plugins/providers/multipart/MultipartFormDataInput;)Ljavax/ws/rs/core/StreamingOutput;",
                    null, new String[] { "javax/ws/rs/WebApplicationException" });
        } else {
            mv = cw.visitMethod(ACC_PUBLIC, procedure.getName() + contentType.replace('/', '_'),
                    paramSignature + "Ljavax/ws/rs/core/StreamingOutput;", null,
                    new String[] { "javax/ws/rs/WebApplicationException" });
        }
        {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/Produces;", true);
            {
                AnnotationVisitor av1 = av0.visitArray("value");
                av1.visit(null, contentType);
                av1.visitEnd();
            }
            av0.visitEnd();
        }
        {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/" + method.toUpperCase() + ";", true);
            av0.visitEnd();
        }
        {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/Path;", true);
            av0.visit("value", uri);
            av0.visitEnd();
        }
        {
            av0 = mv.visitAnnotation("Ljavax/annotation/security/PermitAll;", true);
            av0.visitEnd();
        }

        if (useMultipart) {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/Consumes;", true);
            {
                AnnotationVisitor av1 = av0.visitArray("value");
                av1.visit(null, "multipart/form-data");
                av1.visitEnd();
            }
            av0.visitEnd();
        }

        if (!useMultipart) {
            // post only accepts Form inputs, not path params
            HashSet<String> pathParms = getPathParameters(uri);
            for (int i = 0; i < paramsSize; i++) {
                String paramType = "Ljavax/ws/rs/FormParam;";
                if (method.toUpperCase().equals("GET")) {
                    paramType = "Ljavax/ws/rs/QueryParam;";
                }
                if (pathParms.contains(params.get(i).getName())) {
                    paramType = "Ljavax/ws/rs/PathParam;";
                }

                av0 = mv.visitParameterAnnotation(i, paramType, true);
                av0.visit("value", params.get(i).getName());
                av0.visitEnd();
            }
        }

        mv.visitCode();
        Label l0 = new Label();
        Label l1 = new Label();
        Label l2 = new Label();
        mv.visitTryCatchBlock(l0, l1, l2, "java/sql/SQLException");
        mv.visitLabel(l0);

        if (!useMultipart) {
            mv.visitTypeInsn(NEW, "java/util/LinkedHashMap");
            mv.visitInsn(DUP);
            mv.visitMethodInsn(INVOKESPECIAL, "java/util/LinkedHashMap", "<init>", "()V");

            mv.visitVarInsn(ASTORE, paramsSize + 1);
            for (int i = 0; i < paramsSize; i++) {
                mv.visitVarInsn(ALOAD, paramsSize + 1);
                mv.visitLdcInsn(params.get(i).getName());
                mv.visitVarInsn(ALOAD, i + 1);
                mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Map", "put",
                        "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
                mv.visitInsn(POP);
            }
            mv.visitVarInsn(ALOAD, 0);
            mv.visitLdcInsn(vdbName);
            mv.visitIntInsn(BIPUSH, vdbVersion);

            mv.visitLdcInsn(procedure.getSQLString());

            mv.visitVarInsn(ALOAD, paramsSize + 1);
            mv.visitLdcInsn(charSet == null ? "" : charSet);
            mv.visitInsn(passthroughAuth ? ICONST_1 : ICONST_0);
            mv.visitInsn(usingReturn ? ICONST_1 : ICONST_0);
            mv.visitMethodInsn(INVOKEVIRTUAL, "org/teiid/jboss/rest/" + modelName, "execute",
                    "(Ljava/lang/String;ILjava/lang/String;Ljava/util/LinkedHashMap;Ljava/lang/String;ZZ)Ljavax/ws/rs/core/StreamingOutput;");
            mv.visitLabel(l1);
            mv.visitInsn(ARETURN);
            mv.visitLabel(l2);
            mv.visitFrame(F_SAME1, 0, null, 1, new Object[] { "java/sql/SQLException" });
            mv.visitVarInsn(ASTORE, paramsSize + 1);
            mv.visitTypeInsn(NEW, "javax/ws/rs/WebApplicationException");
            mv.visitInsn(DUP);
            mv.visitVarInsn(ALOAD, paramsSize + 1);
            mv.visitFieldInsn(GETSTATIC, "javax/ws/rs/core/Response$Status", "INTERNAL_SERVER_ERROR",
                    "Ljavax/ws/rs/core/Response$Status;");
            mv.visitMethodInsn(INVOKESPECIAL, "javax/ws/rs/WebApplicationException", "<init>",
                    "(Ljava/lang/Throwable;Ljavax/ws/rs/core/Response$Status;)V");
            mv.visitInsn(ATHROW);
            mv.visitMaxs(7, paramsSize + 2);
            mv.visitEnd();
        } else {
            mv.visitVarInsn(ALOAD, 0);
            mv.visitLdcInsn(vdbName);
            mv.visitIntInsn(BIPUSH, vdbVersion);
            mv.visitLdcInsn(procedure.getSQLString());
            mv.visitVarInsn(ALOAD, 1);
            mv.visitLdcInsn(charSet == null ? "" : charSet);
            mv.visitInsn(passthroughAuth ? ICONST_1 : ICONST_0);
            mv.visitInsn(usingReturn ? ICONST_1 : ICONST_0);
            mv.visitMethodInsn(INVOKEVIRTUAL, "org/teiid/jboss/rest/" + modelName, "executePost",
                    "(Ljava/lang/String;ILjava/lang/String;Lorg/jboss/resteasy/plugins/providers/multipart/MultipartFormDataInput;Ljava/lang/String;ZZ)Ljavax/ws/rs/core/StreamingOutput;");
            mv.visitLabel(l1);
            mv.visitInsn(ARETURN);
            mv.visitLabel(l2);
            mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/sql/SQLException" });
            mv.visitVarInsn(ASTORE, 2);
            mv.visitTypeInsn(NEW, "javax/ws/rs/WebApplicationException");
            mv.visitInsn(DUP);
            mv.visitVarInsn(ALOAD, 2);
            mv.visitFieldInsn(GETSTATIC, "javax/ws/rs/core/Response$Status", "INTERNAL_SERVER_ERROR",
                    "Ljavax/ws/rs/core/Response$Status;");
            mv.visitMethodInsn(INVOKESPECIAL, "javax/ws/rs/WebApplicationException", "<init>",
                    "(Ljava/lang/Throwable;Ljavax/ws/rs/core/Response$Status;)V");
            mv.visitInsn(ATHROW);
            mv.visitMaxs(8, 3);
            mv.visitEnd();
        }
    }
}

From source file:org.teiid.jboss.rest.RestASMBasedWebArchiveBuilder.java

License:Open Source License

private void buildQueryProcedure(String vdbName, int vdbVersion, String modelName, String context,
        ClassWriter cw, boolean passthroughAuth) {
    MethodVisitor mv;
    {//from  ww  w  .j  ava  2s .c  o  m
        AnnotationVisitor av0;
        mv = cw.visitMethod(ACC_PUBLIC, "sqlQuery" + context,
                "(Ljava/lang/String;)Ljavax/ws/rs/core/StreamingOutput;", null, null);
        {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/Produces;", true);
            {
                AnnotationVisitor av1 = av0.visitArray("value");
                av1.visit(null, "application/" + context);
                av1.visitEnd();
            }
            av0.visitEnd();
        }
        {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/POST;", true);
            av0.visitEnd();
        }
        {
            av0 = mv.visitAnnotation("Ljavax/ws/rs/Path;", true);
            av0.visit("value", "/query");
            av0.visitEnd();
        }
        {
            av0 = mv.visitParameterAnnotation(0, "Ljavax/ws/rs/FormParam;", true);
            av0.visit("value", "sql");
            av0.visitEnd();
        }
        mv.visitCode();
        Label l0 = new Label();
        Label l1 = new Label();
        Label l2 = new Label();
        mv.visitTryCatchBlock(l0, l1, l2, "java/sql/SQLException");
        mv.visitLabel(l0);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitLdcInsn(vdbName);
        mv.visitIntInsn(BIPUSH, vdbVersion);
        mv.visitVarInsn(ALOAD, 1);
        mv.visitInsn(context.equals("xml") ? ICONST_0 : ICONST_1);
        mv.visitInsn(passthroughAuth ? ICONST_1 : ICONST_0);
        mv.visitMethodInsn(INVOKEVIRTUAL, "org/teiid/jboss/rest/" + modelName, "executeQuery",
                "(Ljava/lang/String;ILjava/lang/String;ZZ)Ljavax/ws/rs/core/StreamingOutput;");
        mv.visitLabel(l1);
        mv.visitInsn(ARETURN);
        mv.visitLabel(l2);
        mv.visitFrame(F_SAME1, 0, null, 1, new Object[] { "java/sql/SQLException" });
        mv.visitVarInsn(ASTORE, 2);
        mv.visitTypeInsn(NEW, "javax/ws/rs/WebApplicationException");
        mv.visitInsn(DUP);
        mv.visitVarInsn(ALOAD, 2);
        mv.visitFieldInsn(GETSTATIC, "javax/ws/rs/core/Response$Status", "INTERNAL_SERVER_ERROR",
                "Ljavax/ws/rs/core/Response$Status;");
        mv.visitMethodInsn(INVOKESPECIAL, "javax/ws/rs/WebApplicationException", "<init>",
                "(Ljava/lang/Throwable;Ljavax/ws/rs/core/Response$Status;)V");
        mv.visitInsn(ATHROW);
        mv.visitMaxs(6, 3);
        mv.visitEnd();
    }
}

From source file:org.wrml.runtime.schema.generator.SchemaGenerator.java

License:Apache License

private void visitAnnotation(final JavaBytecodeAnnotation annotation, final ClassVisitor classVisitor,
        final MethodVisitor methodVisitor, final AnnotationVisitor parentAnnotationVisitor,
        final String parentAnnotationValueName) {

    final String descriptor = annotation.getDescriptor();

    final AnnotationVisitor annotationVisitor;
    if (parentAnnotationVisitor != null) {
        annotationVisitor = parentAnnotationVisitor.visitAnnotation(parentAnnotationValueName, descriptor);
    } else if (methodVisitor != null) {
        annotationVisitor = methodVisitor.visitAnnotation(descriptor, true);
    } else {/*from  w ww. j  a  v a  2s.c  o  m*/
        annotationVisitor = classVisitor.visitAnnotation(descriptor, true);
    }

    for (final String name : annotation.getAttributeNames()) {
        final Object value = annotation.getAttributeValue(name);
        if (name != null && value != null) {
            if (value instanceof Object[]) {
                final AnnotationVisitor arrayValueVisitor = annotationVisitor.visitArray(name);
                final Object[] array = (Object[]) value;
                for (final Object element : array) {
                    if (element instanceof Enum) {
                        final String enumDescriptor = new JavaBytecodeType(element.getClass()).getDescriptor();
                        final String enumValueString = ((Enum) element).name();
                        arrayValueVisitor.visitEnum(null, enumDescriptor, enumValueString);
                    } else if (element instanceof JavaBytecodeAnnotation) {
                        visitAnnotation(((JavaBytecodeAnnotation) element), classVisitor, methodVisitor,
                                arrayValueVisitor, name);
                    } else {
                        arrayValueVisitor.visit(null, element);
                    }
                }
                arrayValueVisitor.visitEnd();
            } else if (value instanceof Enum) {
                final String enumDescriptor = new JavaBytecodeType(value.getClass()).getDescriptor();
                final String enumValueString = ((Enum) value).name();
                annotationVisitor.visitEnum(name, enumDescriptor, enumValueString);
            } else if (value instanceof JavaBytecodeAnnotation) {
                visitAnnotation(((JavaBytecodeAnnotation) value), classVisitor, methodVisitor,
                        annotationVisitor, name);
            } else {
                annotationVisitor.visit(name, value);
            }
        }
    }

    annotationVisitor.visitEnd();
}

From source file:uk.co.unclealex.executable.generator.ScripterImplTest.java

License:Apache License

protected void generateCommandClass(String classPrefixName, boolean reverse, Path targetDirectory)
        throws IOException {
    ClassWriter cw = new ClassWriter(0);
    FieldVisitor fv;// w  w  w .  jav a  2 s.  c o  m
    MethodVisitor mv;

    cw.visit(V1_7, ACC_PUBLIC + ACC_SUPER, "scripter/" + classPrefixName + "Command", null, "java/lang/Object",
            new String[] { "uk/co/unclealex/executable/streams/HasStdout" });
    fv = cw.visitField(ACC_PRIVATE, "stdout", "Ljava/io/PrintStream;", null, null);
    fv.visitEnd();
    mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
    mv.visitInsn(RETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(ACC_PUBLIC, "run", "(Lscripter/" + classPrefixName + "CommandLine;)V", null, null);
    AnnotationVisitor av0 = mv.visitAnnotation("Luk/co/unclealex/executable/Executable;", true);
    av0.visitEnd();
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 1);
    mv.visitMethodInsn(INVOKEINTERFACE, "scripter/" + classPrefixName + "CommandLine", "getArguments",
            "()Ljava/util/List;");
    mv.visitMethodInsn(INVOKESTATIC, "com/google/common/collect/Lists", "newArrayList",
            "(Ljava/lang/Iterable;)Ljava/util/ArrayList;");
    mv.visitVarInsn(ASTORE, 2);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, "scripter/" + classPrefixName + "Command", "reverse", "()Z");
    Label l0 = new Label();
    mv.visitJumpInsn(IFEQ, l0);
    mv.visitVarInsn(ALOAD, 2);
    mv.visitMethodInsn(INVOKESTATIC, "java/util/Collections", "reverse", "(Ljava/util/List;)V");
    mv.visitLabel(l0);
    mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] { "java/util/List" }, 0, null);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, "scripter/" + classPrefixName + "Command", "stdout", "Ljava/io/PrintStream;");
    mv.visitVarInsn(ALOAD, 2);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "print", "(Ljava/lang/Object;)V");
    mv.visitInsn(RETURN);
    mv.visitMaxs(2, 3);
    mv.visitEnd();
    mv = cw.visitMethod(ACC_PROTECTED, "reverse", "()Z", null, null);
    mv.visitCode();
    mv.visitInsn(reverse ? ICONST_1 : ICONST_0);
    mv.visitInsn(IRETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(ACC_PUBLIC, "getStdout", "()Ljava/io/PrintStream;", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitFieldInsn(GETFIELD, "scripter/" + classPrefixName + "Command", "stdout", "Ljava/io/PrintStream;");
    mv.visitInsn(ARETURN);
    mv.visitMaxs(1, 1);
    mv.visitEnd();
    mv = cw.visitMethod(ACC_PUBLIC, "setStdout", "(Ljava/io/PrintStream;)V", null, null);
    mv.visitCode();
    mv.visitVarInsn(ALOAD, 0);
    mv.visitVarInsn(ALOAD, 1);
    mv.visitFieldInsn(PUTFIELD, "scripter/" + classPrefixName + "Command", "stdout", "Ljava/io/PrintStream;");
    mv.visitInsn(RETURN);
    mv.visitMaxs(2, 2);
    mv.visitEnd();
    cw.visitEnd();

    Files.write(targetDirectory.resolve(classPrefixName + "Command.class"), cw.toByteArray());
}

From source file:uk.co.unclealex.executable.generator.ScripterImplTest.java

License:Apache License

protected void generateCommandLineClass(String classPrefixName, String commandName, Path targetDirectory)
        throws IOException {
    ClassWriter cw = new ClassWriter(0);
    MethodVisitor mv;
    AnnotationVisitor av0;/*from w w w. j  ava2s. c  om*/

    cw.visit(V1_7, ACC_ABSTRACT + ACC_INTERFACE, "scripter/" + classPrefixName + "CommandLine", null,
            "java/lang/Object", null);

    av0 = cw.visitAnnotation("Lcom/lexicalscope/jewel/cli/CommandLineInterface;", true);
    av0.visit("application", commandName);
    av0.visitEnd();
    mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "getArguments", "()Ljava/util/List;",
            "()Ljava/util/List<Ljava/lang/String;>;", null);
    av0 = mv.visitAnnotation("Lcom/lexicalscope/jewel/cli/Unparsed;", true);
    av0.visitEnd();
    mv.visitEnd();
    cw.visitEnd();

    Files.write(targetDirectory.resolve(classPrefixName + "CommandLine.class"), cw.toByteArray());
}