From 5fece3f30ed2449b3bc5a561f44df83bb0a15bfd Mon Sep 17 00:00:00 2001 From: Andre Weinand Date: Wed, 19 Dec 2018 16:02:54 +0100 Subject: [PATCH] do not ignore debggers that lack a label; fixes #61649 --- .../workbench/api/node/extHostDebugService.ts | 4 +- src/vs/workbench/parts/debug/node/debugger.ts | 58 +++++++++---------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/vs/workbench/api/node/extHostDebugService.ts b/src/vs/workbench/api/node/extHostDebugService.ts index 885a46ee4af..1be53428560 100644 --- a/src/vs/workbench/api/node/extHostDebugService.ts +++ b/src/vs/workbench/api/node/extHostDebugService.ts @@ -128,8 +128,8 @@ export class ExtHostDebugService implements ExtHostDebugServiceShape { const debuggers = ed.contributes['debuggers']; if (debuggers && debuggers.length > 0) { for (const dbg of debuggers) { - // only debugger contributions with a "label" are considered a "defining" debugger contribution - if (dbg.type && dbg.label) { + // only debugger contributions with a label, program, or runtime attribute are considered a "defining" debugger contribution + if (dbg.type && (dbg.label || dbg.program || dbg.runtime)) { debugTypes.push(dbg.type); if (dbg.adapterExecutableCommand) { this._aexCommands.set(dbg.type, dbg.adapterExecutableCommand); diff --git a/src/vs/workbench/parts/debug/node/debugger.ts b/src/vs/workbench/parts/debug/node/debugger.ts index 5384fa697b9..8fccfd8b79d 100644 --- a/src/vs/workbench/parts/debug/node/debugger.ts +++ b/src/vs/workbench/parts/debug/node/debugger.ts @@ -42,37 +42,35 @@ export class Debugger implements IDebugger { } public createDebugAdapter(session: IDebugSession, outputService: IOutputService): Promise { - return new Promise((resolve, reject) => { - this.configurationManager.activateDebuggers('onDebugAdapterProtocolTracker', this.type).then(_ => { - resolve(this._createDebugAdapter(session, outputService)); - }, reject); - }); - } - - private _createDebugAdapter(session: IDebugSession, outputService: IOutputService): Promise { - if (this.inExtHost()) { - return Promise.resolve(this.configurationManager.createDebugAdapter(session)); - } else { - return this.getAdapterDescriptor(session).then(adapterDescriptor => { - switch (adapterDescriptor.type) { - case 'executable': - return new ExecutableDebugAdapter(adapterDescriptor, this.type, outputService); - case 'server': - return new SocketDebugAdapter(adapterDescriptor); - case 'implementation': - // TODO@AW: this.inExtHost() should now return true - return Promise.resolve(this.configurationManager.createDebugAdapter(session)); - default: - throw new Error('unknown type'); - } - }).catch(err => { - if (err && err.message) { - throw new Error(nls.localize('cannot.create.da.with.err', "Cannot create debug adapter ({0}).", err.message)); - } else { - throw new Error(nls.localize('cannot.create.da', "Cannot create debug adapter.")); + return this.configurationManager.activateDebuggers('onDebugAdapterProtocolTracker', this.type).then(_ => { + if (this.inExtHost()) { + const da = this.configurationManager.createDebugAdapter(session); + if (da) { + return Promise.resolve(da); } - }); - } + throw new Error(nls.localize('cannot.find.da', "Cannot find debug adapter for type '{0}'.", this.type)); + } else { + return this.getAdapterDescriptor(session).then(adapterDescriptor => { + switch (adapterDescriptor.type) { + case 'executable': + return new ExecutableDebugAdapter(adapterDescriptor, this.type, outputService); + case 'server': + return new SocketDebugAdapter(adapterDescriptor); + case 'implementation': + // TODO@AW: this.inExtHost() should now return true + return Promise.resolve(this.configurationManager.createDebugAdapter(session)); + default: + throw new Error('unknown descriptor type'); + } + }).catch(err => { + if (err && err.message) { + throw new Error(nls.localize('cannot.create.da.with.err', "Cannot create debug adapter ({0}).", err.message)); + } else { + throw new Error(nls.localize('cannot.create.da', "Cannot create debug adapter.")); + } + }); + } + }); } private getAdapterDescriptor(session: IDebugSession): Promise { -- GitLab