From d4248f3df5f486603c65aa89e4d061bf23e15e48 Mon Sep 17 00:00:00 2001 From: isidor Date: Mon, 31 Aug 2020 16:45:32 +0200 Subject: [PATCH] Run menu does not remember dynamic launch configurations fixes #96293 --- .../browser/debugConfigurationManager.ts | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts b/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts index e28eaf83505..ed6e487941d 100644 --- a/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts +++ b/src/vs/workbench/contrib/debug/browser/debugConfigurationManager.ts @@ -46,6 +46,7 @@ jsonRegistry.registerSchema(launchSchemaId, launchSchema); const DEBUG_SELECTED_CONFIG_NAME_KEY = 'debug.selectedconfigname'; const DEBUG_SELECTED_ROOT = 'debug.selectedroot'; +const DEBUG_SELECTED_DYNAMIC_CONFIG = 'debug.selecteddynamicconfig'; interface IDynamicPickItem { label: string, launch: ILaunch, config: IConfig } @@ -83,23 +84,30 @@ export class ConfigurationManager implements IConfigurationManager { this.toDispose = []; this.initLaunches(); this.registerListeners(); - const previousSelectedRoot = this.storageService.get(DEBUG_SELECTED_ROOT, StorageScope.WORKSPACE); - const previousSelectedLaunch = this.launches.find(l => l.uri.toString() === previousSelectedRoot); this.debugConfigurationTypeContext = CONTEXT_DEBUG_CONFIGURATION_TYPE.bindTo(contextKeyService); this.debuggersAvailable = CONTEXT_DEBUGGERS_AVAILABLE.bindTo(contextKeyService); - if (previousSelectedLaunch && previousSelectedLaunch.getConfigurationNames().length) { - this.selectConfiguration(previousSelectedLaunch, this.storageService.get(DEBUG_SELECTED_CONFIG_NAME_KEY, StorageScope.WORKSPACE)); - } else if (this.launches.length > 0) { - this.selectConfiguration(undefined); - } + } // debuggers registerDebugAdapterFactory(debugTypes: string[], debugAdapterLauncher: IDebugAdapterFactory): IDisposable { + const firstRegistration = this.debugAdapterFactories.size === 0; debugTypes.forEach(debugType => this.debugAdapterFactories.set(debugType, debugAdapterLauncher)); this.debuggersAvailable.set(this.debugAdapterFactories.size > 0); this._onDidRegisterDebugger.fire(); + if (firstRegistration) { + const previousSelectedRoot = this.storageService.get(DEBUG_SELECTED_ROOT, StorageScope.WORKSPACE); + const previousSelectedLaunch = this.launches.find(l => l.uri.toString() === previousSelectedRoot); + if (previousSelectedLaunch && previousSelectedLaunch.getConfigurationNames().length) { + const name = this.storageService.get(DEBUG_SELECTED_CONFIG_NAME_KEY, StorageScope.WORKSPACE); + const configStr = this.storageService.get(DEBUG_SELECTED_DYNAMIC_CONFIG, StorageScope.WORKSPACE); + const config = configStr ? JSON.parse(configStr) : undefined; + this.selectConfiguration(previousSelectedLaunch, name, config); + } else if (this.launches.length > 0) { + this.selectConfiguration(undefined); + } + } return { dispose: () => { @@ -534,6 +542,12 @@ export class ConfigurationManager implements IConfigurationManager { } this.selectedConfig = config; + if (config) { + // Only dynamic configurations get passed in the selectConfiguration. We should store them #96293 + this.storageService.store(DEBUG_SELECTED_DYNAMIC_CONFIG, JSON.stringify(config), StorageScope.WORKSPACE); + } else { + this.storageService.remove(DEBUG_SELECTED_DYNAMIC_CONFIG, StorageScope.WORKSPACE); + } const configForType = this.selectedConfig || (this.selectedLaunch && this.selectedName ? this.selectedLaunch.getConfiguration(this.selectedName) : undefined); if (configForType) { this.debugConfigurationTypeContext.set(configForType.type); -- GitLab