public Object invoke(Object target, Object... arguments) throws Throwable {
    for (int i = 0, argCount = arguments.length; i < argCount; i++) {
      if (arguments[i] == MISSING_ARGUMENT) {
        Function<Integer, String> nameProvider = getNameProvider();

        StringJoiner missingArguments = new StringJoiner("', '", "No argument was provided for parameters: '", "' in method: '" + getReflection().getDeclaringClass().getName()+ "." + getName() + "'");
        missingArguments.add(nameProvider.apply(i));
        for (int j = i + 1; j < argCount; j++) {
          if (arguments[j] == MISSING_ARGUMENT) {
            missingArguments.add(nameProvider.apply(j));
          }
        }
        throw new SpockExecutionException(missingArguments.toString());
      }
    }
    return invoker.invoke(target, arguments);
  }
Invokes this method on the specified target and with the specified arguments.
Does <em>not</em> handle interceptors.

@param target the target of the method call
@param arguments the arguments for the method call
@return the return value of the method call
spock-core/src/main/java/org/spockframework/runtime/model/MethodInfo.java