From 0d1d37012a7427c9fb85c499c555ec24cfc6b256 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 26 May 2020 11:46:40 +0200 Subject: [PATCH] Use canonical uri inside `ITextModelService#createModelReference`, https://github.com/microsoft/vscode/issues/93368 fyi @bpasero --- .../test/electron-browser/keybindingEditing.test.ts | 3 +++ .../textmodelResolver/common/textModelResolverService.ts | 9 +++++++-- .../services/uriIdentity/common/uriIdentityService.ts | 3 --- src/vs/workbench/test/browser/workbenchTestServices.ts | 3 +++ src/vs/workbench/workbench.common.main.ts | 4 +++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts b/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts index 7416fd9418d..0fd8abac93b 100644 --- a/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts +++ b/src/vs/workbench/services/keybinding/test/electron-browser/keybindingEditing.test.ts @@ -58,6 +58,8 @@ import { TestTextResourcePropertiesService, TestContextService, TestWorkingCopyS import { IThemeService } from 'vs/platform/theme/common/themeService'; import { TestThemeService } from 'vs/platform/theme/test/common/testThemeService'; import { IPathService } from 'vs/workbench/services/path/common/pathService'; +import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; +import { UriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentityService'; class TestEnvironmentService extends NativeWorkbenchEnvironmentService { @@ -117,6 +119,7 @@ suite('KeybindingsEditing', () => { fileService.registerProvider(Schemas.file, diskFileSystemProvider); fileService.registerProvider(Schemas.userData, new FileUserDataProvider(environmentService.appSettingsHome, environmentService.backupHome, diskFileSystemProvider, environmentService, new NullLogService())); instantiationService.stub(IFileService, fileService); + instantiationService.stub(IUriIdentityService, new UriIdentityService(fileService)); instantiationService.stub(IWorkingCopyService, new TestWorkingCopyService()); instantiationService.stub(IWorkingCopyFileService, instantiationService.createInstance(WorkingCopyFileService)); instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService)); diff --git a/src/vs/workbench/services/textmodelResolver/common/textModelResolverService.ts b/src/vs/workbench/services/textmodelResolver/common/textModelResolverService.ts index b00bdc79286..88eb19fda83 100644 --- a/src/vs/workbench/services/textmodelResolver/common/textModelResolverService.ts +++ b/src/vs/workbench/services/textmodelResolver/common/textModelResolverService.ts @@ -16,6 +16,7 @@ import { TextFileEditorModel } from 'vs/workbench/services/textfile/common/textF import { IFileService } from 'vs/platform/files/common/files'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; class ResourceModelCollection extends ReferenceCollection> { @@ -167,12 +168,16 @@ export class TextModelResolverService implements ITextModelService { constructor( @IInstantiationService private readonly instantiationService: IInstantiationService, - @IFileService private readonly fileService: IFileService + @IFileService private readonly fileService: IFileService, + @IUriIdentityService private readonly uriIdentService: IUriIdentityService, ) { } async createModelReference(resource: URI): Promise> { - const ref = this.resourceModelCollection.acquire(resource.toString()); + + const canonicalResource = this.uriIdentService.asCanonicalUri(resource); + + const ref = this.resourceModelCollection.acquire(canonicalResource.toString()); try { const model = await ref.object; diff --git a/src/vs/workbench/services/uriIdentity/common/uriIdentityService.ts b/src/vs/workbench/services/uriIdentity/common/uriIdentityService.ts index 34dd86b86d5..e50260f2982 100644 --- a/src/vs/workbench/services/uriIdentity/common/uriIdentityService.ts +++ b/src/vs/workbench/services/uriIdentity/common/uriIdentityService.ts @@ -5,7 +5,6 @@ import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; import { URI } from 'vs/base/common/uri'; -import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { IFileService, FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; import { binarySearch } from 'vs/base/common/arrays'; import { ExtUri, IExtUri, normalizePath } from 'vs/base/common/resources'; @@ -67,5 +66,3 @@ export class UriIdentityService implements IUriIdentityService { return uri; } } - -registerSingleton(IUriIdentityService, UriIdentityService, true); diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index c1561a0ba6e..ebcfbda3955 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -107,6 +107,8 @@ import { TestWorkingCopyService, TestContextService, TestStorageService, TestTex import { IViewsService, IView, ViewContainer, ViewContainerLocation } from 'vs/workbench/common/views'; import { IStorageKeysSyncRegistryService, StorageKeysSyncRegistryService } from 'vs/platform/userDataSync/common/storageKeys'; import { IPaneComposite } from 'vs/workbench/common/panecomposite'; +import { UriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentityService'; +import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; export function createFileEditorInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput { return instantiationService.createInstance(FileEditorInput, resource, undefined, undefined); @@ -150,6 +152,7 @@ export function workbenchInstantiationService(overrides?: { instantiationService.stub(IThemeService, themeService); instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl)); instantiationService.stub(IFileService, new TestFileService()); + instantiationService.stub(IUriIdentityService, instantiationService.createInstance(UriIdentityService)); instantiationService.stub(IBackupFileService, new TestBackupFileService()); instantiationService.stub(ITelemetryService, NullTelemetryService); instantiationService.stub(INotificationService, new TestNotificationService()); diff --git a/src/vs/workbench/workbench.common.main.ts b/src/vs/workbench/workbench.common.main.ts index e7e58eba1c2..a28a125ef72 100644 --- a/src/vs/workbench/workbench.common.main.ts +++ b/src/vs/workbench/workbench.common.main.ts @@ -53,7 +53,6 @@ import 'vs/workbench/browser/parts/views/viewsService'; //#region --- workbench services import 'vs/platform/undoRedo/common/undoRedoService'; -import 'vs/workbench/services/uriIdentity/common/uriIdentityService'; import 'vs/workbench/services/extensions/browser/extensionUrlHandler'; import 'vs/workbench/services/bulkEdit/browser/bulkEditService'; import 'vs/workbench/services/keybinding/common/keybindingEditing'; @@ -112,6 +111,8 @@ import { OpenerService } from 'vs/editor/browser/services/openerService'; import { IOpenerService } from 'vs/platform/opener/common/opener'; import { IUserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSync'; import { UserDataSyncEnablementService } from 'vs/platform/userDataSync/common/userDataSyncEnablementService'; +import { UriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentityService'; +import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; registerSingleton(IUserDataSyncEnablementService, UserDataSyncEnablementService); registerSingleton(IGlobalExtensionEnablementService, GlobalExtensionEnablementService); @@ -127,6 +128,7 @@ registerSingleton(ITextResourceConfigurationService, TextResourceConfigurationSe registerSingleton(IMenuService, MenuService, true); registerSingleton(IDownloadService, DownloadService, true); registerSingleton(IOpenerService, OpenerService, true); +registerSingleton(IUriIdentityService, UriIdentityService, true); //#endregion -- GitLab