docs: private static DescriptorProtoPOJO getDescritorProtoPOJO(FileDescriptorProtoPOJO fileDescriptorProto,
              MessageType typeElement, Set<String> messageSet, Set<String> enumSet) {
  
          DescriptorProtoPOJO ret = new DescriptorProtoPOJO();
          ret.name = typeElement.getName();
          ret.fields = new ArrayList<FieldDescriptorProtoPOJO>();
          ret.nestedTypes = new ArrayList<DescriptorProtoPOJO>();
          ret.enumTypes = new ArrayList<EnumDescriptorProtoPOJO>();
          ret.extensionRanges = new ArrayList<ExtensionRangePOJO>();
          ret.extensions = new ArrayList<FieldDescriptorProtoPOJO>();
          ret.options = new ArrayList<MessageOptionsPOJO>();
  
          List<com.squareup.protoparser.MessageType.Field> fields = typeElement.getFields();
          if (fields != null) {
              FieldDescriptorProtoPOJO fieldDescriptorProto;
              for (com.squareup.protoparser.MessageType.Field fieldElement : fields) {
                  fieldDescriptorProto = new FieldDescriptorProtoPOJO();
                  fieldDescriptorProto.name = fieldElement.getName();
                  fieldDescriptorProto.extendee = null; // XXX
                  fieldDescriptorProto.number = fieldElement.getTag();
  
                  com.squareup.protoparser.MessageType.Label label = fieldElement.getLabel();
                  if (label == com.squareup.protoparser.MessageType.Label.OPTIONAL) {
                      fieldDescriptorProto.label = Label.LABEL_OPTIONAL;
                  } else if (label == com.squareup.protoparser.MessageType.Label.REQUIRED) {
                      fieldDescriptorProto.label = Label.LABEL_REQUIRED;
                  } else if (label == com.squareup.protoparser.MessageType.Label.REPEATED) {
                      fieldDescriptorProto.label = Label.LABEL_REPEATED;
                  }
  
                  String type = fieldElement.getType();
                  fieldDescriptorProto.defaultValue = fieldElement.getDefault();
  
                  try {
                      fieldDescriptorProto.type = Type.valueOf("TYPE_" + type.toUpperCase());
  
                  } catch (Exception e) {
                      if (messageSet.contains(type)) {
                          fieldDescriptorProto.type = Type.TYPE_MESSAGE;
                      } else {
                          fieldDescriptorProto.type = Type.TYPE_ENUM;
                      }
  
                      fieldDescriptorProto.typeName = "." + fileDescriptorProto.pkg + "." + type;
                  }
  
                  ret.fields.add(fieldDescriptorProto);
              }
          }
  
          List<com.squareup.protoparser.Type> nestedElements = typeElement.getNestedTypes();
          if (nestedElements != null) {
              for (com.squareup.protoparser.Type nestedTypeElement : nestedElements) {
                  if (nestedTypeElement instanceof MessageType) {
                      ret.nestedTypes.add(getDescritorProtoPOJO(fileDescriptorProto, (MessageType) nestedTypeElement,
                              messageSet, enumSet));
                  } else {
                      ret.enumTypes.add(getDescritorProtoPOJO(fileDescriptorProto, (EnumType) nestedTypeElement,
                              messageSet, enumSet));
                  }
              }
          }
  
          return ret;
      }