diff --git a/src/vs/base/common/eventEmitter.ts b/src/vs/base/common/eventEmitter.ts index dc4a16d2499d52ee43738f77a04c0540e9b77110..c761e8cc7e6e88e128d76bc0f8f78458e08d408e 100644 --- a/src/vs/base/common/eventEmitter.ts +++ b/src/vs/base/common/eventEmitter.ts @@ -9,20 +9,12 @@ import { IDisposable } from 'vs/base/common/lifecycle'; export class EmitterEvent { - private _type: string; - private _data: any; + public readonly type: string; + public readonly data: any; constructor(eventType: string = null, data: any = null) { - this._type = eventType; - this._data = data; - } - - public getType(): string { - return this._type; - } - - public getData(): any { - return this._data; + this.type = eventType; + this.data = data; } } @@ -36,7 +28,7 @@ export interface BulkListenerCallback { export interface IEventEmitter extends IDisposable { addListener(eventType: string, listener: ListenerCallback): IDisposable; - addOneTimeDisposableListener(eventType: string, listener: ListenerCallback): IDisposable; + addOneTimeListener(eventType: string, listener: ListenerCallback): IDisposable; addBulkListener(listener: BulkListenerCallback): IDisposable; addEmitter(eventEmitter: IEventEmitter): IDisposable; } @@ -60,7 +52,7 @@ export class EventEmitter implements IEventEmitter { this._deferredCnt = 0; if (allowedEventTypes) { this._allowedEventTypes = {}; - for (var i = 0; i < allowedEventTypes.length; i++) { + for (let i = 0; i < allowedEventTypes.length; i++) { this._allowedEventTypes[allowedEventTypes[i]] = true; } } else { @@ -91,7 +83,7 @@ export class EventEmitter implements IEventEmitter { this._listeners[eventType] = [listener]; } - var bound = this; + let bound = this; return { dispose: () => { if (!bound) { @@ -108,7 +100,7 @@ export class EventEmitter implements IEventEmitter { }; } - public addOneTimeDisposableListener(eventType: string, listener: ListenerCallback): IDisposable { + public addOneTimeListener(eventType: string, listener: ListenerCallback): IDisposable { const disposable = this.addListener(eventType, value => { disposable.dispose(); listener(value); @@ -130,32 +122,29 @@ export class EventEmitter implements IEventEmitter { public addEmitter(eventEmitter: IEventEmitter): IDisposable { return eventEmitter.addBulkListener((events: EmitterEvent[]): void => { - var newEvents = events; - if (this._deferredCnt === 0) { - this._emitEvents(newEvents); + this._emitEvents(events); } else { // Collect for later - this._collectedEvents.push.apply(this._collectedEvents, newEvents); + this._collectedEvents.push.apply(this._collectedEvents, events); } }); } private _removeListener(eventType: string, listener: ListenerCallback): void { if (this._listeners.hasOwnProperty(eventType)) { - var listeners = this._listeners[eventType]; - for (var i = 0, len = listeners.length; i < len; i++) { + let listeners = this._listeners[eventType]; + for (let i = 0, len = listeners.length; i < len; i++) { if (listeners[i] === listener) { listeners.splice(i, 1); break; } } - } } private _removeBulkListener(listener: BulkListenerCallback): void { - for (var i = 0, len = this._bulkListeners.length; i < len; i++) { + for (let i = 0, len = this._bulkListeners.length; i < len; i++) { if (this._bulkListeners[i] === listener) { this._bulkListeners.splice(i, 1); break; @@ -165,16 +154,16 @@ export class EventEmitter implements IEventEmitter { protected _emitToSpecificTypeListeners(eventType: string, data: any): void { if (this._listeners.hasOwnProperty(eventType)) { - var listeners = this._listeners[eventType].slice(0); - for (var i = 0, len = listeners.length; i < len; i++) { + const listeners = this._listeners[eventType].slice(0); + for (let i = 0, len = listeners.length; i < len; i++) { safeInvoke1Arg(listeners[i], data); } } } protected _emitToBulkListeners(events: EmitterEvent[]): void { - var bulkListeners = this._bulkListeners.slice(0); - for (var i = 0, len = bulkListeners.length; i < len; i++) { + const bulkListeners = this._bulkListeners.slice(0); + for (let i = 0, len = bulkListeners.length; i < len; i++) { safeInvoke1Arg(bulkListeners[i], events); } } @@ -183,10 +172,10 @@ export class EventEmitter implements IEventEmitter { if (this._bulkListeners.length > 0) { this._emitToBulkListeners(events); } - for (var i = 0, len = events.length; i < len; i++) { - var e = events[i]; + for (let i = 0, len = events.length; i < len; i++) { + const e = events[i]; - this._emitToSpecificTypeListeners(e.getType(), e.getData()); + this._emitToSpecificTypeListeners(e.type, e.data); } } @@ -198,7 +187,7 @@ export class EventEmitter implements IEventEmitter { if (!this._listeners.hasOwnProperty(eventType) && this._bulkListeners.length === 0) { return; } - var emitterEvent = new EmitterEvent(eventType, data); + const emitterEvent = new EmitterEvent(eventType, data); if (this._deferredCnt === 0) { this._emitEvents([emitterEvent]); @@ -231,13 +220,13 @@ export class EventEmitter implements IEventEmitter { } private _emitCollected(): void { + if (this._collectedEvents.length === 0) { + return; + } // Flush collected events - var events = this._collectedEvents; + const events = this._collectedEvents; this._collectedEvents = []; - - if (events.length > 0) { - this._emitEvents(events); - } + this._emitEvents(events); } } diff --git a/src/vs/base/parts/tree/browser/treeModel.ts b/src/vs/base/parts/tree/browser/treeModel.ts index f9b389d05b60e61cf980ced19de4c426323dfc39..5115c31b874229681b15d162eb60ab5aa9753106 100644 --- a/src/vs/base/parts/tree/browser/treeModel.ts +++ b/src/vs/base/parts/tree/browser/treeModel.ts @@ -84,7 +84,7 @@ export class Lock { var unbindListener: IDisposable; return new WinJS.Promise((c, e) => { - unbindListener = lock.addOneTimeDisposableListener('unlock', () => { + unbindListener = lock.addOneTimeListener('unlock', () => { return this.run(item, fn).then(c, e); }); }, () => { unbindListener.dispose(); }); diff --git a/src/vs/base/test/common/eventEmitter.test.ts b/src/vs/base/test/common/eventEmitter.test.ts index 469ed94c2aeadf462c606dedb891a3b215127804..0c420650bf8176fcda8fc22cdc48fa09cefe14b3 100644 --- a/src/vs/base/test/common/eventEmitter.test.ts +++ b/src/vs/base/test/common/eventEmitter.test.ts @@ -121,8 +121,8 @@ suite('EventEmitter', () => { test('deferred emit maintains events order for bulk listeners', function () { let count = 0; eventEmitter.addBulkListener(function (events) { - assert.equal(events[0].getType(), 'eventType2'); - assert.equal(events[1].getType(), 'eventType1'); + assert.equal(events[0].type, 'eventType2'); + assert.equal(events[1].type, 'eventType1'); count++; }); eventEmitter.deferredEmit(function () { diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 8074fba3794f9c9f3632587ad1a1c716e744e2ac..492f2e566338b9820ea3733f50c48a7e17d0b2b8 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -753,7 +753,7 @@ export class DiffEditorWidget extends EventEmitter implements editorBrowser.IDif private _recomputeIfNecessary(events: EmitterEvent[]): void { let changed = false; for (let i = 0; !changed && i < events.length; i++) { - let type = events[i].getType(); + let type = events[i].type; changed = changed || type === editorCommon.EventType.ModelRawContentChanged; } if (changed && this._isVisible) { @@ -768,8 +768,8 @@ export class DiffEditorWidget extends EventEmitter implements editorBrowser.IDif private _onOriginalEditorEvents(events: EmitterEvent[]): void { for (let i = 0; i < events.length; i++) { - let type = events[i].getType(); - let data = events[i].getData(); + let type = events[i].type; + let data = events[i].data; if (type === 'scroll') { this._onOriginalEditorScroll(data); @@ -783,8 +783,8 @@ export class DiffEditorWidget extends EventEmitter implements editorBrowser.IDif private _onModifiedEditorEvents(events: EmitterEvent[]): void { for (let i = 0; i < events.length; i++) { - let type = events[i].getType(); - let data = events[i].getData(); + let type = events[i].type; + let data = events[i].data; if (type === 'scroll') { this._onModifiedEditorScroll(data); diff --git a/src/vs/editor/common/commonCodeEditor.ts b/src/vs/editor/common/commonCodeEditor.ts index ea9b5cb604666b1fc3393bc885a173ac85471479..26dbf595245eebc088ec554c97a13e6abd34739f 100644 --- a/src/vs/editor/common/commonCodeEditor.ts +++ b/src/vs/editor/common/commonCodeEditor.ts @@ -768,8 +768,8 @@ export abstract class CommonCodeEditor extends EventEmitter implements editorCom this.listenersToRemove.push(this.model.addBulkListener((events) => { for (let i = 0, len = events.length; i < len; i++) { - let eventType = events[i].getType(); - let e = events[i].getData(); + let eventType = events[i].type; + let e = events[i].data; switch (eventType) { case editorCommon.EventType.ModelDecorationsChanged: @@ -817,8 +817,8 @@ export abstract class CommonCodeEditor extends EventEmitter implements editorCom this.listenersToRemove.push(this._getViewInternalEventBus().addBulkListener((events) => { for (let i = 0, len = events.length; i < len; i++) { - let eventType = events[i].getType(); - let e = events[i].getData(); + let eventType = events[i].type; + let e = events[i].data; switch (eventType) { case editorCommon.EventType.ViewFocusGained: @@ -879,8 +879,8 @@ export abstract class CommonCodeEditor extends EventEmitter implements editorCom this.listenersToRemove.push(this.cursor.addBulkListener((events) => { for (let i = 0, len = events.length; i < len; i++) { - let eventType = events[i].getType(); - let e = events[i].getData(); + let eventType = events[i].type; + let e = events[i].data; switch (eventType) { case editorCommon.EventType.CursorPositionChanged: diff --git a/src/vs/editor/common/controller/cursor.ts b/src/vs/editor/common/controller/cursor.ts index 2e14941224ab80fc9b9fee36420ecc913da76f24..e58c0877f50443d7156a708d40ff71a68a7894ad 100644 --- a/src/vs/editor/common/controller/cursor.ts +++ b/src/vs/editor/common/controller/cursor.ts @@ -139,11 +139,11 @@ export class Cursor extends EventEmitter { let hadFlushEvent = false; for (let i = 0, len = events.length; i < len; i++) { const event = events[i]; - const eventType = event.getType(); + const eventType = event.type; if (eventType === editorCommon.EventType.ModelRawContentChanged) { hadContentChange = true; - const changeEvent = event.getData(); + const changeEvent = event.data; if (changeEvent.changeType === editorCommon.EventType.ModelRawContentChangedFlush) { hadFlushEvent = true; diff --git a/src/vs/editor/common/services/modelServiceImpl.ts b/src/vs/editor/common/services/modelServiceImpl.ts index eca0ae0ff565a0cd8081806d58970fa2ab65b9b4..8e0d2eea4fe8119889c5b5d652cd0bcfb9119811 100644 --- a/src/vs/editor/common/services/modelServiceImpl.ts +++ b/src/vs/editor/common/services/modelServiceImpl.ts @@ -468,7 +468,7 @@ export class ModelServiceImpl implements IModelService { // First look for dispose for (let i = 0, len = events.length; i < len; i++) { let e = events[i]; - if (e.getType() === editorCommon.EventType.ModelDispose) { + if (e.type === editorCommon.EventType.ModelDispose) { this._onModelDisposing(modelData.model); // no more processing since model got disposed return; @@ -478,9 +478,9 @@ export class ModelServiceImpl implements IModelService { // Second, look for mode change for (let i = 0, len = events.length; i < len; i++) { let e = events[i]; - if (e.getType() === editorCommon.EventType.ModelLanguageChanged) { + if (e.type === editorCommon.EventType.ModelLanguageChanged) { const model = modelData.model; - const oldModeId = (e.getData()).oldLanguage; + const oldModeId = (e.data).oldLanguage; const newModeId = model.getLanguageIdentifier().language; const oldOptions = this.getCreationOptions(oldModeId); const newOptions = this.getCreationOptions(newModeId); diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 83bd7e8ea1d92e5b25bf19d139398d275c359aa6..90994bcc7c509ad6bc71e092002205dcc6e20a29 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -236,7 +236,7 @@ export class ViewModel implements IViewModel { private static _containsModelContentChangeEvent(events: EmitterEvent[]): boolean { for (let i = 0, len = events.length; i < len; i++) { - let eventType = events[i].getType(); + let eventType = events[i].type; if (eventType === editorCommon.EventType.ModelRawContentChanged) { return true; } @@ -246,7 +246,7 @@ export class ViewModel implements IViewModel { private static _containsWrappingRelatedEvents(events: EmitterEvent[]): boolean { for (let i = 0, len = events.length; i < len; i++) { - let eventType = events[i].getType(); + let eventType = events[i].type; if (eventType === editorCommon.EventType.ModelOptionsChanged) { return true; } @@ -295,9 +295,9 @@ export class ViewModel implements IViewModel { for (let i = 0, len = events.length; i < len; i++) { let e = events[i]; - let data = e.getData(); + let data = e.data; - switch (e.getType()) { + switch (e.type) { case editorCommon.EventType.ModelRawContentChanged: let modelContentChangedEvent = data; diff --git a/src/vs/editor/contrib/codelens/browser/codelens.ts b/src/vs/editor/contrib/codelens/browser/codelens.ts index e19cdbebca312927e5a31ead7353cba1435690c2..ab3e363369b6a942d44d5a19365113e99fd7d6ea 100644 --- a/src/vs/editor/contrib/codelens/browser/codelens.ts +++ b/src/vs/editor/contrib/codelens/browser/codelens.ts @@ -448,7 +448,7 @@ export class CodeLensContribution implements editorCommon.IEditorContribution { this._localToDispose.push(model.addBulkListener((events) => { let hadChange = false; for (let i = 0; i < events.length; i++) { - const eventType = events[i].getType(); + const eventType = events[i].type; if (eventType === editorCommon.EventType.ModelRawContentChanged) { hadChange = true; break; diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index e2a6c4af55faf2530bb05fae4691f5bf0e9a10d3..cbd49e72b2e3ba515ab79ed8152833d634cc3b3d 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -845,7 +845,7 @@ export class DebugService implements debug.IDebugService { }); if (filteredTasks[0].isBackground) { - return new TPromise((c, e) => this.taskService.addOneTimeDisposableListener(TaskServiceEvents.Inactive, () => c(null))); + return new TPromise((c, e) => this.taskService.addOneTimeListener(TaskServiceEvents.Inactive, () => c(null))); } return taskPromise; diff --git a/src/vs/workbench/parts/debug/electron-browser/debugViews.ts b/src/vs/workbench/parts/debug/electron-browser/debugViews.ts index 793682e8f1babc84ae18651a8ea2d11630ffe1fa..ba757caa7fe8d99baee777d1dcddfb09a742db3b 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugViews.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugViews.ts @@ -135,7 +135,7 @@ export class VariablesView extends CollapsibleViewletView { this.tree.refresh(expression, false).then(() => { this.tree.setHighlight(expression); - this.tree.addOneTimeDisposableListener(EventType.HIGHLIGHT, (e: IHighlightEvent) => { + this.tree.addOneTimeListener(EventType.HIGHLIGHT, (e: IHighlightEvent) => { if (!e.highlight) { this.debugService.getViewModel().setSelectedExpression(null); } @@ -234,7 +234,7 @@ export class WatchExpressionsView extends CollapsibleViewletView { this.tree.refresh(expression, false).then(() => { this.tree.setHighlight(expression); - this.tree.addOneTimeDisposableListener(EventType.HIGHLIGHT, (e: IHighlightEvent) => { + this.tree.addOneTimeListener(EventType.HIGHLIGHT, (e: IHighlightEvent) => { if (!e.highlight) { this.debugService.getViewModel().setSelectedExpression(null); } @@ -480,7 +480,7 @@ export class BreakpointsView extends AdaptiveCollapsibleViewletView { this.tree.refresh(fbp, false).then(() => { this.tree.setHighlight(fbp); - this.tree.addOneTimeDisposableListener(EventType.HIGHLIGHT, (e: IHighlightEvent) => { + this.tree.addOneTimeListener(EventType.HIGHLIGHT, (e: IHighlightEvent) => { if (!e.highlight) { this.debugService.getViewModel().setSelectedFunctionBreakpoint(null); }