public static <T> Iterable<T> lazy(final Provider<? extends Iterable<T>> provider) {
    return new Iterable<T>() {
      private Iterable<T> myDelegate = null;
      @NotNull
      @Override
      public Iterator<T> iterator() {
        return getDelegate().iterator();
      }

      private Iterable<T> getDelegate() {
        Iterable<T> delegate = myDelegate;
        if (delegate == null) {
          myDelegate = delegate = provider.get();
        }
        return delegate;
      }
    };
  }
public static <T> Iterable<T> lazy(final Provider<? extends Iterable<T>> provider)