docs: private int[] readTypeAnnotations(final MethodVisitor mv,
              final Context context, int u, boolean visible) {
          char[] c = context.buffer;
          int[] offsets = new int[readUnsignedShort(u)];
          u += 2;
          for (int i = 0; i < offsets.length; ++i) {
              offsets[i] = u;
              int target = readInt(u);
              switch (target >>> 24) {
              case 0x00: // CLASS_TYPE_PARAMETER
              case 0x01: // METHOD_TYPE_PARAMETER
              case 0x16: // METHOD_FORMAL_PARAMETER
                  u += 2;
                  break;
              case 0x13: // FIELD
              case 0x14: // METHOD_RETURN
              case 0x15: // METHOD_RECEIVER
                  u += 1;
                  break;
              case 0x40: // LOCAL_VARIABLE
              case 0x41: // RESOURCE_VARIABLE
                  for (int j = readUnsignedShort(u + 1); j > 0; --j) {
                      int start = readUnsignedShort(u + 3);
                      int length = readUnsignedShort(u + 5);
                      createLabel(start, context.labels);
                      createLabel(start + length, context.labels);
                      u += 6;
                  }
                  u += 3;
                  break;
              case 0x47: // CAST
              case 0x48: // CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
              case 0x49: // METHOD_INVOCATION_TYPE_ARGUMENT
              case 0x4A: // CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
              case 0x4B: // METHOD_REFERENCE_TYPE_ARGUMENT
                  u += 4;
                  break;
              // case 0x10: // CLASS_EXTENDS
              // case 0x11: // CLASS_TYPE_PARAMETER_BOUND
              // case 0x12: // METHOD_TYPE_PARAMETER_BOUND
              // case 0x17: // THROWS
              // case 0x42: // EXCEPTION_PARAMETER
              // case 0x43: // INSTANCEOF
              // case 0x44: // NEW
              // case 0x45: // CONSTRUCTOR_REFERENCE
              // case 0x46: // METHOD_REFERENCE
              default:
                  u += 3;
                  break;
              }
              int pathLength = readByte(u);
              if ((target >>> 24) == 0x42) {
                  TypePath path = pathLength == 0 ? null : new TypePath(b, u);
                  u += 1 + 2 * pathLength;
                  u = readAnnotationValues(u + 2, c, true,
                          mv.visitTryCatchAnnotation(target, path,
                                  readUTF8(u, c), visible));
              } else {
                  u = readAnnotationValues(u + 3 + 2 * pathLength, c, true, null);
              }
          }
          return offsets;
      }