public void visit(final String name, final Object value) {
   checkEnd();
   checkName(name);
   if (!(value instanceof Byte
       || value instanceof Boolean
       || value instanceof Character
       || value instanceof Short
       || value instanceof Integer
       || value instanceof Long
       || value instanceof Float
       || value instanceof Double
       || value instanceof String
       || value instanceof Type
       || value instanceof byte[]
       || value instanceof boolean[]
       || value instanceof char[]
       || value instanceof short[]
       || value instanceof int[]
       || value instanceof long[]
       || value instanceof float[]
       || value instanceof double[])) {
     throw new IllegalArgumentException("Invalid annotation value");
   }
   if (av != null) {
     av.visit(name, value);
   }
 }
 public void visitEnd() {
   checkEnd();
   end = true;
   if (av != null) {
     av.visitEnd();
   }
 }
 public void visitEnum(final String name, final String desc, final String value) {
   checkEnd();
   checkName(name);
   CheckMethodAdapter.checkDesc(desc, false);
   if (value == null) {
     throw new IllegalArgumentException("Invalid enum value");
   }
   if (av != null) {
     av.visitEnum(name, desc, value);
   }
 }
 public AnnotationVisitor visitArray(final String name) {
   checkEnd();
   checkName(name);
   return new CheckAnnotationAdapter(av == null ? null : av.visitArray(name), false);
 }
 public AnnotationVisitor visitAnnotation(final String name, final String desc) {
   checkEnd();
   checkName(name);
   CheckMethodAdapter.checkDesc(desc, false);
   return new CheckAnnotationAdapter(av == null ? null : av.visitAnnotation(name, desc));
 }