diff --git a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts index 79ea63cecdd9a3954977f658f008c5a59798b06d..16908a6f7488a7c137f26520df0b59efed118d2b 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 5a875cb601978deeb4ef6e74e0d80cbebbc5ce73..54a9efe54d041335c2c4d1aa9f550432a7313e4f 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 1fd99ba496087b25fd9268096cbbaa2441c0979c..1d81cefc146b67c5e8560a0e5e2cc31fee0f065f 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 e6f01c26cdda67b7a9891da95da57b7575ce3231..2580f4e8aa003aa40db6f94478042c8c8fb03725 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 1d95a644fe9592ab5cc2f24ced2feaacc45073b4..3a80893767c5e14e31e6fd557fdb175cc0697327 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); }