docs: private void getParseBytesMethodCode(StringBuilder code) {
          code.append(ClassHelper.getInternalName(cls.getCanonicalName())).append(" ret = new ");
          code.append(ClassHelper.getInternalName(cls.getCanonicalName())).append("()" + JAVA_LINE_BREAK);
  
          // 执行初始化，主要针对枚举类型
          for (FieldInfo field : fields) {
              boolean isList = field.isList();
              if (field.getFieldType() == FieldType.ENUM) {
                  String clsName = ClassHelper.getInternalName(field.getField().getType().getCanonicalName());
                  if (!isList) {
                      String express =
                              "CodedConstant.getEnumValue(" + clsName + ".class, " + clsName + ".values()[0].name())";
                      code.append(getSetToField("ret", field.getField(), cls, express, isList, field.isMap(), false))
                              .append(JAVA_LINE_BREAK);
                  }
              }
          }
  
          code.append("try {").append(LINE_BREAK);
          code.append("boolean done = false").append(JAVA_LINE_BREAK);
          code.append("Codec codec = null").append(JAVA_LINE_BREAK);
          code.append("while (!done) {").append(LINE_BREAK);
          code.append("int tag = input.readTag()").append(JAVA_LINE_BREAK);
          code.append("if (tag == 0) { break;}").append(LINE_BREAK);
  
          for (FieldInfo field : fields) {
              boolean isList = field.isList();
  
              if (field.getFieldType() != FieldType.DEFAULT) {
                  code.append("if (tag == ").append(CodedConstant.makeTag(field.getOrder(),
                          field.getFieldType().getInternalFieldType().getWireType()));
                  code.append(") {").append(LINE_BREAK);
              } else {
                  code.append("if (tag == CodedConstant.makeTag(").append(field.getOrder());
                  code.append(",WireFormat.").append(field.getFieldType().getWireFormat()).append(")) {")
                          .append(LINE_BREAK);
              }
  
              String t = field.getFieldType().getType();
              t = CodedConstant.capitalize(t);
  
              boolean listTypeCheck = false;
              String express;
  
              // enumeration type
              if (field.getFieldType() == FieldType.ENUM) {
                  String clsName = ClassHelper.getInternalName(field.getField().getType().getCanonicalName());
                  if (isList) {
                      if (field.getGenericKeyType() != null) {
                          Class cls = field.getGenericKeyType();
                          clsName = ClassHelper.getInternalName(cls.getCanonicalName());
                      }
                  }
                  express = "CodedConstant.getEnumValue(" + clsName + ".class, CodedConstant.getEnumName(" + clsName
                          + ".values()," + "input.read" + t + "()))";
              } else {
                  express = "input.read" + t + "()";
              }
  
              // if List type and element is object message type
              if (isList && field.getFieldType() == FieldType.OBJECT) {
                  if (field.getGenericKeyType() != null) {
                      Class cls = field.getGenericKeyType();
  
                      String name = ClassHelper.getInternalName(cls.getCanonicalName()); // need to parse nested class
                      code.append("codec = ProtobufProxy.create(").append(name).append(".class");
                      if (debug) {
                          code.append(", true");
                      } else {
                          code.append(", false");
                      }
  
                      String spath = "null";
                      if (outputPath != null) {
                          spath = "new java.io.File(\"" + outputPath.getAbsolutePath().replace('\\', '/') + "\")";
                      }
                      code.append(",").append(spath);
  
                      code.append(")").append(JAVA_LINE_BREAK);
                      code.append("int length = input.readRawVarint32()").append(JAVA_LINE_BREAK);
                      code.append("final int oldLimit = input.pushLimit(length)").append(JAVA_LINE_BREAK);
                      listTypeCheck = true;
                      express = "(" + name + ") codec.readFrom(input)";
  
                  }
              } else if (field.isMap()) {
  
                  String getMapCommand = getMapCommand(field);
                  
                  if (field.isEnumValueType()) {
                      String enumClassName = field.getGenericeValueType().getCanonicalName();
                      code.append("EnumHandler<").append(enumClassName).append("> handler");
                      code.append("= new EnumHandler");
                      code.append("<").append(enumClassName).append(">() {");
                      code.append(LINE_BREAK);
                      code.append("public ").append(enumClassName).append(" handle(int value) {");
                      code.append(LINE_BREAK);
                      code.append("String enumName = CodedConstant.getEnumName(").append(enumClassName).append(".values(), value)");
                      code.append(JAVA_LINE_BREAK);
                      code.append("return ").append(enumClassName).append(".valueOf(enumName)");
                      code.append(JAVA_LINE_BREAK);
                      code.append("}}");
                      code.append(JAVA_LINE_BREAK);
                      
                  }
  
                  express = "CodedConstant.putMapValue(input, " + getMapCommand + ",";
                  express += CodedConstant.getMapFieldGenericParameterString(field);
                  if (field.isEnumValueType()) {
                      express += ", handler";
                  }
                  express += ")";
  
              } else if (field.getFieldType() == FieldType.OBJECT) { // if object message type
                  Class cls = field.getField().getType();
                  String name = ClassHelper.getInternalName(cls.getCanonicalName()); // need to parse nested class
                  code.append("codec = ProtobufProxy.create(").append(name).append(".class");
                  if (debug) {
                      code.append(", true");
                  } else {
                      code.append(", false");
                  }
  
                  String spath = "null";
                  if (outputPath != null) {
                      spath = "new java.io.File(\"" + outputPath.getAbsolutePath().replace('\\', '/') + "\")";
                  }
                  code.append(",").append(spath);
                  code.append(")").append(JAVA_LINE_BREAK);
                  code.append("int length = input.readRawVarint32()").append(JAVA_LINE_BREAK);
                  code.append("final int oldLimit = input.pushLimit(length)").append(JAVA_LINE_BREAK);
                  listTypeCheck = true;
                  express = "(" + name + ") codec.readFrom(input)";
              }
  
              if (field.getFieldType() == FieldType.BYTES) {
                  express += ".toByteArray()";
              }
              code.append(getSetToField("ret", field.getField(), cls, express, isList, field.isMap(), false));
  
              code.append(JAVA_LINE_BREAK);
  
              if (listTypeCheck) {
                  code.append("input.checkLastTagWas(0)").append(JAVA_LINE_BREAK);
                  code.append("input.popLimit(oldLimit)").append(JAVA_LINE_BREAK);
              }
  
              code.append("continue").append(JAVA_LINE_BREAK);
              code.append("}").append(LINE_BREAK);
  
              // read packed type
              if (isList) {
                  FieldType fieldType = field.getFieldType();
                  if (fieldType.isPrimitive()) {
                      code.append("if (tag == ").append(CodedConstant.makeTag(field.getOrder(),
                              WireFormat.WIRETYPE_LENGTH_DELIMITED));
                      code.append(") {").append(LINE_BREAK);
                      
                      
                      code.append("int length = input.readRawVarint32()").append(JAVA_LINE_BREAK);
                      code.append("int limit = input.pushLimit(length)").append(JAVA_LINE_BREAK);
                      
                      code.append(getSetToField("ret", field.getField(), cls, express, isList, field.isMap(), true));
                      
                      code.append("input.popLimit(limit)").append(JAVA_LINE_BREAK);
                      
                      code.append("continue").append(JAVA_LINE_BREAK);
                      code.append("}").append(LINE_BREAK);
                  }
              }
  
          }
  
          code.append("input.skipField(tag)").append(JAVA_LINE_BREAK);
          code.append("}").append(LINE_BREAK);
          code.append("} catch (com.google.protobuf.InvalidProtocolBufferException e) {").append(LINE_BREAK);
          code.append("throw e").append(JAVA_LINE_BREAK);
          code.append("} catch (java.io.IOException e) {").append(LINE_BREAK);
          code.append("throw e").append(JAVA_LINE_BREAK);
          code.append("}").append(LINE_BREAK);
  
          for (FieldInfo field : fields) {
              if (field.isRequired()) {
                  code.append(CodedConstant.getRetRequiredCheck(getAccessByField("ret", field.getField(), cls),
                          field.getField()));
              }
          }
  
          code.append("return ret").append(JAVA_LINE_BREAK);
  
          code.append("}").append(LINE_BREAK);
      }