get rid of EventEmitter for editor inputs, models and workbench components

This commit is contained in:
Benjamin Pasero
2016-09-08 15:08:42 +02:00
parent ae95c243ae
commit 4f35ddd286
17 changed files with 98 additions and 74 deletions

View File

@@ -7,10 +7,10 @@
import nls = require('vs/nls');
import {TPromise} from 'vs/base/common/winjs.base';
import types = require('vs/base/common/types');
import {once} from 'vs/base/common/event';
import URI from 'vs/base/common/uri';
import {getPathLabel, IWorkspaceProvider} from 'vs/base/common/labels';
import {isBinaryMime} from 'vs/base/common/mime';
import {EventType} from 'vs/base/common/events';
import {EditorModel, IFileEditorInput, EditorInput, BaseDiffEditorInput} from 'vs/workbench/common/editor';
import {BaseTextEditorModel} from 'vs/workbench/common/editor/textEditorModel';
import {DiffEditorModel} from 'vs/workbench/common/editor/diffEditorModel';
@@ -46,13 +46,15 @@ export class DiffEditorInput extends BaseDiffEditorInput {
private registerListeners(): void {
// When the original or modified input gets disposed, dispose this diff editor input
this._toUnbind.push(this.originalInput.addListener2(EventType.DISPOSE, () => {
const onceOriginalDisposed = once(this.originalInput.onDispose);
this._toUnbind.push(onceOriginalDisposed(() => {
if (!this.isDisposed()) {
this.dispose();
}
}));
this._toUnbind.push(this.modifiedInput.addListener2(EventType.DISPOSE, () => {
const onceModifiedDisposed = once(this.modifiedInput.onDispose);
this._toUnbind.push(onceModifiedDisposed(() => {
if (!this.isDisposed()) {
this.dispose();
}

View File

@@ -5,7 +5,7 @@
'use strict';
import Event, {Emitter} from 'vs/base/common/event';
import Event, {Emitter, once} from 'vs/base/common/event';
import {IEditorRegistry, Extensions, EditorInput, getUntitledOrFileResource, IEditorStacksModel, IEditorGroup, IEditorIdentifier, IGroupEvent, GroupIdentifier, IStacksModelChangeEvent, IWorkbenchEditorConfiguration, EditorOpenPositioning} from 'vs/workbench/common/editor';
import URI from 'vs/base/common/uri';
import {IStorageService, StorageScope} from 'vs/platform/storage/common/storage';
@@ -296,7 +296,8 @@ export class EditorGroup implements IEditorGroup {
const unbind: IDisposable[] = [];
// Re-emit disposal of editor input as our own event
unbind.push(editor.addOneTimeDisposableListener('dispose', () => {
const onceDispose = once(editor.onDispose);
unbind.push(onceDispose(() => {
if (this.indexOf(editor) >= 0) {
this._onEditorDisposed.fire(editor);
}

View File

@@ -10,7 +10,6 @@ import {EditorModel, EditorInput} from 'vs/workbench/common/editor';
import {ResourceEditorModel} from 'vs/workbench/common/editor/resourceEditorModel';
import {IModel} from 'vs/editor/common/editorCommon';
import URI from 'vs/base/common/uri';
import {EventType} from 'vs/base/common/events';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {IModelService} from 'vs/editor/common/services/modelService';
import {IDisposable} from 'vs/base/common/lifecycle';
@@ -42,7 +41,7 @@ export class ResourceEditorInput extends EditorInput {
} else {
array.unshift(provider);
}
return {
dispose() {
let array = ResourceEditorInput.registry[scheme];
@@ -158,7 +157,7 @@ export class ResourceEditorInput extends EditorInput {
// Otherwise Create Model and handle dispose event
return ResourceEditorInput.getOrCreateModel(this.modelService, this.resource).then(() => {
let model = this.instantiationService.createInstance(ResourceEditorModel, this.resource);
const unbind = model.addListener2(EventType.DISPOSE, () => {
const unbind = model.onDispose(() => {
this.cachedModel = null; // make sure we do not dispose model again
unbind.dispose();
this.dispose();