code: private DescriptorProtos.DescriptorProto.Builder mapDescriptorProtoBuilder(
      Field field, String typeName) throws DescriptorValidationException {
      DescriptorProtos.DescriptorProto.Builder mapBuilder =
        DescriptorProtos.DescriptorProto.newBuilder().setName(typeName);
  
      Field keyField = field.getMapKeyField();
      Field valueField = field.getMapValueField();
  
      DescriptorProtos.FieldDescriptorProto.Builder keyBuilder = mapKeyProtoBuilder();
      DescriptorProtos.FieldDescriptorProto.Builder valueBuilder = mapValueProtoBuilder();
  
      setBuilderTypeFromField(keyField, keyBuilder);
      setBuilderTypeFromField(valueField, valueBuilder);
  
      mapBuilder.addField(keyBuilder.build());
      mapBuilder.addField(valueBuilder.build());
  
      return mapBuilder;
    }
docs: Generate a DescriptorProto.Builder for the Message type that will be used
  to represent the entries of the input Map field.
  
  @param field a Map Field (field.isMap() == true)
  @param typeName name of new message type