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 { 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<IDisposable>();
private _breadcrumbsDisposables = new Array<IDisposable>();
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);