public final Iterator iterator()

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);
        }
      }
    };
  }