code: private static Method findSetterMethod(String methodName, List<Object> args) {
  		final String sourceMethod = "findSetterMethod"; //$NON-NLS-1$
  		final boolean isTraceLogging = log.isLoggable(Level.FINER);
  		if (isTraceLogging) {
  			log.entering(sourceClass, sourceMethod, new Object[]{methodName, args});
  		}
  		Method[] methods = CompilerOptions.class.getMethods();
  		Method result = null;
  		for (Method method : methods) {
  			if (method.getName().equals(methodName) && method.getParameterTypes().length == args.size()) {
  				List<Object> marshalledArgs = new ArrayList<Object>(args.size());
  				for (int i = 0; i < args.size(); i++) {
  					Object arg = marshalArg(method.getParameterTypes()[i], args.get(i));
  					if (arg != null) {
  						marshalledArgs.add(arg);
  					} else {
  						break;
  					}
  				}
  				if (marshalledArgs.size() == args.size()) {
  					result = method;
  					args.clear();
  					args.addAll(marshalledArgs);
  					break;
  				}
  			}
  		}
  		if (isTraceLogging) {
  			log.exiting(sourceMethod, sourceMethod, result);
  		}
  		return result;
  	}
docs: Finds and returns the setter method in the {@link CompilerOptions} class that matches the
  specified name and argument types. If no matching method can be found, then returns null.
  <p>
  An input argument type of string will match an Enum argument type if the Enum contains a
  constant who's name matches the string. In this case, the string value will be replaced with
  the Enum constant in the input <code>args</code> list.
  
  @param methodName
  the setter method name to match
  @param args
  (input/output) the list of arguments. On input, the list of the arguments provided
  in the config. On output, the possibly converted list of arguments that may be
  passed to the setter method. See {@link #marshalArg(Class, Object)} for conversion
  rules.
  @return the matching method, or null if no match can be found