Extract try/catch code

This commit is contained in:
Alex Dima
2016-03-28 00:08:20 +02:00
parent 69a69fe79c
commit cb7dead277
2 changed files with 71 additions and 68 deletions
+20 -21
View File
@@ -237,11 +237,7 @@ export class EventEmitter implements IEventEmitter {
if (this._listeners.hasOwnProperty(eventType)) {
var listeners = this._listeners[eventType].slice(0);
for (var i = 0, len = listeners.length; i < len; i++) {
try {
listeners[i](data);
} catch(e) {
Errors.onUnexpectedError(e);
}
safeInvoke1Arg(listeners[i], data);
}
}
}
@@ -249,11 +245,7 @@ export class EventEmitter implements IEventEmitter {
protected _emitToBulkListeners(events:EmitterEvent[]): void {
var bulkListeners = this._bulkListeners.slice(0);
for (var i = 0, len = bulkListeners.length; i < len; i++) {
try {
bulkListeners[i](events);
} catch(e) {
Errors.onUnexpectedError(e);
}
safeInvoke1Arg(bulkListeners[i], events);
}
}
@@ -291,12 +283,7 @@ export class EventEmitter implements IEventEmitter {
public deferredEmit(callback:()=>any):any {
this._deferredCnt = this._deferredCnt + 1;
var result: any = null;
try {
result = callback();
} catch (e) {
Errors.onUnexpectedError(e);
}
var result: any = safeInvokeNoArg(callback);
this._deferredCnt = this._deferredCnt - 1;
if (this._deferredCnt === 0) {
@@ -359,11 +346,23 @@ export class OrderGuaranteeEventEmitter extends EventEmitter {
while (this._emitQueue.length > 0) {
let queueElement = this._emitQueue.shift();
try {
queueElement.target(queueElement.arg);
} catch(e) {
Errors.onUnexpectedError(e);
}
safeInvoke1Arg(queueElement.target, queueElement.arg);
}
}
}
function safeInvokeNoArg(func:Function): any {
try {
return func();
} catch(e) {
Errors.onUnexpectedError(e);
}
}
function safeInvoke1Arg(func:Function, arg1:any): any {
try {
return func(arg1);
} catch(e) {
Errors.onUnexpectedError(e);
}
}
+51 -47
View File
@@ -683,12 +683,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
}
};
var r: any = null;
try {
r = callback(changeAccessor);
} catch (e) {
onUnexpectedError(e);
}
var r: any = safeInvoke1Arg(callback, changeAccessor);
// Invalidate changeAccessor
changeAccessor.addZone = null;
@@ -799,12 +794,8 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
throw new Error('ViewImpl._renderOnce: View is disposed');
}
return this.outgoingEventBus.deferredEmit(() => {
try {
var r = callback ? callback() : null;
} finally {
this._scheduleRender();
}
let r = safeInvokeNoArg(callback);
this._scheduleRender();
return r;
});
}
@@ -824,10 +815,7 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
}
private _renderNow(): void {
if (this._isDisposed) {
throw new Error('ViewImpl._renderNow: View is disposed');
}
this.actualRender();
safeInvokeNoArg(() => this._actualRender());
}
private createRenderingContext(linesViewportData:editorCommon.ViewLinesViewportData): editorBrowser.IRenderingContext {
@@ -880,45 +868,45 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
return r;
}
private actualRender(): void {
if (this._isDisposed) {
throw new Error('ViewImpl.actualRender: View is disposed');
}
private _actualRender(): void {
if (!dom.isInDOM(this.domNode)) {
return;
}
let t = timer.start(timer.Topic.EDITOR, 'View.render');
var t = timer.start(timer.Topic.EDITOR, 'View.render');
let viewPartsToRender = this.viewParts.filter((vp) => vp.shouldRender());
var i:number,
len:number;
try {
var linesViewportData = this.layoutProvider.getLinesViewportData();
if (this.viewLines.shouldRender()) {
this.viewLines.renderText(linesViewportData);
this.viewLines.onDidRender();
let viewPartsToRender:ViewPart[] = [];
for (let i = 0, len = this.viewParts.length; i < len; i++) {
let viewPart = this.viewParts[i];
if (viewPart.shouldRender()) {
viewPartsToRender.push(viewPart);
}
}
var renderingContext = this.createRenderingContext(linesViewportData);
// Render the rest of the parts
for (i = 0, len = viewPartsToRender.length; i < len; i++) {
viewPartsToRender[i].prepareRender(renderingContext);
}
if (!this.viewLines.shouldRender() && viewPartsToRender.length === 0) {
// Nothing to render
t.stop();
return;
}
for (i = 0, len = viewPartsToRender.length; i < len; i++) {
viewPartsToRender[i].render(renderingContext);
}
let linesViewportData = this.layoutProvider.getLinesViewportData();
for (i = 0, len = viewPartsToRender.length; i < len; i++) {
viewPartsToRender[i].onDidRender();
}
if (this.viewLines.shouldRender()) {
this.viewLines.renderText(linesViewportData);
this.viewLines.onDidRender();
}
} catch (err) {
onUnexpectedError(err);
let renderingContext = this.createRenderingContext(linesViewportData);
// Render the rest of the parts
for (let i = 0, len = viewPartsToRender.length; i < len; i++) {
let viewPart = viewPartsToRender[i];
viewPart.prepareRender(renderingContext);
}
for (let i = 0, len = viewPartsToRender.length; i < len; i++) {
let viewPart = viewPartsToRender[i];
viewPart.render(renderingContext);
viewPart.onDidRender();
}
t.stop();
@@ -957,4 +945,20 @@ class ViewContext implements editorBrowser.IViewContext {
this.addEventHandler = addEventHandler;
this.removeEventHandler = removeEventHandler;
}
}
}
function safeInvokeNoArg(func:Function): any {
try {
return func();
} catch(e) {
onUnexpectedError(e);
}
}
function safeInvoke1Arg(func:Function, arg1:any): any {
try {
return func(arg1);
} catch(e) {
onUnexpectedError(e);
}
}