Path: blob/main/extensions/media-preview/src/util/dispose.ts
4774 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as vscode from 'vscode';67export function disposeAll(disposables: vscode.Disposable[]) {8while (disposables.length) {9const item = disposables.pop();10if (item) {11item.dispose();12}13}14}1516export abstract class Disposable {17private _isDisposed = false;1819protected _disposables: vscode.Disposable[] = [];2021public dispose(): any {22if (this._isDisposed) {23return;24}25this._isDisposed = true;26disposeAll(this._disposables);27}2829protected _register<T extends vscode.Disposable>(value: T): T {30if (this._isDisposed) {31value.dispose();32} else {33this._disposables.push(value);34}35return value;36}3738protected get isDisposed() {39return this._isDisposed;40}41}4243