Example #1
0
 /**
  * Outputs code in a static block to register the prototype instance:
  *
  * <p>static { EnhancedAccessor.registerClass(TheClassName, new TheClass()); // or for an abstract
  * class: EnhancedAccessor.registerClass(TheClassName, null); }
  */
 private void genStaticBlock() {
   MethodVisitor mv = cv.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
   mv.visitCode();
   if (staticBlockMethod != null) {
     mv.visitMethodInsn(INVOKESTATIC, className, staticBlockMethod, "()V");
   }
   mv.visitLdcInsn(className.replace('/', '.'));
   if (isAbstract) {
     mv.visitInsn(ACONST_NULL);
   } else {
     mv.visitTypeInsn(NEW, className);
     mv.visitInsn(DUP);
     mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", "()V");
   }
   mv.visitMethodInsn(
       INVOKESTATIC,
       "com/sleepycat/persist/impl/EnhancedAccessor",
       "registerClass",
       "(Ljava/lang/String;Lcom/sleepycat/persist/impl/Enhanced;)V");
   mv.visitInsn(RETURN);
   mv.visitMaxs(3, 0);
   mv.visitEnd();
 }