< prev index next >

test/jdk/java/lang/annotation/ClassFileGenerator.java

Print this page
8200128: Fix some "annoations" typos
Reviewed-by: alanb


  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /*
  27  * Create class file using ASM, slightly modified the ASMifier output
  28  */
  29 
  30 
  31 
  32 import java.io.File;
  33 import java.io.FileOutputStream;
  34 import java.io.IOException;
  35 import jdk.internal.org.objectweb.asm.*;
  36 
  37 
  38 public class ClassFileGenerator {
  39 
  40     public static void main(String... args) throws Exception {
  41         classFileWriter("AnnotationWithVoidReturn.class", AnnoationWithVoidReturnDump.dump());
  42         classFileWriter("AnnotationWithParameter.class", AnnoationWithParameterDump.dump());
  43         classFileWriter("AnnotationWithExtraInterface.class", AnnotationWithExtraInterfaceDump.dump());
  44         classFileWriter("AnnotationWithException.class", AnnotationWithExceptionDump.dump());
  45         classFileWriter("AnnotationWithHashCode.class", AnnotationWithHashCodeDump.dump());
  46         classFileWriter("AnnotationWithDefaultMember.class", AnnotationWithDefaultMemberDump.dump());
  47         classFileWriter("AnnotationWithoutAnnotationAccessModifier.class",
  48                         AnnotationWithoutAnnotationAccessModifierDump.dump());
  49         classFileWriter("HolderX.class", HolderXDump.dump());
  50     }
  51 
  52     private static void classFileWriter(String name, byte[] contents) throws IOException {
  53         try (FileOutputStream fos = new FileOutputStream(new File(System.getProperty("test.classes"),
  54                 name))) {
  55             fos.write(contents);
  56         }
  57     }
  58 
  59     /* Following code creates equivalent classfile, which is not allowed by javac:
  60 
  61     @Retention(RetentionPolicy.RUNTIME)
  62     public @interface AnnotationWithVoidReturn {
  63         void m() default 1;
  64     }
  65 
  66     */
  67 
  68     private static class AnnoationWithVoidReturnDump implements Opcodes {
  69         public static byte[] dump() throws Exception {
  70             ClassWriter cw = new ClassWriter(0);
  71             MethodVisitor mv;
  72             AnnotationVisitor av0;
  73 
  74             cw.visit(52, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE,
  75                     "AnnotationWithVoidReturn", null,
  76                     "java/lang/Object", new String[]{"java/lang/annotation/Annotation"});
  77 
  78             {
  79                 av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true);
  80                 av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;",
  81                         "RUNTIME");
  82                 av0.visitEnd();
  83             }
  84             {
  85                 mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "m", "()V", null, null);
  86                 mv.visitEnd();
  87             }
  88             {
  89                 av0 = mv.visitAnnotationDefault();
  90                 av0.visit(null, new Integer(1));
  91                 av0.visitEnd();
  92             }
  93             cw.visitEnd();
  94 
  95             return cw.toByteArray();
  96 
  97         }
  98     }
  99 
 100     /* Following code creates equivalent classfile, which is not allowed by javac:
 101 
 102     @Retention(RetentionPolicy.RUNTIME)
 103     public @interface AnnotationWithParameter {
 104         int m(int x) default -1;
 105     }
 106 
 107     */
 108 
 109     private static class AnnoationWithParameterDump implements Opcodes {
 110         public static byte[] dump() throws Exception {
 111 
 112             ClassWriter cw = new ClassWriter(0);
 113             MethodVisitor mv;
 114             AnnotationVisitor av0;
 115 
 116             cw.visit(52, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE,
 117                     "AnnotationWithParameter", null,
 118                     "java/lang/Object", new String[]{"java/lang/annotation/Annotation"});
 119 
 120             {
 121                 av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true);
 122                 av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;",
 123                         "RUNTIME");
 124                 av0.visitEnd();
 125             }
 126             {
 127                 mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT,
 128                         "badValue",
 129                         "(I)I", // Bad method with a parameter




  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /*
  27  * Create class file using ASM, slightly modified the ASMifier output
  28  */
  29 
  30 
  31 
  32 import java.io.File;
  33 import java.io.FileOutputStream;
  34 import java.io.IOException;
  35 import jdk.internal.org.objectweb.asm.*;
  36 
  37 
  38 public class ClassFileGenerator {
  39 
  40     public static void main(String... args) throws Exception {
  41         classFileWriter("AnnotationWithVoidReturn.class", AnnotationWithVoidReturnDump.dump());
  42         classFileWriter("AnnotationWithParameter.class", AnnotationWithParameterDump.dump());
  43         classFileWriter("AnnotationWithExtraInterface.class", AnnotationWithExtraInterfaceDump.dump());
  44         classFileWriter("AnnotationWithException.class", AnnotationWithExceptionDump.dump());
  45         classFileWriter("AnnotationWithHashCode.class", AnnotationWithHashCodeDump.dump());
  46         classFileWriter("AnnotationWithDefaultMember.class", AnnotationWithDefaultMemberDump.dump());
  47         classFileWriter("AnnotationWithoutAnnotationAccessModifier.class",
  48                         AnnotationWithoutAnnotationAccessModifierDump.dump());
  49         classFileWriter("HolderX.class", HolderXDump.dump());
  50     }
  51 
  52     private static void classFileWriter(String name, byte[] contents) throws IOException {
  53         try (FileOutputStream fos = new FileOutputStream(new File(System.getProperty("test.classes"),
  54                 name))) {
  55             fos.write(contents);
  56         }
  57     }
  58 
  59     /* Following code creates equivalent classfile, which is not allowed by javac:
  60 
  61     @Retention(RetentionPolicy.RUNTIME)
  62     public @interface AnnotationWithVoidReturn {
  63         void m() default 1;
  64     }
  65 
  66     */
  67 
  68     private static class AnnotationWithVoidReturnDump implements Opcodes {
  69         public static byte[] dump() throws Exception {
  70             ClassWriter cw = new ClassWriter(0);
  71             MethodVisitor mv;
  72             AnnotationVisitor av0;
  73 
  74             cw.visit(52, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE,
  75                     "AnnotationWithVoidReturn", null,
  76                     "java/lang/Object", new String[]{"java/lang/annotation/Annotation"});
  77 
  78             {
  79                 av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true);
  80                 av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;",
  81                         "RUNTIME");
  82                 av0.visitEnd();
  83             }
  84             {
  85                 mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "m", "()V", null, null);
  86                 mv.visitEnd();
  87             }
  88             {
  89                 av0 = mv.visitAnnotationDefault();
  90                 av0.visit(null, new Integer(1));
  91                 av0.visitEnd();
  92             }
  93             cw.visitEnd();
  94 
  95             return cw.toByteArray();
  96 
  97         }
  98     }
  99 
 100     /* Following code creates equivalent classfile, which is not allowed by javac:
 101 
 102     @Retention(RetentionPolicy.RUNTIME)
 103     public @interface AnnotationWithParameter {
 104         int m(int x) default -1;
 105     }
 106 
 107     */
 108 
 109     private static class AnnotationWithParameterDump implements Opcodes {
 110         public static byte[] dump() throws Exception {
 111 
 112             ClassWriter cw = new ClassWriter(0);
 113             MethodVisitor mv;
 114             AnnotationVisitor av0;
 115 
 116             cw.visit(52, ACC_PUBLIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE,
 117                     "AnnotationWithParameter", null,
 118                     "java/lang/Object", new String[]{"java/lang/annotation/Annotation"});
 119 
 120             {
 121                 av0 = cw.visitAnnotation("Ljava/lang/annotation/Retention;", true);
 122                 av0.visitEnum("value", "Ljava/lang/annotation/RetentionPolicy;",
 123                         "RUNTIME");
 124                 av0.visitEnd();
 125             }
 126             {
 127                 mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT,
 128                         "badValue",
 129                         "(I)I", // Bad method with a parameter


< prev index next >