@Override public List<T> subList(int fromIndex, int toIndex) { return new ParentableList<>(parent, delegate.subList(fromIndex, toIndex)); }
@Override public void add(int index, T element) { addImpl(element); delegate.add(index, element); }
@Override public void clear() { for (Object e : this) { removeImpl(e); } delegate.clear(); }
<T> List<T> parentableList(Element parent, List<T> list) { return new ParentableList<>(parent, list); }
<T> List<T> parentableList(Element parent, List<T> list) { return new ParentableList<>(parent, list); }
@Override public boolean addAll(Collection<? extends T> c) { if (c != null) { for (T t : c) { addImpl(t); } } return delegate.addAll(c); }
@Override public T remove(int index) { T element = delegate.remove(index); removeImpl(element); return element; }
@Override public void add(int index, T element) { addImpl(element); delegate.add(index, element); }
@Override public boolean remove(Object o) { boolean removed = delegate.remove(o); if (removed) { removeImpl(o); } return removed; }
@Override public boolean addAll(int index, Collection<? extends T> c) { if (c != null) { for (T t : c) { addImpl(t); } } return delegate.addAll(index, c); }
@Override public boolean add(T e) { addImpl(e); return delegate.add(e); }
@Override public boolean addAll(int index, Collection<? extends T> c) { if (c != null) { for (T t : c) { addImpl(t); } } return delegate.addAll(index, c); }
@Override public boolean addAll(Collection<? extends T> c) { if (c != null) { for (T t : c) { addImpl(t); } } return delegate.addAll(c); }
@Override public boolean removeAll(Collection<?> c) { if (c != null) { for (Object t : c) { removeImpl(t); } } return delegate.removeAll(c); }
@Override public boolean removeAll(Collection<?> c) { if (c != null) { for (Object t : c) { removeImpl(t); } } return delegate.removeAll(c); }
@Override public List<T> subList(int fromIndex, int toIndex) { return new ParentableList<>(parent, delegate.subList(fromIndex, toIndex)); }
@Override public T remove(int index) { T element = delegate.remove(index); removeImpl(element); return element; }
@Override public void clear() { for (Object e : this) { removeImpl(e); } delegate.clear(); }
@Override public boolean remove(Object o) { boolean removed = delegate.remove(o); if (removed) { removeImpl(o); } return removed; }
@Override public T set(int index, T element) { removeImpl(delegate.get(index)); addImpl(element); return delegate.set(index, element); }