From 2f9b7807081a0f69083f7e873bcad28d45ea8957 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 11 Jun 2020 16:54:39 +0200 Subject: [PATCH] editors - turn runtime extensions into singleton --- .../extensionProfileService.ts | 2 +- .../extensions.contribution.ts | 2 +- .../extensionsAutoProfiler.ts | 2 +- .../runtimeExtensionsEditor.ts | 5 ++-- .../runtimeExtensionsInput.ts | 26 ++++++++++++++----- 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/vs/workbench/contrib/extensions/electron-browser/extensionProfileService.ts b/src/vs/workbench/contrib/extensions/electron-browser/extensionProfileService.ts index 40813ff9bc5..10e51718f85 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/extensionProfileService.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/extensionProfileService.ts @@ -57,7 +57,7 @@ export class ExtensionHostProfileService extends Disposable implements IExtensio CommandsRegistry.registerCommand('workbench.action.extensionHostProfilder.stop', () => { this.stopProfiling(); - this._editorService.openEditor(this._instantiationService.createInstance(RuntimeExtensionsInput), { revealIfOpened: true }); + this._editorService.openEditor(RuntimeExtensionsInput.instance, { revealIfOpened: true }); }); } diff --git a/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts index 559178e4bf9..5673e78f5e0 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts @@ -50,7 +50,7 @@ class RuntimeExtensionsInputFactory implements IEditorInputFactory { return ''; } deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): EditorInput { - return new RuntimeExtensionsInput(); + return RuntimeExtensionsInput.instance; } } diff --git a/src/vs/workbench/contrib/extensions/electron-browser/extensionsAutoProfiler.ts b/src/vs/workbench/contrib/extensions/electron-browser/extensionsAutoProfiler.ts index c5b6f8b87a1..47a104f77a2 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/extensionsAutoProfiler.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/extensionsAutoProfiler.ts @@ -186,7 +186,7 @@ export class ExtensionsAutoProfiler extends Disposable implements IWorkbenchCont ), [{ label: localize('show', 'Show Extensions'), - run: () => this._editorService.openEditor(new RuntimeExtensionsInput()) + run: () => this._editorService.openEditor(RuntimeExtensionsInput.instance) }, action ], diff --git a/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts b/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts index 65bdaa6bf97..1e5bb2e493e 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts @@ -494,14 +494,13 @@ export class ShowRuntimeExtensionsAction extends Action { constructor( id: string, label: string, - @IEditorService private readonly _editorService: IEditorService, - @IInstantiationService private readonly _instantiationService: IInstantiationService + @IEditorService private readonly _editorService: IEditorService ) { super(id, label); } public async run(e?: any): Promise { - await this._editorService.openEditor(this._instantiationService.createInstance(RuntimeExtensionsInput), { revealIfOpened: true }); + await this._editorService.openEditor(RuntimeExtensionsInput.instance, { revealIfOpened: true }); } } diff --git a/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsInput.ts b/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsInput.ts index c4c1d43fe72..86601261d7e 100644 --- a/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsInput.ts +++ b/src/vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsInput.ts @@ -5,12 +5,21 @@ import * as nls from 'vs/nls'; import { URI } from 'vs/base/common/uri'; -import { EditorInput } from 'vs/workbench/common/editor'; +import { EditorInput, GroupIdentifier } from 'vs/workbench/common/editor'; export class RuntimeExtensionsInput extends EditorInput { static readonly ID = 'workbench.runtimeExtensions.input'; + static _instance: RuntimeExtensionsInput; + static get instance() { + if (!RuntimeExtensionsInput._instance || RuntimeExtensionsInput._instance.isDisposed()) { + RuntimeExtensionsInput._instance = new RuntimeExtensionsInput(); + } + + return RuntimeExtensionsInput._instance; + } + readonly resource = URI.from({ scheme: 'runtime-extensions', path: 'default' @@ -25,17 +34,20 @@ export class RuntimeExtensionsInput extends EditorInput { } matches(other: unknown): boolean { - if (!(other instanceof RuntimeExtensionsInput)) { - return false; - } - return true; + return other instanceof RuntimeExtensionsInput; } - resolve(): Promise { - return Promise.resolve(null); + async resolve(): Promise { + return null; } supportsSplitEditor(): boolean { return false; } + + close(group: GroupIdentifier, openedInOtherGroups: boolean): void { + if (!openedInOtherGroups) { + this.dispose(); // Only dispose if not opened anymore because all runtime extensions inputs are shared + } + } } -- GitLab