@Test public void canEmptyDispose() { new Disposer().dispose(); }
@Override public void dispose() { checkNotDisposed(); Set<Disposable> disposeRun; synchronized (this) { disposeRun = new HashSet<Disposable>(disposables); disposables = null; } for (Disposable toDispose : disposeRun) { toDispose.dispose(); } }
Disposer implements Disposable { @Override public void dispose() { checkNotDisposed(); Set<Disposable> disposeRun; synchronized (this) { disposeRun = new HashSet<Disposable>(disposables); disposables = null; } for (Disposable toDispose : disposeRun) { toDispose.dispose(); } } }
Disposer implements Disposable { @Override public void dispose() { checkNotDisposed(); Set<Disposable> disposeRun; synchronized (this) { disposeRun = new HashSet<Disposable>(disposables); disposables = null; } for (Disposable toDispose : disposeRun) { toDispose.dispose(); } }  }
Disposer implements Disposable { @Override public void dispose() { checkNotDisposed(); Set<Disposable> disposeRun; synchronized (this) { disposeRun = new HashSet<Disposable>(disposables); disposables = null; } for (Disposable toDispose : disposeRun) { toDispose.dispose(); } }  void add(Disposable disposable); void checkNotDisposed(); @Override void dispose(); void dispose(Disposable disposeAndRemove); void tryAdd(Object obj); void tryDispose(Object obj); }
Disposer implements Disposable { @Override public void dispose() { checkNotDisposed(); Set<Disposable> disposeRun; synchronized (this) { disposeRun = new HashSet<Disposable>(disposables); disposables = null; } for (Disposable toDispose : disposeRun) { toDispose.dispose(); } }  void add(Disposable disposable); void checkNotDisposed(); @Override void dispose(); void dispose(Disposable disposeAndRemove); void tryAdd(Object obj); void tryDispose(Object obj);  }