package io.gitlab.jfronny.gson.compile.processor.util; import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.function.*; import java.util.stream.Stream; public class DelegateList implements List { private final List delegate; public DelegateList(List delegate) { Objects.requireNonNull(delegate); this.delegate = delegate instanceof DelegateList dl ? dl.unwrap() : delegate; } @Override public int size() { return delegate.size(); } @Override public boolean isEmpty() { return delegate.isEmpty(); } @Override public boolean contains(Object o) { return delegate.contains(o); } @NotNull @Override public Iterator iterator() { return delegate.iterator(); } @Override public void forEach(Consumer action) { delegate.forEach(action); } @NotNull @Override public Object[] toArray() { return delegate.toArray(); } @NotNull @Override public T1[] toArray(@NotNull T1[] t1s) { return delegate.toArray(t1s); } @Override public T1[] toArray(IntFunction generator) { return delegate.toArray(generator); } @Override public boolean add(T t) { return delegate.add(t); } @Override public boolean remove(Object o) { return delegate.remove(o); } @Override public boolean containsAll(@NotNull Collection collection) { return delegate.containsAll(collection); } @Override public boolean addAll(@NotNull Collection collection) { return delegate.addAll(collection); } @Override public boolean addAll(int i, @NotNull Collection collection) { return delegate.addAll(i, collection); } @Override public boolean removeAll(@NotNull Collection collection) { return delegate.removeAll(collection); } @Override public boolean removeIf(Predicate filter) { return delegate.removeIf(filter); } @Override public boolean retainAll(@NotNull Collection collection) { return delegate.retainAll(collection); } @Override public void replaceAll(UnaryOperator operator) { delegate.replaceAll(operator); } @Override public void sort(Comparator c) { delegate.sort(c); } @Override public void clear() { delegate.clear(); } @Override public T get(int i) { return delegate.get(i); } @Override public T set(int i, T t) { return delegate.set(i, t); } @Override public void add(int i, T t) { delegate.add(i, t); } @Override public T remove(int i) { return delegate.remove(i); } @Override public int indexOf(Object o) { return delegate.indexOf(o); } @Override public int lastIndexOf(Object o) { return delegate.lastIndexOf(o); } @NotNull @Override public ListIterator listIterator() { return delegate.listIterator(); } @NotNull @Override public ListIterator listIterator(int i) { return delegate.listIterator(i); } @NotNull @Override public List subList(int i, int i1) { return delegate.subList(i, i1); } @Override public Spliterator spliterator() { return delegate.spliterator(); } @Override public Stream stream() { return delegate.stream(); } @Override public Stream parallelStream() { return delegate.parallelStream(); } @Override public int hashCode() { return delegate.hashCode(); } @Override public boolean equals(Object obj) { return obj instanceof DelegateList dl ? delegate.equals(dl.delegate) : delegate.equals(obj); } @Override public String toString() { return delegate.toString(); } private List unwrap() { return delegate instanceof DelegateList dl ? dl.unwrap() : delegate; } }