code: public void addArgument(Setter setter, Argument a) {
          checkNonNull(setter, "Setter");
          checkNonNull(a, "Argument");
          
          OptionHandler h = createOptionHandler(new OptionDef(a,setter.isMultiValued()),setter);
      	int index = a.index();
      	// make sure the argument will fit in the list
      	while (index >= arguments.size()) {
      		arguments.add(null);
      	}
      	if(arguments.get(index)!=null) {
              throw new IllegalAnnotationError(Messages.MULTIPLE_USE_OF_ARGUMENT.format(index));
          }
      	arguments.set(index, h);
      }
docs: Programmatically defines an argument (instead of reading it from annotations as normal).
  
  @param setter the setter for the type
  @param a the Argument
  @throws NullPointerException if {@code setter} or {@code a} is {@code null}.