docs: final int getSize() {
          if (classReaderOffset != 0) {
              return 6 + classReaderLength;
          }
          int size = 8;
          if (code.length > 0) {
              if (code.length > 65536) {
                  throw new RuntimeException("Method code too large!");
              }
              cw.newUTF8("Code");
              size += 18 + code.length + 8 * handlerCount;
              if (localVar != null) {
                  cw.newUTF8("LocalVariableTable");
                  size += 8 + localVar.length;
              }
              if (localVarType != null) {
                  cw.newUTF8("LocalVariableTypeTable");
                  size += 8 + localVarType.length;
              }
              if (lineNumber != null) {
                  cw.newUTF8("LineNumberTable");
                  size += 8 + lineNumber.length;
              }
              if (stackMap != null) {
                  boolean zip = (cw.version & 0xFFFF) >= Opcodes.V1_6;
                  cw.newUTF8(zip ? "StackMapTable" : "StackMap");
                  size += 8 + stackMap.length;
              }
              if (ClassReader.ANNOTATIONS && ctanns != null) {
                  cw.newUTF8("RuntimeVisibleTypeAnnotations");
                  size += 8 + ctanns.getSize();
              }
              if (ClassReader.ANNOTATIONS && ictanns != null) {
                  cw.newUTF8("RuntimeInvisibleTypeAnnotations");
                  size += 8 + ictanns.getSize();
              }
              if (cattrs != null) {
                  size += cattrs.getSize(cw, code.data, code.length, maxStack,
                          maxLocals);
              }
          }
          if (exceptionCount > 0) {
              cw.newUTF8("Exceptions");
              size += 8 + 2 * exceptionCount;
          }
          if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
              if ((cw.version & 0xFFFF) < Opcodes.V1_5
                      || (access & ClassWriter.ACC_SYNTHETIC_ATTRIBUTE) != 0) {
                  cw.newUTF8("Synthetic");
                  size += 6;
              }
          }
          if ((access & Opcodes.ACC_DEPRECATED) != 0) {
              cw.newUTF8("Deprecated");
              size += 6;
          }
          if (ClassReader.SIGNATURES && signature != null) {
              cw.newUTF8("Signature");
              cw.newUTF8(signature);
              size += 8;
          }
          if (methodParameters != null) {
              cw.newUTF8("MethodParameters");
              size += 7 + methodParameters.length;
          }
          if (ClassReader.ANNOTATIONS && annd != null) {
              cw.newUTF8("AnnotationDefault");
              size += 6 + annd.length;
          }
          if (ClassReader.ANNOTATIONS && anns != null) {
              cw.newUTF8("RuntimeVisibleAnnotations");
              size += 8 + anns.getSize();
          }
          if (ClassReader.ANNOTATIONS && ianns != null) {
              cw.newUTF8("RuntimeInvisibleAnnotations");
              size += 8 + ianns.getSize();
          }
          if (ClassReader.ANNOTATIONS && tanns != null) {
              cw.newUTF8("RuntimeVisibleTypeAnnotations");
              size += 8 + tanns.getSize();
          }
          if (ClassReader.ANNOTATIONS && itanns != null) {
              cw.newUTF8("RuntimeInvisibleTypeAnnotations");
              size += 8 + itanns.getSize();
          }
          if (ClassReader.ANNOTATIONS && panns != null) {
              cw.newUTF8("RuntimeVisibleParameterAnnotations");
              size += 7 + 2 * (panns.length - synthetics);
              for (int i = panns.length - 1; i >= synthetics; --i) {
                  size += panns[i] == null ? 0 : panns[i].getSize();
              }
          }
          if (ClassReader.ANNOTATIONS && ipanns != null) {
              cw.newUTF8("RuntimeInvisibleParameterAnnotations");
              size += 7 + 2 * (ipanns.length - synthetics);
              for (int i = ipanns.length - 1; i >= synthetics; --i) {
                  size += ipanns[i] == null ? 0 : ipanns[i].getSize();
              }
          }
          if (attrs != null) {
              size += attrs.getSize(cw, null, 0, -1, -1);
          }
          return size;
      }