Path: blob/main/extensions/markdown-language-features/src/util/dispose.ts
3292 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: Iterable<vscode.Disposable>) {8const errors: any[] = [];910for (const disposable of disposables) {11try {12disposable.dispose();13} catch (e) {14errors.push(e);15}16}1718if (errors.length === 1) {19throw errors[0];20} else if (errors.length > 1) {21throw new AggregateError(errors, 'Encountered errors while disposing of store');22}23}2425export interface IDisposable {26dispose(): void;27}2829export abstract class Disposable {30private _isDisposed = false;3132protected _disposables: vscode.Disposable[] = [];3334public dispose(): any {35if (this._isDisposed) {36return;37}38this._isDisposed = true;39disposeAll(this._disposables);40}4142protected _register<T extends IDisposable>(value: T): T {43if (this._isDisposed) {44value.dispose();45} else {46this._disposables.push(value);47}48return value;49}5051protected get isDisposed() {52return this._isDisposed;53}54}555657