From aee936264ba3ef738dbe6382dccb6cbda7fa0997 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 14 Jul 2024 16:09:53 -0700 Subject: [PATCH] Move to MutableDisposable in vs --- addons/addon-image/src/ImageRenderer.ts | 4 +- addons/addon-image/src/tsconfig.json | 4 +- addons/addon-search/src/SearchAddon.ts | 3 +- addons/addon-webgl/src/WebglRenderer.ts | 3 +- src/browser/CoreBrowserTerminal.ts | 3 +- src/browser/services/CoreBrowserService.ts | 3 +- src/browser/services/RenderService.ts | 3 +- src/common/CoreTerminal.ts | 3 +- src/common/Lifecycle.test.ts | 52 +--------------------- src/common/Lifecycle.ts | 36 --------------- 10 files changed, 18 insertions(+), 96 deletions(-) diff --git a/addons/addon-image/src/ImageRenderer.ts b/addons/addon-image/src/ImageRenderer.ts index 214a2e6b..7937a103 100644 --- a/addons/addon-image/src/ImageRenderer.ts +++ b/addons/addon-image/src/ImageRenderer.ts @@ -6,8 +6,8 @@ import { toRGBA8888 } from 'sixel/lib/Colors'; import { IDisposable } from '@xterm/xterm'; import { ICellSize, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types'; -import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; - +import { Disposable, toDisposable } from 'common/Lifecycle'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; const PLACEHOLDER_LENGTH = 4096; const PLACEHOLDER_HEIGHT = 24; diff --git a/addons/addon-image/src/tsconfig.json b/addons/addon-image/src/tsconfig.json index a18b47c9..aab482e2 100644 --- a/addons/addon-image/src/tsconfig.json +++ b/addons/addon-image/src/tsconfig.json @@ -15,6 +15,7 @@ "paths": { "browser/*": [ "../../../src/browser/*" ], "common/*": [ "../../../src/common/*" ], + "vs/*": [ "../../../src/vs/*" ], "@xterm/addon-image": [ "../typings/addon-image.d.ts" ] } }, @@ -24,6 +25,7 @@ ], "references": [ { "path": "../../../src/browser" }, - { "path": "../../../src/common" } + { "path": "../../../src/common" }, + { "path": "../../../src/vs" } ] } diff --git a/addons/addon-search/src/SearchAddon.ts b/addons/addon-search/src/SearchAddon.ts index 8726b5b3..d9764f03 100644 --- a/addons/addon-search/src/SearchAddon.ts +++ b/addons/addon-search/src/SearchAddon.ts @@ -5,8 +5,9 @@ import type { Terminal, IDisposable, ITerminalAddon, IDecoration } from '@xterm/xterm'; import type { SearchAddon as ISearchApi } from '@xterm/addon-search'; -import { Disposable, toDisposable, disposeArray, MutableDisposable, getDisposeArrayDisposable } from 'common/Lifecycle'; +import { Disposable, toDisposable, disposeArray, getDisposeArrayDisposable } from 'common/Lifecycle'; import { Emitter } from 'vs/base/common/event'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; export interface ISearchOptions { regex?: boolean; diff --git a/addons/addon-webgl/src/WebglRenderer.ts b/addons/addon-webgl/src/WebglRenderer.ts index 663cf70a..8c44a3f4 100644 --- a/addons/addon-webgl/src/WebglRenderer.ts +++ b/addons/addon-webgl/src/WebglRenderer.ts @@ -11,7 +11,7 @@ import { observeDevicePixelDimensions } from 'browser/renderer/shared/DevicePixe import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent, ITextureAtlas } from 'browser/renderer/shared/Types'; import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { Disposable, MutableDisposable, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle'; +import { Disposable, getDisposeArrayDisposable, toDisposable } from 'common/Lifecycle'; import { CharData, IBufferLine, ICellData } from 'common/Types'; import { AttributeData } from 'common/buffer/AttributeData'; import { CellData } from 'common/buffer/CellData'; @@ -26,6 +26,7 @@ import { LinkRenderLayer } from './renderLayer/LinkRenderLayer'; import { IRenderLayer } from './renderLayer/Types'; import { Emitter, Event } from 'vs/base/common/event'; import { addDisposableListener } from 'vs/base/browser/dom'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; export class WebglRenderer extends Disposable implements IRenderer { private _renderLayers: IRenderLayer[]; diff --git a/src/browser/CoreBrowserTerminal.ts b/src/browser/CoreBrowserTerminal.ts index 0263fbfe..6223ba53 100644 --- a/src/browser/CoreBrowserTerminal.ts +++ b/src/browser/CoreBrowserTerminal.ts @@ -43,7 +43,7 @@ import { ICharSizeService, ICharacterJoinerService, ICoreBrowserService, ILinkPr import { ThemeService } from 'browser/services/ThemeService'; import { channels, color } from 'common/Color'; import { CoreTerminal } from 'common/CoreTerminal'; -import { MutableDisposable, toDisposable } from 'common/Lifecycle'; +import { toDisposable } from 'common/Lifecycle'; import * as Browser from 'common/Platform'; import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from 'common/Types'; import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; @@ -58,6 +58,7 @@ import { AccessibilityManager } from './AccessibilityManager'; import { Linkifier } from './Linkifier'; import { Emitter, Event } from 'vs/base/common/event'; import { addDisposableListener } from 'vs/base/browser/dom'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { public textarea: HTMLTextAreaElement | undefined; diff --git a/src/browser/services/CoreBrowserService.ts b/src/browser/services/CoreBrowserService.ts index ca21005d..d13d0beb 100644 --- a/src/browser/services/CoreBrowserService.ts +++ b/src/browser/services/CoreBrowserService.ts @@ -3,10 +3,11 @@ * @license MIT */ -import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; +import { Disposable, toDisposable } from 'common/Lifecycle'; import { ICoreBrowserService } from './Services'; import { Emitter, Event } from 'vs/base/common/event'; import { addDisposableListener } from 'vs/base/browser/dom'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; export class CoreBrowserService extends Disposable implements ICoreBrowserService { public serviceBrand: undefined; diff --git a/src/browser/services/RenderService.ts b/src/browser/services/RenderService.ts index 119813cf..865795ec 100644 --- a/src/browser/services/RenderService.ts +++ b/src/browser/services/RenderService.ts @@ -7,10 +7,11 @@ import { RenderDebouncer } from 'browser/RenderDebouncer'; import { IRenderDebouncerWithCallback } from 'browser/Types'; import { IRenderDimensions, IRenderer } from 'browser/renderer/shared/Types'; import { ICharSizeService, ICoreBrowserService, IRenderService, IThemeService } from 'browser/services/Services'; -import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; +import { Disposable, toDisposable } from 'common/Lifecycle'; import { DebouncedIdleTask } from 'common/TaskQueue'; import { IBufferService, IDecorationService, IOptionsService } from 'common/services/Services'; import { Emitter } from 'vs/base/common/event'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; interface ISelectionState { start: [number, number] | undefined; diff --git a/src/common/CoreTerminal.ts b/src/common/CoreTerminal.ts index a93eb934..8c3b4721 100644 --- a/src/common/CoreTerminal.ts +++ b/src/common/CoreTerminal.ts @@ -21,7 +21,7 @@ * http://linux.die.net/man/7/urxvt */ -import { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle'; +import { Disposable, toDisposable } from 'common/Lifecycle'; import { IInstantiationService, IOptionsService, IBufferService, ILogService, ICharsetService, ICoreService, ICoreMouseService, IUnicodeService, LogLevelEnum, ITerminalOptions, IOscLinkService } from 'common/services/Services'; import { InstantiationService } from 'common/services/InstantiationService'; import { LogService } from 'common/services/LogService'; @@ -39,6 +39,7 @@ import { InputHandler } from 'common/InputHandler'; import { WriteBuffer } from 'common/input/WriteBuffer'; import { OscLinkService } from 'common/services/OscLinkService'; import { Emitter, Event } from 'vs/base/common/event'; +import { MutableDisposable } from 'vs/base/common/lifecycle'; // Only trigger this warning a single time per session let hasWriteSyncWarnHappened = false; diff --git a/src/common/Lifecycle.test.ts b/src/common/Lifecycle.test.ts index 8f8a4932..6f7c7884 100644 --- a/src/common/Lifecycle.test.ts +++ b/src/common/Lifecycle.test.ts @@ -4,8 +4,7 @@ */ import { assert } from 'chai'; -import { Disposable, MutableDisposable } from 'common/Lifecycle'; -import { IDisposable } from 'common/Types'; +import { Disposable } from 'common/Lifecycle'; class TestDisposable extends Disposable { public get isDisposed(): boolean { @@ -44,52 +43,3 @@ describe('Disposable', () => { }); }); }); - -describe('MutableDisposable', () => { - const mutable = new MutableDisposable(); - class TrackedDisposable extends Disposable { - public get isDisposed(): boolean { return this._isDisposed; } - } - describe('value', () => { - it('should set the value', () => { - const d1 = new TrackedDisposable(); - mutable.value = d1; - assert.strictEqual(mutable.value, d1); - assert.isFalse(d1.isDisposed); - }); - it('should dispose of any previous value', () => { - const d1 = new TrackedDisposable(); - const d2 = new TrackedDisposable(); - mutable.value = d1; - mutable.value = d2; - assert.strictEqual(mutable.value, d2); - assert.isTrue(d1.isDisposed); - assert.isFalse(d2.isDisposed); - }); - }); - describe('clear', () => { - it('should clear and dispose of the object', () => { - const d1 = new TrackedDisposable(); - mutable.value = d1; - mutable.clear(); - assert.strictEqual(mutable.value, undefined); - assert.isTrue(d1.isDisposed); - }); - }); - it('dispose', () => { - it('should dispose of the object', () => { - const d1 = new TrackedDisposable(); - mutable.value = d1; - mutable.dispose(); - assert.strictEqual(mutable.value, undefined); - assert.isTrue(d1.isDisposed); - }); - it('should prevent using the MutableDisposable again', () => { - const d1 = new TrackedDisposable(); - mutable.value = d1; - mutable.dispose(); - mutable.value = new TrackedDisposable(); - assert.strictEqual(mutable.value, undefined); - }); - }); -}); diff --git a/src/common/Lifecycle.ts b/src/common/Lifecycle.ts index 6e5ef27d..12548255 100644 --- a/src/common/Lifecycle.ts +++ b/src/common/Lifecycle.ts @@ -47,42 +47,6 @@ export abstract class Disposable implements IDisposable { } } -export class MutableDisposable implements IDisposable { - private _value?: T; - private _isDisposed = false; - - /** - * Gets the value if it exists. - */ - public get value(): T | undefined { - return this._isDisposed ? undefined : this._value; - } - - /** - * Sets the value, disposing of the old value if it exists. - */ - public set value(value: T | undefined) { - if (this._isDisposed || value === this._value) { - return; - } - this._value?.dispose(); - this._value = value; - } - - /** - * Resets the stored value and disposes of the previously stored value. - */ - public clear(): void { - this.value = undefined; - } - - public dispose(): void { - this._isDisposed = true; - this._value?.dispose(); - this._value = undefined; - } -} - /** * Wrap a function in a disposable. */