1204
1205
dispose() {
1207
>
this._disposed = true;
1208
>
1209
>
// It is bad to have listeners at the time of disposing an emitter, it is worst to have listeners keep the emitter
1210
>
// alive via the reference that's embedded in their disposables. Therefore we loop over all remaining listeners and
1211
>
// unset their subscriptions/disposables. Looping and blaming remaining listeners is done on next tick because the
1212
>
// the following programming pattern is very popular:
1213
>
//
1214
>
// const someModel = this._disposables.add(new ModelObject()); // (1) create and register model
1215
>
// this._disposables.add(someModel.onDidChange(() => { ... }); // (2) subscribe and register model-event listener
1216
>
// ...later...
1217
>
// this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the "overall dispose" is done
1218
>
1219
>
if (this._deliveryQueue?.current === this) {
1220
this._deliveryQueue.reset();
1221
}
1223
if (_enableDisposeWithListenerWarning) {
1224
const listeners = this._listeners;