diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts index bf2117c79cc..85bb27482fc 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts @@ -10,7 +10,7 @@ import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel'; import { tail } from 'vs/base/common/arrays'; import { timeout } from 'vs/base/common/async'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { combinedDisposable, dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { combinedDisposable, DisposableStore } from 'vs/base/common/lifecycle'; import { isEqual } from 'vs/base/common/resources'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/breadcrumbscontrol'; @@ -50,7 +50,7 @@ import { ILabelService } from 'vs/platform/label/common/label'; class Item extends BreadcrumbsItem { - private readonly _disposables: IDisposable[] = []; + private readonly _disposables = new DisposableStore(); constructor( readonly element: BreadcrumbElement, @@ -61,7 +61,7 @@ class Item extends BreadcrumbsItem { } dispose(): void { - dispose(this._disposables); + this._disposables.dispose(); } equals(other: BreadcrumbsItem): boolean { @@ -88,7 +88,7 @@ class Item extends BreadcrumbsItem { fileDecorations: { colors: this.options.showDecorationColors, badges: false }, }); dom.addClass(container, FileKind[this.element.kind].toLowerCase()); - this._disposables.push(label); + this._disposables.add(label); } else if (this.element instanceof OutlineModel) { // has outline element but not in one @@ -101,7 +101,7 @@ class Item extends BreadcrumbsItem { // provider let label = new IconLabel(container); label.setLabel(this.element.provider.displayName); - this._disposables.push(label); + this._disposables.add(label); } else if (this.element instanceof OutlineElement) { // symbol @@ -114,7 +114,7 @@ class Item extends BreadcrumbsItem { let label = new IconLabel(container); let title = this.element.symbol.name.replace(/\r|\n|\r\n/g, '\u23CE'); label.setLabel(title); - this._disposables.push(label); + this._disposables.add(label); } } } @@ -147,8 +147,8 @@ export class BreadcrumbsControl { readonly domNode: HTMLDivElement; private readonly _widget: BreadcrumbsWidget; - private _disposables = new Array(); - private _breadcrumbsDisposables = new Array(); + private readonly _disposables = new DisposableStore(); + private readonly _breadcrumbsDisposables = new DisposableStore(); private _breadcrumbsPickerShowing = false; private _breadcrumbsPickerIgnoreOnceItem: BreadcrumbsItem | undefined; @@ -178,7 +178,7 @@ export class BreadcrumbsControl { this._widget.onDidSelectItem(this._onSelectEvent, this, this._disposables); this._widget.onDidFocusItem(this._onFocusEvent, this, this._disposables); this._widget.onDidChangeFocus(this._updateCkBreadcrumbsActive, this, this._disposables); - this._disposables.push(attachBreadcrumbsStyler(this._widget, this._themeService, { breadcrumbsBackground: _options.breadcrumbsBackground })); + this._disposables.add(attachBreadcrumbsStyler(this._widget, this._themeService, { breadcrumbsBackground: _options.breadcrumbsBackground })); this._ckBreadcrumbsPossible = BreadcrumbsControl.CK_BreadcrumbsPossible.bindTo(this._contextKeyService); this._ckBreadcrumbsVisible = BreadcrumbsControl.CK_BreadcrumbsVisible.bindTo(this._contextKeyService); @@ -186,12 +186,12 @@ export class BreadcrumbsControl { this._cfUseQuickPick = BreadcrumbsConfig.UseQuickPick.bindTo(_configurationService); - this._disposables.push(breadcrumbsService.register(this._editorGroup.id, this._widget)); + this._disposables.add(breadcrumbsService.register(this._editorGroup.id, this._widget)); } dispose(): void { - this._disposables = dispose(this._disposables); - this._breadcrumbsDisposables = dispose(this._breadcrumbsDisposables); + this._disposables.dispose(); + this._breadcrumbsDisposables.dispose(); this._ckBreadcrumbsPossible.reset(); this._ckBreadcrumbsVisible.reset(); this._ckBreadcrumbsActive.reset(); @@ -209,13 +209,13 @@ export class BreadcrumbsControl { } hide(): void { - this._breadcrumbsDisposables = dispose(this._breadcrumbsDisposables); + this._breadcrumbsDisposables.clear(); this._ckBreadcrumbsVisible.set(false); dom.toggleClass(this.domNode, 'hidden', true); } update(): boolean { - this._breadcrumbsDisposables = dispose(this._breadcrumbsDisposables); + this._breadcrumbsDisposables.clear(); // honor diff editors and such let input = this._editorGroup.activeEditor; @@ -252,10 +252,12 @@ export class BreadcrumbsControl { }; const listener = model.onDidUpdate(updateBreadcrumbs); updateBreadcrumbs(); - this._breadcrumbsDisposables = [model, listener]; + this._breadcrumbsDisposables.clear(); + this._breadcrumbsDisposables.add(model); + this._breadcrumbsDisposables.add(listener); // close picker on hide/update - this._breadcrumbsDisposables.push({ + this._breadcrumbsDisposables.add({ dispose: () => { if (this._breadcrumbsPickerShowing) { this._contextViewService.hideContextView(this);