From 360e4e4dfa989135f28edc0d6f7e42df33cddf87 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 9 Jul 2019 16:56:52 -0700 Subject: [PATCH] Use mutable disposable to avoid potential leaks --- src/vs/editor/contrib/hover/modesContentHover.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/contrib/hover/modesContentHover.ts b/src/vs/editor/contrib/hover/modesContentHover.ts index 6575790fea8..bf85685a02c 100644 --- a/src/vs/editor/contrib/hover/modesContentHover.ts +++ b/src/vs/editor/contrib/hover/modesContentHover.ts @@ -8,7 +8,7 @@ import * as dom from 'vs/base/browser/dom'; import { CancellationToken } from 'vs/base/common/cancellation'; import { Color, RGBA } from 'vs/base/common/color'; import { IMarkdownString, MarkdownString, isEmptyMarkdownString, markedStringsEquals } from 'vs/base/common/htmlContent'; -import { Disposable, IDisposable, toDisposable, DisposableStore, combinedDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable, toDisposable, DisposableStore, combinedDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; @@ -204,7 +204,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget { private _shouldFocus: boolean; private _colorPicker: ColorPickerWidget | null; - private renderDisposable: IDisposable = Disposable.None; + private readonly renderDisposable = this._register(new MutableDisposable()); constructor( editor: ICodeEditor, @@ -247,8 +247,6 @@ export class ModesContentHoverWidget extends ContentHoverWidget { } dispose(): void { - this.renderDisposable.dispose(); - this.renderDisposable = Disposable.None; this._hoverOperation.cancel(); super.dispose(); } @@ -316,8 +314,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget { this._isChangingDecorations = true; this._highlightDecorations = this._editor.deltaDecorations(this._highlightDecorations, []); this._isChangingDecorations = false; - this.renderDisposable.dispose(); - this.renderDisposable = Disposable.None; + this.renderDisposable.clear(); this._colorPicker = null; } @@ -440,7 +437,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget { this.updateContents(fragment); this._colorPicker.layout(); - this.renderDisposable = combinedDisposable(colorListener, colorChangeListener, widget, ...markdownDisposeables); + this.renderDisposable.value = combinedDisposable(colorListener, colorChangeListener, widget, ...markdownDisposeables); }); } else { if (msg instanceof MarkerHover) { @@ -558,7 +555,7 @@ export class ModesContentHoverWidget extends ContentHoverWidget { } })); } - this.renderDisposable = disposables; + this.renderDisposable.value = disposables; return hoverElement; } -- GitLab