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/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 { 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 + } }