Use DisposableStore instead of IDisposable[]

This commit is contained in:
Matt Bierner 2019-07-03 15:53:53 -07:00
parent 32134adfaa
commit 2ae83d6123

View file

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