code: public static <T extends Iterable<?>> T noNullElements(T iterable, String message, Object... values) {
      notNull(iterable);
      int i = 0;
      for (Iterator<?> it = iterable.iterator(); it.hasNext(); i++) {
        if (it.next() == null) { throw new IllegalArgumentException(String.format(message, Integer.valueOf(i))); }
      }
      return iterable;
    }
docs: <p>
  Validate that the specified argument iterable is neither {@code null} nor contains any elements
  that are {@code null}; otherwise throwing an exception with the specified message.
  
  <pre>
  Assert.noNullElements(myCollection, &quot;The collection contains null at position %d&quot;);
  </pre>
  <p>
  If the iterable is {@code null}, then the message in the exception is &quot;The validated
  object is null&quot;.
  </p>
  <p>
  If the iterable has a {@code null} element, then the iteration index of the invalid element is
  appended to the {@code values} argument.
  </p>
  
  @param <T> the iterable type
  @param iterable the iterable to check, validated not null by this method
  @param message the {@link String#format(String, Object...)} exception message if invalid, not
  null
  @param values the optional values for the formatted exception message, null array not
  recommended
  @return the validated iterable (never {@code null} method for chaining)
  @throws NullPointerException if the array is {@code null}
  @throws IllegalArgumentException if an element is {@code null}