From eaaaae0a83a4a632fa971985b222eaa16b0f956c Mon Sep 17 00:00:00 2001 From: Kim Santiago <31145923+kisantia@users.noreply.github.com> Date: Tue, 15 Sep 2020 17:28:04 -0700 Subject: [PATCH] Stop watching for sqlproj updates after the file is closed (#12311) * stop watching for sqlproj updates after the file is closed * remove watcher if project is closed --- .../src/controllers/projectController.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index f523e0368f..2415de41ff 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -39,6 +39,7 @@ export class ProjectsController { private buildHelper: BuildHelper; projects: Project[] = []; + projFileWatchers = new Map(); constructor(projTreeViewProvider: SqlDatabaseProjectTreeViewProvider) { this.projectTreeViewProvider = projTreeViewProvider; @@ -166,6 +167,12 @@ export class ProjectsController { public closeProject(treeNode: BaseProjectTreeItem) { const project = this.getProjectFromContext(treeNode); this.projects = this.projects.filter((e) => { return e !== project; }); + + if (this.projFileWatchers.has(project.projectFilePath)) { + this.projFileWatchers.get(project.projectFilePath)!.dispose(); + this.projFileWatchers.delete(project.projectFilePath); + } + this.refreshProjectsTree(); } @@ -442,6 +449,7 @@ export class ProjectsController { try { await vscode.commands.executeCommand(constants.vscodeOpenCommand, vscode.Uri.file(project.projectFilePath)); const projFileWatcher: vscode.FileSystemWatcher = vscode.workspace.createFileSystemWatcher(project.projectFilePath); + this.projFileWatchers.set(project.projectFilePath, projFileWatcher); projFileWatcher.onDidChange(async (projectFileUri: vscode.Uri) => { const result = await vscode.window.showInformationMessage(constants.reloadProject, constants.yesString, constants.noString); @@ -450,6 +458,15 @@ export class ProjectsController { this.reloadProject(projectFileUri); } }); + + // stop watching for changes to the sqlproj after it's closed + const closeSqlproj = vscode.workspace.onDidCloseTextDocument((d) => { + if (this.projFileWatchers.has(d.uri.fsPath)) { + this.projFileWatchers.get(d.uri.fsPath)!.dispose(); + this.projFileWatchers.delete(d.uri.fsPath); + closeSqlproj.dispose(); + } + }); } catch (err) { vscode.window.showErrorMessage(utils.getErrorMessage(err)); }