@Override
    public ParserState onComplete() {
      if (getHasArgument() && values.isEmpty()) {
        throw new CommandLineArgumentException(
            String.format("No argument was provided for command-line option '%s'.", optionString));
      }

      ParsedCommandLineOption parsedOption = commandLine.addOption(optionString.option, option);
      if (values.size() + parsedOption.getValues().size() > 1
          && !option.getAllowsMultipleArguments()) {
        throw new CommandLineArgumentException(
            String.format(
                "Multiple arguments were provided for command-line option '%s'.", optionString));
      }
      for (String value : values) {
        parsedOption.addArgument(value);
      }
      if (option.getDeprecationWarning() != null) {
        new PrintStream(CommandLineParser.this.deprecationPrinter)
            .println(
                "The "
                    + optionString
                    + " option is deprecated - "
                    + option.getDeprecationWarning());
      }
      if (option.getSubcommand() != null) {
        return state.onNonOption(option.getSubcommand());
      }

      return state;
    }