mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-29 00:46:00 +01:00
Extract try/catch code
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user