diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index 4830dbb03c8..743e88c5946 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -215,6 +215,12 @@ export function readonly(name?: string): Error { : new Error('readonly property cannot be changed'); } +export function disposed(what: string): Error { + const result = new Error(`${what} has been disposed`); + result.name = 'DISPOSED'; + return result; +} + export interface IErrorOptions { severity?: Severity; actions?: IAction[]; @@ -248,4 +254,4 @@ export function getErrorMessage(err: any): string { } return String(err); -} \ No newline at end of file +} diff --git a/src/vs/workbench/api/electron-browser/mainThreadEditors.ts b/src/vs/workbench/api/electron-browser/mainThreadEditors.ts index 8d464d9e0ba..8dc711aa435 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadEditors.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadEditors.ts @@ -6,6 +6,7 @@ import URI from 'vs/base/common/uri'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { disposed } from 'vs/base/common/errors'; import { TPromise } from 'vs/base/common/winjs.base'; import { ISingleEditOperation, IDecorationRenderOptions, IDecorationOptions, ILineChange } from 'vs/editor/common/editorCommon'; import { ICodeEditorService } from 'vs/editor/common/services/codeEditorService'; @@ -156,7 +157,7 @@ export class MainThreadEditors implements MainThreadEditorsShape { $trySetSelections(id: string, selections: ISelection[]): TPromise { if (!this._documentsAndEditors.getEditor(id)) { - return TPromise.wrapError(new Error('TextEditor disposed')); + return TPromise.wrapError(disposed(`TextEditor(${id})`)); } this._documentsAndEditors.getEditor(id).setSelections(selections); return TPromise.as(null); @@ -164,7 +165,7 @@ export class MainThreadEditors implements MainThreadEditorsShape { $trySetDecorations(id: string, key: string, ranges: IDecorationOptions[]): TPromise { if (!this._documentsAndEditors.getEditor(id)) { - return TPromise.wrapError(new Error('TextEditor disposed')); + return TPromise.wrapError(disposed(`TextEditor(${id})`)); } this._documentsAndEditors.getEditor(id).setDecorations(key, ranges); return TPromise.as(null); @@ -172,7 +173,7 @@ export class MainThreadEditors implements MainThreadEditorsShape { $tryRevealRange(id: string, range: IRange, revealType: TextEditorRevealType): TPromise { if (!this._documentsAndEditors.getEditor(id)) { - return TPromise.wrapError(new Error('TextEditor disposed')); + return TPromise.wrapError(disposed(`TextEditor(${id})`)); } this._documentsAndEditors.getEditor(id).revealRange(range, revealType); return undefined; @@ -180,7 +181,7 @@ export class MainThreadEditors implements MainThreadEditorsShape { $trySetOptions(id: string, options: ITextEditorConfigurationUpdate): TPromise { if (!this._documentsAndEditors.getEditor(id)) { - return TPromise.wrapError(new Error('TextEditor disposed')); + return TPromise.wrapError(disposed(`TextEditor(${id})`)); } this._documentsAndEditors.getEditor(id).setConfiguration(options); return TPromise.as(null); @@ -188,14 +189,14 @@ export class MainThreadEditors implements MainThreadEditorsShape { $tryApplyEdits(id: string, modelVersionId: number, edits: ISingleEditOperation[], opts: IApplyEditsOptions): TPromise { if (!this._documentsAndEditors.getEditor(id)) { - return TPromise.wrapError(new Error('TextEditor disposed')); + return TPromise.wrapError(disposed(`TextEditor(${id})`)); } return TPromise.as(this._documentsAndEditors.getEditor(id).applyEdits(modelVersionId, edits, opts)); } $tryInsertSnippet(id: string, template: string, ranges: IRange[], opts: IUndoStopOptions): TPromise { if (!this._documentsAndEditors.getEditor(id)) { - return TPromise.wrapError(new Error('TextEditor disposed')); + return TPromise.wrapError(disposed(`TextEditor(${id})`)); } return TPromise.as(this._documentsAndEditors.getEditor(id).insertSnippet(template, ranges, opts)); } diff --git a/src/vs/workbench/api/node/extHostTextEditor.ts b/src/vs/workbench/api/node/extHostTextEditor.ts index 4bf9f16e274..c990fba30bd 100644 --- a/src/vs/workbench/api/node/extHostTextEditor.ts +++ b/src/vs/workbench/api/node/extHostTextEditor.ts @@ -542,8 +542,10 @@ export class ExtHostTextEditor implements vscode.TextEditor { return TPromise.as(undefined); } return callback().then(() => this, err => { + if (err instanceof Error && err.name === 'DISPOSED') { + return; + } console.warn(err); - return undefined; }); } }