private static List<DescriptorProtos.DescriptorProto> getAllMessageTypesInDescriptorProto(
     DescriptorProtos.FileDescriptorProto fileDescriptorProto) {
   Queue<DescriptorProtos.DescriptorProto> queue = new LinkedList<>();
   queue.addAll(fileDescriptorProto.getMessageTypeList());
   List<DescriptorProtos.DescriptorProto> result = new ArrayList<>();
   while (!queue.isEmpty()) {
     DescriptorProtos.DescriptorProto descriptorProto = queue.poll();
     queue.addAll(descriptorProto.getNestedTypeList());
     result.add(descriptorProto);
   }
   return result;
 }