class RemoteServer {
  
  private final String software;
  private final String version;
  private final String buildDate;
  
  RemoteServer(String software, String version, String buildDate) {
    this.software = Objects.requireNonNull(software);
    this.version = Objects.requireNonNull(version);
    this.buildDate = buildDate;
  }

  /**
   * @return the software running on the server, usually {@code LanguageTool}
   */
  public String getSoftware() {
    return software;
  }

  /**
   * @return the version running on the server, might be something like {@code 3.4-SNAPSHOT} or {@code 3.4}
   */
  public String getVersion() {
    return version;
  }

  /**
   * @return the build date of the version or null (in case this isn't a real build but runs in an IDE etc.)
   */
  public Optional<String> getBuildDate() {
    return Optional.ofNullable(buildDate);
  }

  @Override
  public String toString() {<FILL_FUNCTION_BODY>}

}

    return software + "/" + version + "/" + buildDate;
  
<no_super_class>