diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index ac9bd8dd7f37..82921d00dac6 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -1155,6 +1155,7 @@ export class Emitter { } else { this._listeners.push(contained); } + this._options?.onDidAddListener?.(this); this._size++; diff --git a/src/vs/base/test/common/event.test.ts b/src/vs/base/test/common/event.test.ts index e20c6124aa8c..9e754ca833b1 100644 --- a/src/vs/base/test/common/event.test.ts +++ b/src/vs/base/test/common/event.test.ts @@ -308,6 +308,27 @@ suite('Event', function () { assert.strictEqual(lastCount, 1); }); + test('onDidAddListener', () => { + let count = 0; + const a = ds.add(new Emitter({ + onDidAddListener() { count += 1; } + })); + + assert.strictEqual(count, 0); + + let subscription = ds.add(a.event(function () { })); + assert.strictEqual(count, 1); + + subscription.dispose(); + assert.strictEqual(count, 1); + + subscription = ds.add(a.event(function () { })); + assert.strictEqual(count, 2); + + subscription.dispose(); + assert.strictEqual(count, 2); + }); + test('onWillRemoveListener', () => { let count = 0; const a = ds.add(new Emitter({