diff --git a/packages/monaco/src/browser/monaco-text-model-service.ts b/packages/monaco/src/browser/monaco-text-model-service.ts index 2ede3881a36f7..7cf8f24f7ad5d 100644 --- a/packages/monaco/src/browser/monaco-text-model-service.ts +++ b/packages/monaco/src/browser/monaco-text-model-service.ts @@ -20,6 +20,7 @@ import URI from '@theia/core/lib/common/uri'; import { ResourceProvider, ReferenceCollection, Event } from '@theia/core'; import { EditorPreferences, EditorPreferenceChange } from '@theia/editor/lib/browser'; import { MonacoEditorModel } from './monaco-editor-model'; +import { MessageClient, MessageType } from '@theia/core/lib/common'; @injectable() export class MonacoTextModelService implements monaco.editor.ITextModelService { @@ -40,6 +41,9 @@ export class MonacoTextModelService implements monaco.editor.ITextModelService { @inject(ProtocolToMonacoConverter) protected readonly p2m: ProtocolToMonacoConverter; + @inject(MessageClient) + protected readonly messages: MessageClient; + get models(): MonacoEditorModel[] { return this._models.values(); } @@ -57,14 +61,20 @@ export class MonacoTextModelService implements monaco.editor.ITextModelService { } protected async loadModel(uri: URI): Promise { - await this.editorPreferences.ready; - const resource = await this.resourceProvider(uri); - const model = await (new MonacoEditorModel(resource, this.m2p, this.p2m, { encoding: this.editorPreferences.get('files.encoding') }).load()); - this.updateModel(model); - model.textEditorModel.onDidChangeLanguage(() => this.updateModel(model)); - const disposable = this.editorPreferences.onPreferenceChanged(change => this.updateModel(model, change)); - model.onDispose(() => disposable.dispose()); - return model; + try { + await this.editorPreferences.ready; + const resource = await this.resourceProvider(uri); + const model = await (new MonacoEditorModel(resource, this.m2p, this.p2m, { encoding: this.editorPreferences.get('files.encoding') }).load()); + this.updateModel(model); + model.textEditorModel.onDidChangeLanguage(() => this.updateModel(model)); + const disposable = this.editorPreferences.onPreferenceChanged(change => this.updateModel(model, change)); + model.onDispose(() => disposable.dispose()); + return model; + } catch (error) { + const msg = 'Unable to open "' + uri + '": ' + error; + this.messages.showMessage({ type: MessageType.Error, text: msg }); + return Promise.reject(error); + } } protected readonly modelOptions: {