diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index a558a0b06d8..f0d9296057b 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -201,16 +201,10 @@ export function illegalState(name?: string): Error { } } -export function readonly(name?: string): Error { - return name - ? new Error(`readonly property '${name} cannot be changed'`) - : 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 class ReadonlyError extends TypeError { + constructor(name?: string) { + super(name ? `${name} is read-only and cannot be changed` : 'Cannot change read-only property'); + } } export function getErrorMessage(err: any): string { diff --git a/src/vs/workbench/api/browser/mainThreadEditors.ts b/src/vs/workbench/api/browser/mainThreadEditors.ts index b5e8bb0ef56..84bc6f34f1e 100644 --- a/src/vs/workbench/api/browser/mainThreadEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadEditors.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { disposed } from 'vs/base/common/errors'; +import { illegalArgument } from 'vs/base/common/errors'; import { IDisposable, dispose, DisposableStore } from 'vs/base/common/lifecycle'; import { equals as objectEquals } from 'vs/base/common/objects'; import { URI, UriComponents } from 'vs/base/common/uri'; @@ -174,7 +174,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { $trySetSelections(id: string, selections: ISelection[]): Promise { const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setSelections(selections); return Promise.resolve(undefined); @@ -184,7 +184,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { key = `${this._instanceId}-${key}`; const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setDecorations(key, ranges); return Promise.resolve(undefined); @@ -194,7 +194,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { key = `${this._instanceId}-${key}`; const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setDecorationsFast(key, ranges); return Promise.resolve(undefined); @@ -203,7 +203,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { $tryRevealRange(id: string, range: IRange, revealType: TextEditorRevealType): Promise { const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.revealRange(range, revealType); return Promise.resolve(); @@ -212,7 +212,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { $trySetOptions(id: string, options: ITextEditorConfigurationUpdate): Promise { const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setConfiguration(options); return Promise.resolve(undefined); @@ -221,7 +221,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { $tryApplyEdits(id: string, modelVersionId: number, edits: ISingleEditOperation[], opts: IApplyEditsOptions): Promise { const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } return Promise.resolve(editor.applyEdits(modelVersionId, edits, opts)); } @@ -229,7 +229,7 @@ export class MainThreadTextEditors implements MainThreadTextEditorsShape { $tryInsertSnippet(id: string, modelVersionId: number, template: string, ranges: readonly IRange[], opts: IUndoStopOptions): Promise { const editor = this._editorLocator.getEditor(id); if (!editor) { - return Promise.reject(disposed(`TextEditor(${id})`)); + return Promise.reject(illegalArgument(`TextEditor(${id})`)); } return Promise.resolve(editor.insertSnippet(modelVersionId, template, ranges, opts)); } diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 5eadd12f6dd..95d016287a2 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -876,7 +876,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I return extHostWorkspace.getPath(); }, set rootPath(value) { - throw errors.readonly(); + throw new errors.ReadonlyError('rootPath'); }, getWorkspaceFolder(resource) { return extHostWorkspace.getWorkspaceFolder(resource); @@ -888,13 +888,13 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I return extHostWorkspace.name; }, set name(value) { - throw errors.readonly(); + throw new errors.ReadonlyError('name'); }, get workspaceFile() { return extHostWorkspace.workspaceFile; }, set workspaceFile(value) { - throw errors.readonly(); + throw new errors.ReadonlyError('workspaceFile'); }, updateWorkspaceFolders: (index, deleteCount, ...workspaceFoldersToAdd) => { return extHostWorkspace.updateWorkspaceFolders(extension, index, deleteCount || 0, ...workspaceFoldersToAdd); @@ -946,7 +946,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I return extHostDocuments.getAllDocumentData().map(data => data.document); }, set textDocuments(value) { - throw errors.readonly(); + throw new errors.ReadonlyError('textDocuments'); }, openTextDocument(uriOrFileNameOrOptions?: vscode.Uri | string | { language?: string; content?: string }) { let uriPromise: Thenable; diff --git a/src/vs/workbench/api/common/extHostTextEditor.ts b/src/vs/workbench/api/common/extHostTextEditor.ts index c1317c709d9..8ab93b18b21 100644 --- a/src/vs/workbench/api/common/extHostTextEditor.ts +++ b/src/vs/workbench/api/common/extHostTextEditor.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { ok } from 'vs/base/common/assert'; -import { illegalArgument, readonly } from 'vs/base/common/errors'; +import { ReadonlyError, illegalArgument } from 'vs/base/common/errors'; import { IdGenerator } from 'vs/base/common/idGenerator'; import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; import { IRange } from 'vs/editor/common/core/range'; @@ -431,7 +431,7 @@ export class ExtHostTextEditor { return document.value; }, set document(_value) { - throw readonly('document'); + throw new ReadonlyError('document'); }, // --- selection get selection(): Selection { @@ -459,7 +459,7 @@ export class ExtHostTextEditor { return that._visibleRanges; }, set visibleRanges(_value: Range[]) { - throw readonly('visibleRanges'); + throw new ReadonlyError('visibleRanges'); }, // --- options get options(): vscode.TextEditorOptions { @@ -475,7 +475,7 @@ export class ExtHostTextEditor { return that._viewColumn; }, set viewColumn(_value) { - throw readonly('viewColumn'); + throw new ReadonlyError('viewColumn'); }, // --- edit edit(callback: (edit: TextEditorEdit) => void, options: { undoStopBefore: boolean; undoStopAfter: boolean } = { undoStopBefore: true, undoStopAfter: true }): Promise {