docs: private int readAnnotationTarget(final Context context, int u) {
          int target = readInt(u);
          switch (target >>> 24) {
          case 0x00: // CLASS_TYPE_PARAMETER
          case 0x01: // METHOD_TYPE_PARAMETER
          case 0x16: // METHOD_FORMAL_PARAMETER
              target &= 0xFFFF0000;
              u += 2;
              break;
          case 0x13: // FIELD
          case 0x14: // METHOD_RETURN
          case 0x15: // METHOD_RECEIVER
              target &= 0xFF000000;
              u += 1;
              break;
          case 0x40: // LOCAL_VARIABLE
          case 0x41: { // RESOURCE_VARIABLE
              target &= 0xFF000000;
              int n = readUnsignedShort(u + 1);
              context.start = new Label[n];
              context.end = new Label[n];
              context.index = new int[n];
              u += 3;
              for (int i = 0; i < n; ++i) {
                  int start = readUnsignedShort(u);
                  int length = readUnsignedShort(u + 2);
                  context.start[i] = createLabel(start, context.labels);
                  context.end[i] = createLabel(start + length, context.labels);
                  context.index[i] = readUnsignedShort(u + 4);
                  u += 6;
              }
              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
              target &= 0xFF0000FF;
              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:
              target &= (target >>> 24) < 0x43 ? 0xFFFFFF00 : 0xFF000000;
              u += 3;
              break;
          }
          int pathLength = readByte(u);
          context.typeRef = target;
          context.typePath = pathLength == 0 ? null : new TypePath(b, u);
          return u + 1 + 2 * pathLength;
      }