code: @Override
      public String getCommandLine() {
          final StringBuilder commandLineString = new StringBuilder();
          String tempString;
          commandLineString.append(callerArguments.getClass().getSimpleName());
  
          // positional args first
          if( positionalArgumentDefinition != null) {
              tempString = positionalArgumentDefinition.getCommandLineDisplayString();
              commandLineString.append(tempString.length() > 0 ? " " + tempString : "");
          }
  
          // then args that were explicitly set
          tempString = namedArgumentDefinitions.stream()
                  .filter(NamedArgumentDefinition::getHasBeenSet)
                  .map(NamedArgumentDefinition::getCommandLineDisplayString)
                  .collect(Collectors.joining(" "));
          commandLineString.append(tempString.length() > 0 ? " " + tempString : "");
  
          // finally, args that weren't explicitly set, but have a default value
          tempString = namedArgumentDefinitions.stream()
                          .filter(argumentDefinition -> !argumentDefinition.getHasBeenSet() &&
                                  !argumentDefinition.getDefaultValueAsString().equals(NamedArgumentDefinition.NULL_ARGUMENT_STRING))
                          .map(NamedArgumentDefinition::getCommandLineDisplayString)
                          .collect(Collectors.joining(" "));
          commandLineString.append(tempString.length() > 0 ? " " + tempString : "");
  
          return commandLineString.toString();
      }
docs: The commandline used to run this program, including any default args that
  weren't necessarily specified. This is used for logging and debugging.
  <p/>
  NOTE: {@link #parseArguments(PrintStream, String[])} must be called before
  calling this method.
  
  @return The commandline, or null if {@link #parseArguments(PrintStream, String[])}
  hasn't yet been called, or didn't complete successfully.