From ae0d5c909f402400887343028cde696b463026f8 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 19 Nov 2019 10:19:04 +0100 Subject: [PATCH] check for disposed lenses before updating them, #85093 --- src/vs/editor/contrib/codelens/codelensController.ts | 2 +- src/vs/editor/contrib/codelens/codelensWidget.ts | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/contrib/codelens/codelensController.ts b/src/vs/editor/contrib/codelens/codelensController.ts index 852571ac070..40fca0ab3bd 100644 --- a/src/vs/editor/contrib/codelens/codelensController.ts +++ b/src/vs/editor/contrib/codelens/codelensController.ts @@ -367,7 +367,7 @@ export class CodeLensContribution implements editorCommon.IEditorContribution { }); return Promise.all(promises).then(() => { - if (!token.isCancellationRequested) { + if (!token.isCancellationRequested && !lenses[i].isDisposed()) { lenses[i].updateCommands(resolvedSymbols); } }); diff --git a/src/vs/editor/contrib/codelens/codelensWidget.ts b/src/vs/editor/contrib/codelens/codelensWidget.ts index c046279ce16..7470178f85d 100644 --- a/src/vs/editor/contrib/codelens/codelensWidget.ts +++ b/src/vs/editor/contrib/codelens/codelensWidget.ts @@ -68,7 +68,7 @@ class CodeLensContentWidget implements editorBrowser.IContentWidget { line: number, ) { this._editor = editor; - this._id = (CodeLensContentWidget._idPool++).toString(); + this._id = `codelens.widget-${(CodeLensContentWidget._idPool++)}`; this.updatePosition(line); @@ -188,6 +188,7 @@ export class CodeLensWidget { private _contentWidget?: CodeLensContentWidget; private _decorationIds: string[]; private _data: CodeLensItem[]; + private _isDisposed: boolean = false; constructor( data: CodeLensItem[], @@ -250,7 +251,13 @@ export class CodeLensWidget { } if (this._contentWidget) { this._editor.removeContentWidget(this._contentWidget); + this._contentWidget = undefined; } + this._isDisposed = true; + } + + isDisposed(): boolean { + return this._isDisposed; } isValid(): boolean { @@ -315,7 +322,7 @@ export class CodeLensWidget { } update(viewZoneChangeAccessor: editorBrowser.IViewZoneChangeAccessor): void { - if (this.isValid() && this._editor.hasModel()) { + if (this.isValid()) { const range = this._editor.getModel().getDecorationRange(this._decorationIds[0]); if (range) { this._viewZone.afterLineNumber = range.startLineNumber - 1; -- GitLab