Skip to content

Commit bb0603c

Browse files
author
Benjamin Pasero
committed
adopt more DisposableStore/MutableDisposable (microsoft#74922)
1 parent 11b88a3 commit bb0603c

40 files changed

Lines changed: 265 additions & 356 deletions

src/vs/platform/dialogs/browser/dialogService.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { Dialog } from 'vs/base/browser/ui/dialog/dialog';
1212
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
1313
import { IThemeService } from 'vs/platform/theme/common/themeService';
1414
import { attachDialogStyler } from 'vs/platform/theme/common/styler';
15-
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
15+
import { DisposableStore } from 'vs/base/common/lifecycle';
1616
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
1717
import { EventHelper } from 'vs/base/browser/dom';
1818

@@ -70,7 +70,7 @@ export class DialogService implements IDialogService {
7070
async show(severity: Severity, message: string, buttons: string[], options?: IDialogOptions): Promise<number> {
7171
this.logService.trace('DialogService#show', message);
7272

73-
const dialogDisposables: IDisposable[] = [];
73+
const dialogDisposables = new DisposableStore();
7474
const dialog = new Dialog(
7575
this.layoutService.container,
7676
message,
@@ -84,11 +84,11 @@ export class DialogService implements IDialogService {
8484
}
8585
});
8686

87-
dialogDisposables.push(dialog);
88-
dialogDisposables.push(attachDialogStyler(dialog, this.themeService));
87+
dialogDisposables.add(dialog);
88+
dialogDisposables.add(attachDialogStyler(dialog, this.themeService));
8989

9090
const choice = await dialog.show();
91-
dispose(dialogDisposables);
91+
dialogDisposables.dispose();
9292

9393
return choice;
9494
}

src/vs/platform/progress/common/progress.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { createDecorator, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
77
import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation';
8-
import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
8+
import { toDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle';
99
import { IAction } from 'vs/base/common/actions';
1010

1111
export const IProgressService = createDecorator<IProgressService>('progressService');
@@ -124,15 +124,17 @@ export interface IOperation {
124124
stop(): void;
125125
}
126126

127-
export class LongRunningOperation {
127+
export class LongRunningOperation extends Disposable {
128128
private currentOperationId = 0;
129-
private currentOperationDisposables: IDisposable[] = [];
129+
private readonly currentOperationDisposables = this._register(new DisposableStore());
130130
private currentProgressRunner: IProgressRunner;
131131
private currentProgressTimeout: any;
132132

133133
constructor(
134134
private localProgressService: ILocalProgressService
135-
) { }
135+
) {
136+
super();
137+
}
136138

137139
start(progressDelay: number): IOperation {
138140

@@ -148,11 +150,9 @@ export class LongRunningOperation {
148150
}
149151
}, progressDelay);
150152

151-
this.currentOperationDisposables.push(
152-
toDisposable(() => clearTimeout(this.currentProgressTimeout)),
153-
toDisposable(() => newOperationToken.cancel()),
154-
toDisposable(() => this.currentProgressRunner ? this.currentProgressRunner.done() : undefined)
155-
);
153+
this.currentOperationDisposables.add(toDisposable(() => clearTimeout(this.currentProgressTimeout)));
154+
this.currentOperationDisposables.add(toDisposable(() => newOperationToken.cancel()));
155+
this.currentOperationDisposables.add(toDisposable(() => this.currentProgressRunner ? this.currentProgressRunner.done() : undefined));
156156

157157
return {
158158
id: newOperationId,
@@ -168,11 +168,7 @@ export class LongRunningOperation {
168168

169169
private doStop(operationId: number): void {
170170
if (this.currentOperationId === operationId) {
171-
this.currentOperationDisposables = dispose(this.currentOperationDisposables);
171+
this.currentOperationDisposables.clear();
172172
}
173173
}
174-
175-
dispose(): void {
176-
this.currentOperationDisposables = dispose(this.currentOperationDisposables);
177-
}
178174
}

src/vs/platform/windows/common/windows.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
1313
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
1414
import { ExportData } from 'vs/base/common/performance';
1515
import { LogLevel } from 'vs/platform/log/common/log';
16-
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
16+
import { DisposableStore, Disposable } from 'vs/base/common/lifecycle';
1717
import { URI, UriComponents } from 'vs/base/common/uri';
1818
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1919
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
@@ -451,13 +451,15 @@ export interface IRunKeybindingInWindowRequest {
451451
userSettingsLabel: string;
452452
}
453453

454-
export class ActiveWindowManager implements IDisposable {
454+
export class ActiveWindowManager extends Disposable {
455455

456-
private disposables: IDisposable[] = [];
456+
private readonly disposables = this._register(new DisposableStore());
457457
private firstActiveWindowIdPromise: CancelablePromise<number | undefined> | undefined;
458458
private activeWindowId: number | undefined;
459459

460460
constructor(@IWindowsService windowsService: IWindowsService) {
461+
super();
462+
461463
const onActiveWindowChange = Event.latch(Event.any(windowsService.onWindowOpen, windowsService.onWindowFocus));
462464
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
463465

@@ -478,10 +480,7 @@ export class ActiveWindowManager implements IDisposable {
478480

479481
async getActiveClientId(): Promise<string | undefined> {
480482
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
481-
return `window:${id}`;
482-
}
483483

484-
dispose() {
485-
this.disposables = dispose(this.disposables);
484+
return `window:${id}`;
486485
}
487486
}

src/vs/platform/windows/electron-main/windowsService.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import * as nls from 'vs/nls';
77
import * as os from 'os';
8-
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
8+
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
99
import { assign } from 'vs/base/common/objects';
1010
import { URI } from 'vs/base/common/uri';
1111
import product from 'vs/platform/product/node/product';
@@ -23,12 +23,13 @@ import { Schemas } from 'vs/base/common/network';
2323
import { mnemonicButtonLabel } from 'vs/base/common/labels';
2424
import { isMacintosh, isLinux } from 'vs/base/common/platform';
2525
import { ILogService } from 'vs/platform/log/common/log';
26+
import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
2627

27-
export class WindowsService implements IWindowsService, IURLHandler, IDisposable {
28+
export class WindowsService extends Disposable implements IWindowsService, IURLHandler {
2829

29-
_serviceBrand: any;
30+
_serviceBrand: ServiceIdentifier<any>;
3031

31-
private disposables: IDisposable[] = [];
32+
private readonly disposables = this._register(new DisposableStore());
3233

3334
private _activeWindowId: number | undefined;
3435

@@ -52,6 +53,8 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
5253
@IHistoryMainService private readonly historyService: IHistoryMainService,
5354
@ILogService private readonly logService: ILogService
5455
) {
56+
super();
57+
5558
urlService.registerHandler(this);
5659

5760
// remember last active window id
@@ -460,8 +463,4 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
460463

461464
return undefined;
462465
}
463-
464-
dispose(): void {
465-
this.disposables = dispose(this.disposables);
466-
}
467466
}

src/vs/workbench/api/common/extHostTreeViews.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ class ExtHostTreeView<T> extends Disposable {
442442
}
443443

444444
private createTreeNode(element: T, extensionTreeItem: vscode.TreeItem, parent: TreeNode | Root): TreeNode {
445-
const disposable: DisposableStore = new DisposableStore();
445+
const disposable = new DisposableStore();
446446
const handle = this.createHandle(element, extensionTreeItem, parent);
447447
const icon = this.getLightIconPath(extensionTreeItem);
448448
const item = {
@@ -464,7 +464,7 @@ class ExtHostTreeView<T> extends Disposable {
464464
item,
465465
parent,
466466
children: undefined,
467-
dispose() { disposable.dispose(); }
467+
dispose(): void { disposable.dispose(); }
468468
};
469469
}
470470

src/vs/workbench/browser/actions/layoutActions.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { CommandsRegistry } from 'vs/platform/commands/common/commands';
1616
import { IEditorGroupsService, GroupOrientation } from 'vs/workbench/services/editor/common/editorGroupsService';
1717
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
1818
import { KeyMod, KeyCode, KeyChord } from 'vs/base/common/keyCodes';
19-
import { dispose, IDisposable } from 'vs/base/common/lifecycle';
19+
import { DisposableStore } from 'vs/base/common/lifecycle';
2020
import { MenuBarVisibility } from 'vs/platform/windows/common/windows';
2121
import { isWindows, isLinux } from 'vs/base/common/platform';
2222
import { IsMacNativeContext } from 'vs/workbench/browser/contextkeys';
@@ -110,7 +110,7 @@ export class ToggleEditorLayoutAction extends Action {
110110
static readonly ID = 'workbench.action.toggleEditorGroupLayout';
111111
static readonly LABEL = nls.localize('flipLayout', "Toggle Vertical/Horizontal Editor Layout");
112112

113-
private toDispose: IDisposable[];
113+
private readonly toDispose = this._register(new DisposableStore());
114114

115115
constructor(
116116
id: string,
@@ -119,17 +119,15 @@ export class ToggleEditorLayoutAction extends Action {
119119
) {
120120
super(id, label);
121121

122-
this.toDispose = [];
123-
124122
this.class = 'flip-editor-layout';
125123
this.updateEnablement();
126124

127125
this.registerListeners();
128126
}
129127

130128
private registerListeners(): void {
131-
this.toDispose.push(this.editorGroupService.onDidAddGroup(() => this.updateEnablement()));
132-
this.toDispose.push(this.editorGroupService.onDidRemoveGroup(() => this.updateEnablement()));
129+
this.toDispose.add(this.editorGroupService.onDidAddGroup(() => this.updateEnablement()));
130+
this.toDispose.add(this.editorGroupService.onDidRemoveGroup(() => this.updateEnablement()));
133131
}
134132

135133
private updateEnablement(): void {
@@ -142,12 +140,6 @@ export class ToggleEditorLayoutAction extends Action {
142140

143141
return Promise.resolve();
144142
}
145-
146-
dispose(): void {
147-
this.toDispose = dispose(this.toDispose);
148-
149-
super.dispose();
150-
}
151143
}
152144

153145
CommandsRegistry.registerCommand('_workbench.editor.setGroupOrientation', function (accessor: ServicesAccessor, args: [GroupOrientation]) {

src/vs/workbench/browser/layout.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle';
6+
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
77
import { Event, Emitter } from 'vs/base/common/event';
88
import { EventType, addDisposableListener, addClass, removeClass, isAncestor, getClientArea, position, size, EventHelper } from 'vs/base/browser/dom';
99
import { onDidChangeFullscreen, isFullscreen, getZoomFactor } from 'vs/base/browser/browser';
@@ -159,7 +159,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
159159
transitionedToCenteredEditorLayout: false,
160160
wasSideBarVisible: false,
161161
wasPanelVisible: false,
162-
transitionDisposeables: [] as IDisposable[]
162+
transitionDisposeables: new DisposableStore()
163163
},
164164

165165
// TODO @misolori remove before shipping stable
@@ -582,7 +582,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
582582

583583
toggleZenMode(skipLayout?: boolean, restoring = false): void {
584584
this.state.zenMode.active = !this.state.zenMode.active;
585-
this.state.zenMode.transitionDisposeables = dispose(this.state.zenMode.transitionDisposeables);
585+
this.state.zenMode.transitionDisposeables.clear();
586586

587587
const setLineNumbers = (lineNumbers: any) => this.editorService.visibleTextEditorWidgets.forEach(editor => editor.updateOptions({ lineNumbers }));
588588

@@ -621,11 +621,11 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi
621621

622622
if (config.hideLineNumbers) {
623623
setLineNumbers('off');
624-
this.state.zenMode.transitionDisposeables.push(this.editorService.onDidVisibleEditorsChange(() => setLineNumbers('off')));
624+
this.state.zenMode.transitionDisposeables.add(this.editorService.onDidVisibleEditorsChange(() => setLineNumbers('off')));
625625
}
626626

627627
if (config.hideTabs && this.editorGroupService.partOptions.showTabs) {
628-
this.state.zenMode.transitionDisposeables.push(this.editorGroupService.enforcePartOptions({ showTabs: false }));
628+
this.state.zenMode.transitionDisposeables.add(this.editorGroupService.enforcePartOptions({ showTabs: false }));
629629
}
630630

631631
if (config.centerLayout) {

src/vs/workbench/browser/parts/activitybar/activitybarActions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export class GlobalActivityActionViewItem extends ActivityActionViewItem {
147147
private showContextMenu(): void {
148148
const globalActivityActions: IAction[] = [];
149149
const globalActivityMenu = this.menuService.createMenu(MenuId.GlobalActivity, this.contextKeyService);
150-
createAndFillInActionBarActions(globalActivityMenu, undefined, { primary: [], secondary: globalActivityActions });
150+
const actionsDisposable = createAndFillInActionBarActions(globalActivityMenu, undefined, { primary: [], secondary: globalActivityActions });
151151

152152
const containerPosition = DOM.getDomNodePagePosition(this.container);
153153
const location = { x: containerPosition.left + containerPosition.width / 2, y: containerPosition.top };
@@ -156,7 +156,7 @@ export class GlobalActivityActionViewItem extends ActivityActionViewItem {
156156
getActions: () => globalActivityActions,
157157
onHide: () => {
158158
globalActivityMenu.dispose();
159-
dispose(globalActivityActions);
159+
dispose(actionsDisposable);
160160
}
161161
});
162162
}

src/vs/workbench/browser/parts/activitybar/activitybarPart.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
1515
import { IBadge } from 'vs/workbench/services/activity/common/activity';
1616
import { IWorkbenchLayoutService, Parts, Position as SideBarPosition } from 'vs/workbench/services/layout/browser/layoutService';
1717
import { IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
18-
import { IDisposable, toDisposable, dispose } from 'vs/base/common/lifecycle';
18+
import { IDisposable, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
1919
import { ToggleActivityBarVisibilityAction } from 'vs/workbench/browser/actions/layoutActions';
2020
import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';
2121
import { ACTIVITY_BAR_BACKGROUND, ACTIVITY_BAR_BORDER, ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND, ACTIVITY_BAR_DRAG_AND_DROP_BACKGROUND, ACTIVITY_BAR_INACTIVE_FOREGROUND } from 'vs/workbench/common/theme';
@@ -121,15 +121,13 @@ export class ActivitybarPart extends Part implements IActivityBarService {
121121
this._register(this.viewletService.onDidViewletClose(viewlet => this.compositeBar.deactivateComposite(viewlet.getId())));
122122

123123
// Extension registration
124-
let disposables: IDisposable[] = [];
124+
let disposables = this._register(new DisposableStore());
125125
this._register(this.extensionService.onDidRegisterExtensions(() => {
126-
disposables = dispose(disposables);
126+
disposables.clear();
127127
this.onDidRegisterExtensions();
128128
this.compositeBar.onDidChange(() => this.saveCachedViewlets(), this, disposables);
129129
this.storageService.onDidChangeStorage(e => this.onDidStorageChange(e), this, disposables);
130130
}));
131-
132-
this._register(toDisposable(() => dispose(disposables)));
133131
}
134132

135133
private onDidRegisterExtensions(): void {
@@ -172,6 +170,7 @@ export class ActivitybarPart extends Part implements IActivityBarService {
172170

173171
private showGlobalActivity(badge: IBadge, clazz?: string): IDisposable {
174172
this.globalActivityAction.setBadge(badge, clazz);
173+
175174
return toDisposable(() => this.globalActivityAction.setBadge(undefined));
176175
}
177176

src/vs/workbench/browser/parts/compositeBar.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ export class CompositeBar extends Widget implements ICompositeBar {
201201

202202
const activity: ICompositeActivity = { badge, clazz, priority };
203203
this.model.addActivity(compositeId, activity);
204+
204205
return toDisposable(() => this.model.removeActivity(compositeId, activity));
205206
}
206207

0 commit comments

Comments
 (0)