diff --git a/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts b/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts index 533f7c4c68a..62bcc278de4 100644 --- a/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts +++ b/src/vs/workbench/api/common/extHostDocumentsAndEditors.ts @@ -14,6 +14,7 @@ import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService'; import { ExtHostTextEditor } from 'vs/workbench/api/common/extHostTextEditor'; import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters'; import { ILogService } from 'vs/platform/log/common/log'; +import { ResourceMap } from 'vs/base/common/map'; export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsShape { @@ -22,7 +23,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha private _activeEditorId: string | null = null; private readonly _editors = new Map(); - private readonly _documents = new Map(); + private readonly _documents = new ResourceMap(); private readonly _onDidAddDocuments = new Emitter(); private readonly _onDidRemoveDocuments = new Emitter(); @@ -48,9 +49,8 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha if (delta.removedDocuments) { for (const uriComponent of delta.removedDocuments) { const uri = URI.revive(uriComponent); - const id = uri.toString(); - const data = this._documents.get(id); - this._documents.delete(id); + const data = this._documents.get(uri); + this._documents.delete(uri); if (data) { removedDocuments.push(data); } @@ -60,7 +60,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha if (delta.addedDocuments) { for (const data of delta.addedDocuments) { const resource = URI.revive(data.uri); - assert.ok(!this._documents.has(resource.toString()), `document '${resource} already exists!'`); + assert.ok(!this._documents.has(resource), `document '${resource} already exists!'`); const documentData = new ExtHostDocumentData( this._extHostRpc.getProxy(MainContext.MainThreadDocuments), @@ -71,7 +71,7 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha data.versionId, data.isDirty ); - this._documents.set(resource.toString(), documentData); + this._documents.set(resource, documentData); addedDocuments.push(documentData); } } @@ -89,10 +89,10 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha if (delta.addedEditors) { for (const data of delta.addedEditors) { const resource = URI.revive(data.documentUri); - assert.ok(this._documents.has(resource.toString()), `document '${resource}' does not exist`); + assert.ok(this._documents.has(resource), `document '${resource}' does not exist`); assert.ok(!this._editors.has(data.id), `editor '${data.id}' already exists!`); - const documentData = this._documents.get(resource.toString())!; + const documentData = this._documents.get(resource)!; const editor = new ExtHostTextEditor( data.id, this._extHostRpc.getProxy(MainContext.MainThreadTextEditors), @@ -132,13 +132,11 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha } getDocument(uri: URI): ExtHostDocumentData | undefined { - return this._documents.get(uri.toString()); + return this._documents.get(uri); } allDocuments(): ExtHostDocumentData[] { - const result: ExtHostDocumentData[] = []; - this._documents.forEach(data => result.push(data)); - return result; + return [...this._documents.values()]; } getEditor(id: string): ExtHostTextEditor | undefined {