@Override
 public AnnotationVisitor visitTypeAnnotation(
     final int typeRef, final TypePath typePath, final String desc, final boolean visible) {
   checkEnd();
   int sort = typeRef >>> 24;
   if (sort != TypeReference.FIELD) {
     throw new IllegalArgumentException(
         "Invalid type reference sort 0x" + Integer.toHexString(sort));
   }
   CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
   CheckMethodAdapter.checkDesc(desc, false);
   return new CheckAnnotationAdapter(super.visitTypeAnnotation(typeRef, typePath, desc, visible));
 }
 @Override
 public AnnotationVisitor visitTypeAnnotation(
     final int typeRef, final TypePath typePath, final String desc, final boolean visible) {
   checkEndMethod();
   int sort = typeRef >>> 24;
   if (sort != TypeReference.METHOD_TYPE_PARAMETER
       && sort != TypeReference.METHOD_TYPE_PARAMETER_BOUND
       && sort != TypeReference.METHOD_RETURN
       && sort != TypeReference.METHOD_RECEIVER
       && sort != TypeReference.METHOD_FORMAL_PARAMETER
       && sort != TypeReference.THROWS) {
     throw new IllegalArgumentException(
         "Invalid type reference sort 0x" + Integer.toHexString(sort));
   }
   CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
   CheckMethodAdapter.checkDesc(desc, false);
   return new CheckAnnotationAdapter(super.visitTypeAnnotation(typeRef, typePath, desc, visible));
 }
 @Override
 public AnnotationVisitor visitInsnAnnotation(
     final int typeRef, final TypePath typePath, final String desc, final boolean visible) {
   checkStartCode();
   checkEndCode();
   int sort = typeRef >>> 24;
   if (sort != TypeReference.INSTANCEOF
       && sort != TypeReference.NEW
       && sort != TypeReference.CONSTRUCTOR_REFERENCE
       && sort != TypeReference.METHOD_REFERENCE
       && sort != TypeReference.CAST
       && sort != TypeReference.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
       && sort != TypeReference.METHOD_INVOCATION_TYPE_ARGUMENT
       && sort != TypeReference.CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
       && sort != TypeReference.METHOD_REFERENCE_TYPE_ARGUMENT) {
     throw new IllegalArgumentException(
         "Invalid type reference sort 0x" + Integer.toHexString(sort));
   }
   CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath);
   CheckMethodAdapter.checkDesc(desc, false);
   return new CheckAnnotationAdapter(super.visitInsnAnnotation(typeRef, typePath, desc, visible));
 }
 @Override
 public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
   checkEnd();
   CheckMethodAdapter.checkDesc(desc, false);
   return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible));
 }