1package annotations; 2import org.objectweb.asm.*; 3public class ValuesDump implements Opcodes { 4 5public static byte[] dump () throws Exception { 6 7ClassWriter cw = new ClassWriter(false); 8FieldVisitor fv; 9MethodVisitor mv; 10AnnotationVisitor av0; 11 12cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, "annotations/Values", null, "java/lang/Object", null); 13 14cw.visitSource("Values.java", null); 15 16{ 17av0 = cw.visitAnnotation("Lannotations/ValuesAnnotation;", true); 18av0.visit("byteValue", new Byte((byte)1)); 19av0.visit("charValue", new Character((char)65)); 20av0.visit("booleanValue", new Boolean(true)); 21av0.visit("intValue", new Integer(1)); 22av0.visit("shortValue", new Short((short)1)); 23av0.visit("longValue", new Long(1L)); 24av0.visit("floatValue", new Float("1.0")); 25av0.visit("doubleValue", new Double("1.0")); 26av0.visit("stringValue", "A"); 27av0.visitEnum("enumValue", "Lannotations/ValuesEnum;", "ONE"); 28{ 29AnnotationVisitor av1 = av0.visitAnnotation("annotationValue", "Lannotations/ValueAttrAnnotation;"); 30av1.visit("value", "annotation"); 31av1.visitEnd(); 32} 33av0.visit("classValue", Type.getType("Lannotations/Values;")); 34av0.visit("byteArrayValue", new byte[] {1,-1}); 35av0.visit("charArrayValue", new char[] {(char)99,(char)98,(char)65535}); 36av0.visit("booleanArrayValue", new boolean[] {true,false}); 37av0.visit("intArrayValue", new int[] {1,-1}); 38av0.visit("shortArrayValue", new short[] {(short)1,(short)-1}); 39av0.visit("longArrayValue", new long[] {1L,-1L}); 40av0.visit("floatArrayValue", new float[] {1.0f,-1.0f}); 41av0.visit("doubleArrayValue", new double[] {1.0d,-1.0d}); 42{ 43AnnotationVisitor av1 = av0.visitArray("stringArrayValue"); 44av1.visit(null, "aa"); 45av1.visit(null, "bb"); 46av1.visitEnd(); 47} 48{ 49AnnotationVisitor av1 = av0.visitArray("enumArrayValue"); 50av1.visitEnum(null, "Lannotations/ValuesEnum;", "ONE"); 51av1.visitEnum(null, "Lannotations/ValuesEnum;", "TWO"); 52av1.visitEnd(); 53} 54{ 55AnnotationVisitor av1 = av0.visitArray("annotationArrayValue"); 56{ 57AnnotationVisitor av2 = av1.visitAnnotation(null, "Lannotations/ValueAttrAnnotation;"); 58av2.visit("value", "annotation1"); 59av2.visitEnd(); 60} 61{ 62AnnotationVisitor av2 = av1.visitAnnotation(null, "Lannotations/ValueAttrAnnotation;"); 63av2.visit("value", "annotation2"); 64av2.visitEnd(); 65} 66av1.visitEnd(); 67} 68{ 69AnnotationVisitor av1 = av0.visitArray("classArrayValue"); 70av1.visit(null, Type.getType("Lannotations/Values;")); 71av1.visit(null, Type.getType("Lannotations/Values;")); 72av1.visitEnd(); 73} 74av0.visitEnd(); 75} 76{ 77av0 = cw.visitAnnotation("Lannotations/ValueAttrAnnotation1;", true); 78av0.visit("value", "classAnnotation1"); 79av0.visitEnd(); 80} 81{ 82av0 = cw.visitAnnotation("Lannotations/ValueAttrAnnotation2;", true); 83av0.visit("value", "classAnnotation2"); 84av0.visitEnd(); 85} 86{ 87fv = cw.visitField(ACC_PUBLIC, "testfield", "Ljava/lang/String;", null, null); 88{ 89av0 = fv.visitAnnotation("Lannotations/ValueAttrAnnotation1;", true); 90av0.visit("value", "fieldAnnotation1"); 91av0.visitEnd(); 92} 93{ 94av0 = fv.visitAnnotation("Lannotations/ValueAttrAnnotation2;", true); 95av0.visit("value", "fieldAnnotation2"); 96av0.visitEnd(); 97} 98fv.visitEnd(); 99} 100{ 101mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); 102mv.visitVarInsn(ALOAD, 0); 103mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); 104mv.visitVarInsn(ALOAD, 0); 105mv.visitLdcInsn("test"); 106mv.visitFieldInsn(PUTFIELD, "annotations/Values", "testfield", "Ljava/lang/String;"); 107mv.visitInsn(RETURN); 108mv.visitMaxs(2, 1); 109mv.visitEnd(); 110} 111{ 112mv = cw.visitMethod(ACC_PUBLIC, "testMethod", "(Ljava/lang/String;I)V", null, null); 113{ 114av0 = mv.visitAnnotation("Lannotations/ValueAttrAnnotation1;", true); 115av0.visit("value", "methodAnnotation1"); 116av0.visitEnd(); 117} 118{ 119av0 = mv.visitAnnotation("Lannotations/ValueAttrAnnotation2;", true); 120av0.visit("value", "methodAnnotation2"); 121av0.visitEnd(); 122} 123{ 124av0 = mv.visitParameterAnnotation(0, "Lannotations/ValueAttrAnnotation1;", true); 125av0.visit("value", "param1Annotation1"); 126av0.visitEnd(); 127} 128{ 129av0 = mv.visitParameterAnnotation(0, "Lannotations/ValueAttrAnnotation2;", true); 130av0.visit("value", "param1Annotation2"); 131av0.visitEnd(); 132} 133{ 134av0 = mv.visitParameterAnnotation(1, "Lannotations/ValueAttrAnnotation1;", true); 135av0.visit("value", "param2Annotation1"); 136av0.visitEnd(); 137} 138{ 139av0 = mv.visitParameterAnnotation(1, "Lannotations/ValueAttrAnnotation2;", true); 140av0.visit("value", "param2Annotation2"); 141av0.visitEnd(); 142} 143mv.visitInsn(RETURN); 144mv.visitMaxs(0, 3); 145mv.visitEnd(); 146} 147cw.visitEnd(); 148 149return cw.toByteArray(); 150} 151} 152