@Override public void clear() { final Collection<E> copy = Lists.newArrayList(delegate()); super.clear(); for (E element : copy) { listener.removed(element); } }
@Override public boolean remove(Object object) { final boolean removed = super.remove(object); if (removed) { @SuppressWarnings("unchecked") final E element = (E) object; listener.removed(element); } return removed; }
@Override public boolean retainAll(Collection<?> elements) { final Collection<E> copy = Lists.newArrayList(delegate()); // this leaves all elements in copy which will be deleted in our collection copy.removeAll(elements); final boolean retained = super.retainAll(elements); for (E element : copy) { listener.removed(element); } return retained; }