diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-serializer.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-serializer.ts index 314a3e0ba..7ce93f372 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-serializer.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-serializer.ts @@ -37,6 +37,14 @@ export class VariantAnalysisViewSerializer implements WebviewPanelSerializer { return; } + // Between the time the webview is deserialized and the time the extension + // is fully activated, the user may close the webview. In this case, we + // should not attempt to restore the view. + let disposed = false; + const unregisterOnDidDispose = webviewPanel.onDidDispose(() => { + disposed = true; + }); + const variantAnalysisState: VariantAnalysisState = state as VariantAnalysisState; @@ -46,11 +54,16 @@ export class VariantAnalysisViewSerializer implements WebviewPanelSerializer { variantAnalysisState.variantAnalysisId, ); if (existingView) { + unregisterOnDidDispose.dispose(); await existingView.openView(); webviewPanel.dispose(); return; } + if (disposed) { + return; + } + const view = new VariantAnalysisView( this.ctx, this.app, @@ -58,6 +71,8 @@ export class VariantAnalysisViewSerializer implements WebviewPanelSerializer { manager, ); await view.restoreView(webviewPanel); + + unregisterOnDidDispose.dispose(); } private waitForExtensionFullyLoaded(): Promise<