@Override
    public Object[] next() {
      while (true) {
        Object[] next = delegate.next();

        // delegate.next() will return null if an error occurred
        if (next == null) {
          return null;
        }

        MethodInfo filterMethod = context.getCurrentFeature().getFilterMethod();
        if (filterMethod == null) {
          return next;
        }

        try {
          // do not use invokeRaw here, as that would report Assertion Error to the supervisor
          filterMethod.invoke(context.getSharedInstance(), next);
          return next;
        } catch (AssertionError ae) {
          if (logFilteredIterations) {
            StringJoiner stringJoiner = new StringJoiner(", ", "Filtered iteration [", "]:\n");
            for (int i = 0; i < dataVariableNames.size(); i++) {
              stringJoiner.add(dataVariableNames.get(i) + ": " + next[i]);
            }
            StringWriter sw = new StringWriter();
            sw.write(stringJoiner.toString());
            stackTraceFilter.filter(ae);
            try (PrintWriter pw = new PrintWriter(sw)) {
              ae.printStackTrace(pw);
            }
            System.err.println(sw);
          }
          // filter block does not like these values, try next ones if available
        } catch (Throwable t) {
          supervisor.error(context.getErrorInfoCollector(), new ErrorInfo(filterMethod, t, getErrorContext()));
          return null;
        }
      }
    }
A fallback iterator that returns a single empty iteration.
<p>
This is used when a feature has no data provider method and iteration behavior is forcefully enabled.

@since 2.3
spock-core/src/main/java/org/spockframework/runtime/DataIteratorFactory.java