code: private Object[] nextArgs(Iterator[] iterators) {
      if (runStatus != OK) return null;
  
      Object[] next = new Object[iterators.length];
      for (int i = 0; i < iterators.length; i++)
        try {
          next[i] = iterators[i].next();
        } catch (Throwable t) {
          runStatus = supervisor.error(
              new ErrorInfo(currentFeature.getDataProviders().get(i).getDataProviderMethod(), t));
          return null;
        }
  
      try {
        return (Object[])invokeRaw(sharedInstance, currentFeature.getDataProcessorMethod(), next);
      } catch (Throwable t) {
        runStatus = supervisor.error(
            new ErrorInfo(currentFeature.getDataProcessorMethod(), t));
        return null;
      }
    }
docs: advances iterators and computes args