docs: public Datatype.Builder mergeFrom(Datatype.Builder template) {
      // Upcast to access private fields; otherwise, oddly, we get an access violation.
      Datatype_Builder base = template;
      Datatype_Builder defaults = new Datatype.Builder();
      if (!base._unsetProperties.contains(Property.TYPE)
          && (defaults._unsetProperties.contains(Property.TYPE)
              || !Objects.equals(template.getType(), defaults.getType()))) {
        setType(template.getType());
      }
      if (!base._unsetProperties.contains(Property.INTERFACE_TYPE)
          && (defaults._unsetProperties.contains(Property.INTERFACE_TYPE)
              || template.isInterfaceType() != defaults.isInterfaceType())) {
        setInterfaceType(template.isInterfaceType());
      }
      if (!base._unsetProperties.contains(Property.BUILDER)
          && (defaults._unsetProperties.contains(Property.BUILDER)
              || !Objects.equals(template.getBuilder(), defaults.getBuilder()))) {
        setBuilder(template.getBuilder());
      }
      if (!base._unsetProperties.contains(Property.EXTENSIBLE)
          && (defaults._unsetProperties.contains(Property.EXTENSIBLE)
              || template.isExtensible() != defaults.isExtensible())) {
        setExtensible(template.isExtensible());
      }
      template.getBuilderFactory().ifPresent(this::setBuilderFactory);
      if (!base._unsetProperties.contains(Property.GENERATED_BUILDER)
          && (defaults._unsetProperties.contains(Property.GENERATED_BUILDER)
              || !Objects.equals(template.getGeneratedBuilder(), defaults.getGeneratedBuilder()))) {
        setGeneratedBuilder(template.getGeneratedBuilder());
      }
      if (!base._unsetProperties.contains(Property.VALUE_TYPE)
          && (defaults._unsetProperties.contains(Property.VALUE_TYPE)
              || !Objects.equals(template.getValueType(), defaults.getValueType()))) {
        setValueType(template.getValueType());
      }
      if (!base._unsetProperties.contains(Property.PARTIAL_TYPE)
          && (defaults._unsetProperties.contains(Property.PARTIAL_TYPE)
              || !Objects.equals(template.getPartialType(), defaults.getPartialType()))) {
        setPartialType(template.getPartialType());
      }
      template.getRebuildableType().ifPresent(this::setRebuildableType);
      if (!base._unsetProperties.contains(Property.PROPERTY_ENUM)
          && (defaults._unsetProperties.contains(Property.PROPERTY_ENUM)
              || !Objects.equals(template.getPropertyEnum(), defaults.getPropertyEnum()))) {
        setPropertyEnum(template.getPropertyEnum());
      }
      putAllStandardMethodUnderrides(base.standardMethodUnderrides);
      if (!base._unsetProperties.contains(Property.BUILDER_SERIALIZABLE)
          && (defaults._unsetProperties.contains(Property.BUILDER_SERIALIZABLE)
              || template.isBuilderSerializable() != defaults.isBuilderSerializable())) {
        setBuilderSerializable(template.isBuilderSerializable());
      }
      if (!base._unsetProperties.contains(Property.HAS_TO_BUILDER_METHOD)
          && (defaults._unsetProperties.contains(Property.HAS_TO_BUILDER_METHOD)
              || template.getHasToBuilderMethod() != defaults.getHasToBuilderMethod())) {
        setHasToBuilderMethod(template.getHasToBuilderMethod());
      }
      addAllGeneratedBuilderAnnotations(base.generatedBuilderAnnotations);
      addAllValueTypeAnnotations(base.valueTypeAnnotations);
      if (!base._unsetProperties.contains(Property.VALUE_TYPE_VISIBILITY)
          && (defaults._unsetProperties.contains(Property.VALUE_TYPE_VISIBILITY)
              || !Objects.equals(
                  template.getValueTypeVisibility(), defaults.getValueTypeVisibility()))) {
        setValueTypeVisibility(template.getValueTypeVisibility());
      }
      addAllNestedClasses(base.nestedClasses);
      return (Datatype.Builder) this;
    }