docs: public void addApiOptions(AbstractParam param) {
  		// Add option parameter getters and setters via reflection
  		this.param = param;
  		Method[] methods = param.getClass().getDeclaredMethods();
  		Arrays.sort(methods, METHOD_NAME_COMPARATOR);
  		List<String> addedActions = new ArrayList<>();
  		// Check for string setters (which take precedence)
  		for (Method method : methods) {
  			if (isIgnored(method)) {
  				continue;
  			}
  
  			boolean deprecated = method.getAnnotation(Deprecated.class) != null;
  
  			if (method.getName().startsWith("get") && method.getParameterTypes().length == 0) {
  				ApiView view = new ApiView(GET_OPTION_PREFIX + method.getName().substring(3));
  				setApiOptionDeprecated(view, deprecated);
  				addApiView(view);
  			}
  			if (method.getName().startsWith("is") && method.getParameterTypes().length == 0) {
  				ApiView view = new ApiView(GET_OPTION_PREFIX + method.getName().substring(2));
  				setApiOptionDeprecated(view, deprecated);
  				addApiView(view);
  			}
  			if (method.getName().startsWith("set") && method.getParameterTypes().length == 1 && 
  					method.getParameterTypes()[0].equals(String.class)) {
  				ApiAction action = new ApiAction(SET_OPTION_PREFIX + method.getName().substring(3), 
  						new String[]{"String"});
  				setApiOptionDeprecated(action, deprecated);
  				this.addApiAction(action);
  				addedActions.add(method.getName());
  			}
  			if (method.getName().startsWith("add") && method.getParameterTypes().length == 1 && 
  					method.getParameterTypes()[0].equals(String.class)) {
  				ApiAction action = new ApiAction(ADD_OPTION_PREFIX + method.getName().substring(3), 
  						new String[]{"String"});
  				setApiOptionDeprecated(action, deprecated);
  				this.addApiAction(action);
  				addedActions.add(method.getName());
  			}
  			if (method.getName().startsWith("remove") && method.getParameterTypes().length == 1 && 
  					method.getParameterTypes()[0].equals(String.class)) {
  				ApiAction action = new ApiAction(REMOVE_OPTION_PREFIX + method.getName().substring(6), 
  						new String[]{"String"});
  				setApiOptionDeprecated(action, deprecated);
  				this.addApiAction(action);
  				addedActions.add(method.getName());
  			}
  		}
  		// Now check for non string setters
  		for (Method method : methods) {
  			if (isIgnored(method)) {
  				continue;
  			}
  
  			boolean deprecated = method.getAnnotation(Deprecated.class) != null;
  
  			if (method.getName().startsWith("set") && method.getParameterTypes().length == 1 && ! addedActions.contains(method.getName())) {
  				// Non String setter
  				if (method.getParameterTypes()[0].equals(Integer.class) || method.getParameterTypes()[0].equals(int.class)) {
  					ApiAction action = new ApiAction(SET_OPTION_PREFIX + method.getName().substring(3),
  							new String[]{"Integer"});
  					setApiOptionDeprecated(action, deprecated);
  					this.addApiAction(action);
  					addedActions.add(method.getName());	// Just in case there are more overloads
  				} else if (method.getParameterTypes()[0].equals(Boolean.class) || method.getParameterTypes()[0].equals(boolean.class)) {
  					ApiAction action = new ApiAction(SET_OPTION_PREFIX + method.getName().substring(3),
  							new String[]{"Boolean"});
  					setApiOptionDeprecated(action, deprecated);
  					this.addApiAction(action);
  					addedActions.add(method.getName());	// Just in case there are more overloads
  				}
  			}
  		}
  		
  	}