From 8c217344e70e08a49837eed1b69216220245154b Mon Sep 17 00:00:00 2001 From: Andre Weinand Date: Fri, 15 Mar 2019 12:51:49 +0100 Subject: [PATCH] prepare for strict null checks in extHostDebug --- .../api/electron-browser/mainThreadDebugService.ts | 6 +++--- src/vs/workbench/api/node/extHost.protocol.ts | 2 +- src/vs/workbench/contrib/debug/common/debug.ts | 2 +- .../electron-browser/debugConfigurationManager.ts | 4 ++-- .../contrib/debug/electron-browser/debugService.ts | 12 ++++++++++-- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts index 79ea63cecdd..16908a6f748 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts @@ -158,18 +158,18 @@ export class MainThreadDebugService implements MainThreadDebugServiceShape, IDeb }; if (hasProvide) { provider.provideDebugConfigurations = (folder) => { - return Promise.resolve(this._proxy.$provideDebugConfigurations(handle, folder)); + return this._proxy.$provideDebugConfigurations(handle, folder); }; } if (hasResolve) { provider.resolveDebugConfiguration = (folder, config) => { - return Promise.resolve(this._proxy.$resolveDebugConfiguration(handle, folder, config)); + return this._proxy.$resolveDebugConfiguration(handle, folder, config); }; } if (hasProvideDebugAdapter) { console.info('DebugConfigurationProvider.debugAdapterExecutable is deprecated and will be removed soon; please use DebugAdapterDescriptorFactory.createDebugAdapterDescriptor instead.'); provider.debugAdapterExecutable = (folder) => { - return Promise.resolve(this._proxy.$legacyDebugAdapterExecutable(handle, folder)); + return this._proxy.$legacyDebugAdapterExecutable(handle, folder); }; } this._debugConfigurationProviders.set(handle, provider); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 5a875cb6019..54a9efe54d0 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -1062,7 +1062,7 @@ export interface ExtHostDebugServiceShape { $startDASession(handle: number, session: IDebugSessionDto): Promise; $stopDASession(handle: number): Promise; $sendDAMessage(handle: number, message: DebugProtocol.ProtocolMessage): void; - $resolveDebugConfiguration(handle: number, folder: UriComponents | undefined, debugConfiguration: IConfig): Promise; + $resolveDebugConfiguration(handle: number, folder: UriComponents | undefined, debugConfiguration: IConfig): Promise; $provideDebugConfigurations(handle: number, folder: UriComponents | undefined): Promise; $legacyDebugAdapterExecutable(handle: number, folderUri: UriComponents | undefined): Promise; // TODO@AW legacy $provideDebugAdapter(handle: number, session: IDebugSessionDto): Promise; diff --git a/src/vs/workbench/contrib/debug/common/debug.ts b/src/vs/workbench/contrib/debug/common/debug.ts index 1fd99ba4960..1d81cefc146 100644 --- a/src/vs/workbench/contrib/debug/common/debug.ts +++ b/src/vs/workbench/contrib/debug/common/debug.ts @@ -542,7 +542,7 @@ export interface IDebuggerContribution extends IPlatformSpecificAdapterContribut export interface IDebugConfigurationProvider { readonly type: string; - resolveDebugConfiguration?(folderUri: uri | undefined, debugConfiguration: IConfig): Promise; + resolveDebugConfiguration?(folderUri: uri | undefined, debugConfiguration: IConfig): Promise; provideDebugConfigurations?(folderUri: uri | undefined): Promise; debugAdapterExecutable?(folderUri: uri | undefined): Promise; // TODO@AW legacy } diff --git a/src/vs/workbench/contrib/debug/electron-browser/debugConfigurationManager.ts b/src/vs/workbench/contrib/debug/electron-browser/debugConfigurationManager.ts index e6f01c26cdd..2580f4e8aa0 100644 --- a/src/vs/workbench/contrib/debug/electron-browser/debugConfigurationManager.ts +++ b/src/vs/workbench/contrib/debug/electron-browser/debugConfigurationManager.ts @@ -212,9 +212,9 @@ export class ConfigurationManager implements IConfigurationManager { return providers.length > 0; } - resolveConfigurationByProviders(folderUri: uri | undefined, type: string | undefined, debugConfiguration: IConfig): Promise { + resolveConfigurationByProviders(folderUri: uri | undefined, type: string | undefined, debugConfiguration: IConfig): Promise { return this.activateDebuggers('onDebugResolve', type).then(() => { - // pipe the config through the promises sequentially. append at the end the '*' types + // pipe the config through the promises sequentially. Append at the end the '*' types const providers = this.configProviders.filter(p => p.type === type && p.resolveDebugConfiguration) .concat(this.configProviders.filter(p => p.type === '*' && p.resolveDebugConfiguration)); diff --git a/src/vs/workbench/contrib/debug/electron-browser/debugService.ts b/src/vs/workbench/contrib/debug/electron-browser/debugService.ts index 1d95a644fe9..3a80893767c 100644 --- a/src/vs/workbench/contrib/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/contrib/debug/electron-browser/debugService.ts @@ -591,12 +591,20 @@ export class DebugService implements IDebugService { } } - let substitutionThenable: Promise = Promise.resolve(session.configuration); + let substitutionThenable: Promise = Promise.resolve(session.configuration); if (launch && needsToSubstitute && unresolved) { substitutionThenable = this.configurationManager.resolveConfigurationByProviders(launch.workspace ? launch.workspace.uri : undefined, unresolved.type, unresolved) - .then(resolved => this.substituteVariables(launch, resolved)); + .then(resolved => { + if (resolved) { + return this.substituteVariables(launch, resolved); + } else { + // resolve is null or undefined here + return Promise.resolve(resolved); + } + }); } substitutionThenable.then(resolved => { + if (!resolved) { return c(undefined); } -- GitLab