diff --git a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts index b2847ca666e6abc1d10f9b7cb6111c9c4240a879..69e00e88b6795683daf99618729e0c080cebbbe1 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts @@ -111,10 +111,8 @@ export class MainThreadDebugService implements MainThreadDebugServiceShape { condition: sbp.condition, hitCondition: bp.hitCondition, sourceUriStr: sbp.uri.toString(), - location: { - line: sbp.lineNumber, - character: sbp.column - } + line: sbp.lineNumber > 0 ? sbp.lineNumber - 1 : 0, + character: (typeof sbp.column === 'number' && sbp.column > 0) ? sbp.column - 1 : 0 }; } }); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index f676db266915fccfb836b97a1f51c9d5f8be7223..8a108fdd5d59d31c0d35cd7eb4035aed929da6e6 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -636,7 +636,8 @@ export interface IBreakpointData { export interface ISourceBreakpointData extends IBreakpointData { type: 'source'; sourceUriStr: string; - location: vscode.Position; + line: number; + character: number; } export interface IFunctionBreakpointData extends IBreakpointData { diff --git a/src/vs/workbench/api/node/extHostDebugService.ts b/src/vs/workbench/api/node/extHostDebugService.ts index 552669070ec4811ed8fcd10547f33f0421acd59b..426679641c469fd99b9741c7e4e6091629429e27 100644 --- a/src/vs/workbench/api/node/extHostDebugService.ts +++ b/src/vs/workbench/api/node/extHostDebugService.ts @@ -12,7 +12,7 @@ import { ExtHostWorkspace } from 'vs/workbench/api/node/extHostWorkspace'; import * as vscode from 'vscode'; import URI from 'vs/base/common/uri'; -import * as types from 'vs/workbench/api/node/extHostTypes'; +import { Disposable, Position } from 'vs/workbench/api/node/extHostTypes'; export class ExtHostDebugService implements ExtHostDebugServiceShape { @@ -103,9 +103,9 @@ export class ExtHostDebugService implements ExtHostDebugServiceShape { if (delta.added) { a = delta.added.map(bpd => { - const id = bpd.id; - this._breakpoints.set(id, this.fromWire(bpd)); - return bpd; + const bp = this.fromWire(bpd); + this._breakpoints.set(bpd.id, bp); + return bp; }); } @@ -121,9 +121,7 @@ export class ExtHostDebugService implements ExtHostDebugServiceShape { if (delta.changed) { c = delta.changed.map(bpd => { - const id = bpd.id; - this._breakpoints.set(id, this.fromWire(bpd)); - return bpd; + return extendObject(this._breakpoints.get(bpd.id), this.fromWire(bpd)); }); } @@ -135,24 +133,37 @@ export class ExtHostDebugService implements ExtHostDebugServiceShape { } private fromWire(bp: ISourceBreakpointData | IFunctionBreakpointData): vscode.Breakpoint { - delete bp.id; - if (bp.type === 'source') { - (bp).source = URI.parse(bp.sourceUriStr); - delete bp.sourceUriStr; + if (bp.type === 'function') { + const fbp: vscode.FunctionBreakpoint = { + type: 'function', + enabled: bp.enabled, + condition: bp.condition, + hitCondition: bp.hitCondition, + functionName: bp.functionName + }; + return fbp; } - return bp; + const sbp: vscode.SourceBreakpoint = { + type: 'source', + enabled: bp.enabled, + condition: bp.condition, + hitCondition: bp.hitCondition, + source: URI.parse(bp.sourceUriStr), + location: new Position(bp.line, bp.character) + }; + return sbp; } public registerDebugConfigurationProvider(type: string, provider: vscode.DebugConfigurationProvider): vscode.Disposable { if (!provider) { - return new types.Disposable(() => { }); + return new Disposable(() => { }); } let handle = this.nextHandle(); this._handlers.set(handle, provider); this._debugServiceProxy.$registerDebugConfigurationProvider(type, !!provider.provideDebugConfigurations, !!provider.resolveDebugConfiguration, handle); - return new types.Disposable(() => { + return new Disposable(() => { this._handlers.delete(handle); this._debugServiceProxy.$unregisterDebugConfigurationProvider(handle); }); @@ -299,3 +310,16 @@ export class ExtHostDebugConsole implements vscode.DebugConsole { this.append(value + '\n'); } } + +/** + * Copy attributes from fromObject to toObject. + */ +export function extendObject(toObject: T, fromObject: T): T { + + for (let key in fromObject) { + if (fromObject.hasOwnProperty(key)) { + toObject[key] = fromObject[key]; + } + } + return toObject; +}