From 73e41f8d610a841fc766a0f67ad1e26a862776df Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 22 May 2023 12:19:53 +0100 Subject: [PATCH 1/2] Mark AppEventEmitter as disposable --- extensions/ql-vscode/src/common/events.ts | 2 +- .../ql-vscode/src/databases/config/db-config-store.ts | 4 +++- extensions/ql-vscode/src/databases/db-manager.ts | 9 +++++++-- extensions/ql-vscode/test/__mocks__/appMock.ts | 4 ++++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/extensions/ql-vscode/src/common/events.ts b/extensions/ql-vscode/src/common/events.ts index 67e4574053e..16ba4821cf8 100644 --- a/extensions/ql-vscode/src/common/events.ts +++ b/extensions/ql-vscode/src/common/events.ts @@ -4,7 +4,7 @@ export interface AppEvent { (listener: (event: T) => void): Disposable; } -export interface AppEventEmitter { +export interface AppEventEmitter extends Disposable { event: AppEvent; fire(data: T): void; } diff --git a/extensions/ql-vscode/src/databases/config/db-config-store.ts b/extensions/ql-vscode/src/databases/config/db-config-store.ts index 3013d164f50..54b216929fd 100644 --- a/extensions/ql-vscode/src/databases/config/db-config-store.ts +++ b/extensions/ql-vscode/src/databases/config/db-config-store.ts @@ -61,7 +61,9 @@ export class DbConfigStore extends DisposableObject { this.configErrors = []; this.configWatcher = undefined; this.configValidator = new DbConfigValidator(app.extensionPath); - this.onDidChangeConfigEventEmitter = app.createEventEmitter(); + this.onDidChangeConfigEventEmitter = this.push( + app.createEventEmitter(), + ); this.onDidChangeConfig = this.onDidChangeConfigEventEmitter.event; } diff --git a/extensions/ql-vscode/src/databases/db-manager.ts b/extensions/ql-vscode/src/databases/db-manager.ts index cc85bccc01e..74c45056bca 100644 --- a/extensions/ql-vscode/src/databases/db-manager.ts +++ b/extensions/ql-vscode/src/databases/db-manager.ts @@ -1,6 +1,7 @@ import { App } from "../common/app"; import { AppEvent, AppEventEmitter } from "../common/events"; import { ValueResult } from "../common/value-result"; +import { DisposableObject } from "../pure/disposable-object"; import { DbConfigStore } from "./config/db-config-store"; import { DbItem, @@ -23,7 +24,7 @@ import { import { createRemoteTree } from "./db-tree-creator"; import { DbConfigValidationError } from "./db-validation-errors"; -export class DbManager { +export class DbManager extends DisposableObject { public readonly onDbItemsChanged: AppEvent; public static readonly DB_EXPANDED_STATE_KEY = "db_expanded"; private readonly onDbItemsChangesEventEmitter: AppEventEmitter; @@ -32,7 +33,11 @@ export class DbManager { private readonly app: App, private readonly dbConfigStore: DbConfigStore, ) { - this.onDbItemsChangesEventEmitter = app.createEventEmitter(); + super(); + + this.onDbItemsChangesEventEmitter = this.push( + app.createEventEmitter(), + ); this.onDbItemsChanged = this.onDbItemsChangesEventEmitter.event; this.dbConfigStore.onDidChangeConfig(() => { diff --git a/extensions/ql-vscode/test/__mocks__/appMock.ts b/extensions/ql-vscode/test/__mocks__/appMock.ts index d53fa58b968..418310d5b12 100644 --- a/extensions/ql-vscode/test/__mocks__/appMock.ts +++ b/extensions/ql-vscode/test/__mocks__/appMock.ts @@ -63,4 +63,8 @@ export class MockAppEventEmitter implements AppEventEmitter { public fire(): void { // no-op } + + public dispose() { + // no-op + } } From f855d81526c5744ad93eeec91c2549d414162b8c Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 22 May 2023 13:34:48 +0100 Subject: [PATCH 2/2] Make sure DbManager is also disposed --- extensions/ql-vscode/src/databases/db-module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/ql-vscode/src/databases/db-module.ts b/extensions/ql-vscode/src/databases/db-module.ts index 8d47f75a8a6..0ca2898db36 100644 --- a/extensions/ql-vscode/src/databases/db-module.ts +++ b/extensions/ql-vscode/src/databases/db-module.ts @@ -17,7 +17,7 @@ export class DbModule extends DisposableObject { super(); this.dbConfigStore = new DbConfigStore(app); - this.dbManager = new DbManager(app, this.dbConfigStore); + this.dbManager = this.push(new DbManager(app, this.dbConfigStore)); } public static async initialize(app: App): Promise {