List of usage examples for org.objectweb.asm MethodVisitor visitAnnotation
public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible)
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()); }