docs: static <T> UnmodifiableListIterator<T> forArray(
        final T[] array, final int offset, int length, int index) {
      checkArgument(length >= 0);
      int end = offset + length;
  
      // Technically we should give a slightly more descriptive error on overflow
      Preconditions.checkPositionIndexes(offset, end, array.length);
      Preconditions.checkPositionIndex(index, length);
      if (length == 0) {
        return emptyListIterator();
      }
  
      /*
       * We can't use call the two-arg constructor with arguments (offset, end)
       * because the returned Iterator is a ListIterator that may be moved back
       * past the beginning of the iteration.
       */
      return new AbstractIndexedListIterator<T>(length, index) {
        @Override
        protected T get(int index) {
          return array[offset + index];
        }
      };
    }