class Builder {
    private VersionInfo versionInfo = new VersionInfo();

    public Builder() {
    }

    public Builder(VersionInfo versionInfo) {
      if (versionInfo != null) {
        this.versionInfo.buildDate = versionInfo.getBuildDate();
        this.versionInfo.gitCommit = versionInfo.getGitCommit();
        this.versionInfo.gitVersion = versionInfo.getGitVersion();
        this.versionInfo.major = versionInfo.getMajor();
        this.versionInfo.minor = versionInfo.getMinor();
        this.versionInfo.gitTreeState = versionInfo.getGitTreeState();
        this.versionInfo.platform = versionInfo.getPlatform();
        this.versionInfo.goVersion = versionInfo.getGoVersion();
        this.versionInfo.compiler = versionInfo.getCompiler();
      }
    }

    public Builder withBuildDate(String buildDate) throws ParseException {<FILL_FUNCTION_BODY>}

    public Builder withGitCommit(String gitCommit) {
      this.versionInfo.gitCommit = gitCommit;
      return this;
    }

    public Builder withGitVersion(String gitVersion) {
      this.versionInfo.gitVersion = gitVersion;
      return this;
    }

    public Builder withMajor(String major) {
      this.versionInfo.major = major;
      return this;
    }

    public Builder withMinor(String minor) {
      this.versionInfo.minor = minor;
      return this;
    }

    public Builder withGitTreeState(String gitTreeState) {
      this.versionInfo.gitTreeState = gitTreeState;
      return this;
    }

    public Builder withPlatform(String platform) {
      this.versionInfo.platform = platform;
      return this;
    }

    public Builder withGoVersion(String goVersion) {
      this.versionInfo.goVersion = goVersion;
      return this;
    }

    public Builder withCompiler(String compiler) {
      this.versionInfo.compiler = compiler;
      return this;
    }

    public VersionInfo build() {
      return versionInfo;
    }
  }

      if (buildDate != null) {
        this.versionInfo.buildDate = new SimpleDateFormat(VersionKeys.BUILD_DATE_FORMAT).parse(buildDate);
      }
      return this;
    
<no_super_class>