in model/src/main/java/jetbrains/jetpad/model/collections/set/AbstractObservableSet.java [92:129]
public final Iterator<ItemT> iterator() {
if (size() == 0) {
return Collections.<ItemT>emptySet().iterator();
}
final Iterator<ItemT> iterator = getIterator();
return new Iterator<ItemT>() {
private boolean myCanRemove = false;
private ItemT myLastReturned;
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public ItemT next() {
myLastReturned = iterator.next();
myCanRemove = true;
return myLastReturned;
}
@Override
public void remove() {
if (!myCanRemove) {
throw new IllegalStateException();
}
myCanRemove = false;
doBeforeRemove(myLastReturned);
boolean success = false;
try {
iterator.remove();
success = true;
} finally {
doAfterRemove(myLastReturned, success);
}
}
};
}