From cdced4d79e7aef7420a5e9c9ff0a2db6514d0d04 Mon Sep 17 00:00:00 2001 From: isidor Date: Fri, 11 Nov 2016 15:34:23 +0100 Subject: [PATCH] debug: simplify breakopint line number - no longer show how the line number jumped --- .../parts/debug/browser/debugEditorActions.ts | 2 +- src/vs/workbench/parts/debug/common/debug.ts | 1 - src/vs/workbench/parts/debug/common/debugModel.ts | 9 ++++----- .../parts/debug/electron-browser/debugService.ts | 12 +++++------- .../parts/debug/electron-browser/debugViewer.ts | 2 +- .../parts/debug/electron-browser/debugViews.ts | 2 +- .../parts/debug/test/node/debugModel.test.ts | 2 -- 7 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/vs/workbench/parts/debug/browser/debugEditorActions.ts b/src/vs/workbench/parts/debug/browser/debugEditorActions.ts index 4196b78b170..9df1f8a0bec 100644 --- a/src/vs/workbench/parts/debug/browser/debugEditorActions.ts +++ b/src/vs/workbench/parts/debug/browser/debugEditorActions.ts @@ -101,7 +101,7 @@ class RunToCursorAction extends EditorAction { const oneTimeListener = debugService.getViewModel().focusedProcess.session.onDidEvent(event => { if (event.event === 'stopped' || event.event === 'exit') { const toRemove = debugService.getModel().getBreakpoints() - .filter(bp => bp.desiredLineNumber === lineNumber && bp.uri.toString() === uri.toString()).pop(); + .filter(bp => bp.lineNumber === lineNumber && bp.uri.toString() === uri.toString()).pop(); if (toRemove) { debugService.removeBreakpoints(toRemove.getId()); } diff --git a/src/vs/workbench/parts/debug/common/debug.ts b/src/vs/workbench/parts/debug/common/debug.ts index b829070e8d7..72a2bb0fd4f 100644 --- a/src/vs/workbench/parts/debug/common/debug.ts +++ b/src/vs/workbench/parts/debug/common/debug.ts @@ -186,7 +186,6 @@ export interface IRawBreakpoint { export interface IBreakpoint extends IEnablement { uri: uri; lineNumber: number; - desiredLineNumber: number; condition: string; hitCondition: string; verified: boolean; diff --git a/src/vs/workbench/parts/debug/common/debugModel.ts b/src/vs/workbench/parts/debug/common/debugModel.ts index 0d01631bac8..ef0fbe7218e 100644 --- a/src/vs/workbench/parts/debug/common/debugModel.ts +++ b/src/vs/workbench/parts/debug/common/debugModel.ts @@ -570,7 +570,6 @@ export class Process implements debug.IProcess { export class Breakpoint implements debug.IBreakpoint { - public lineNumber: number; public verified: boolean; public idFromAdapter: number; public message: string; @@ -578,7 +577,7 @@ export class Breakpoint implements debug.IBreakpoint { constructor( public uri: uri, - public desiredLineNumber: number, + public lineNumber: number, public enabled: boolean, public condition: string, public hitCondition: string @@ -586,7 +585,6 @@ export class Breakpoint implements debug.IBreakpoint { if (enabled === undefined) { this.enabled = true; } - this.lineNumber = this.desiredLineNumber; this.verified = false; this.id = generateUuid(); } @@ -755,6 +753,9 @@ export class Model implements debug.IModel { bp.message = bpData.message; } }); + + // Remove duplicate breakpoints. This can happen when an adapter updates a line number of a breakpoint + this.breakpoints = distinct(this.breakpoints, bp => bp.uri.toString() + bp.lineNumber); this._onDidChangeBreakpoints.fire(); } @@ -762,7 +763,6 @@ export class Model implements debug.IModel { element.enabled = enable; if (element instanceof Breakpoint && !element.enabled) { var breakpoint = element; - breakpoint.lineNumber = breakpoint.desiredLineNumber; breakpoint.verified = false; } @@ -773,7 +773,6 @@ export class Model implements debug.IModel { this.breakpoints.forEach(bp => { bp.enabled = enable; if (!enable) { - bp.lineNumber = bp.desiredLineNumber; bp.verified = false; } }); diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index 1659718dc1c..10ed31d30d6 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -375,7 +375,7 @@ export class DebugService implements debug.IDebugService { let result: Breakpoint[]; try { result = JSON.parse(this.storageService.get(DEBUG_BREAKPOINTS_KEY, StorageScope.WORKSPACE, '[]')).map((breakpoint: any) => { - return new Breakpoint(uri.parse(breakpoint.uri.external || breakpoint.source.uri.external), breakpoint.desiredLineNumber || breakpoint.lineNumber, breakpoint.enabled, breakpoint.condition, breakpoint.hitCondition); + return new Breakpoint(uri.parse(breakpoint.uri.external || breakpoint.source.uri.external), breakpoint.lineNumber, breakpoint.enabled, breakpoint.condition, breakpoint.hitCondition); }); } catch (e) { } @@ -943,10 +943,8 @@ export class DebugService implements debug.IDebugService { return TPromise.as(null); } - const breakpointsToSend = distinct( - this.model.getBreakpoints().filter(bp => this.model.areBreakpointsActivated() && bp.enabled && bp.uri.toString() === modelUri.toString()), - bp => `${bp.desiredLineNumber}` - ); + const breakpointsToSend = distinct(this.model.getBreakpoints().filter(bp => this.model.areBreakpointsActivated() && bp.enabled && bp.uri.toString() === modelUri.toString()), + bp => bp.lineNumber.toString()); let rawSource: DebugProtocol.Source; for (let t of process.getAllThreads()) { @@ -964,8 +962,8 @@ export class DebugService implements debug.IDebugService { return session.setBreakpoints({ source: rawSource, - lines: breakpointsToSend.map(bp => bp.desiredLineNumber), - breakpoints: breakpointsToSend.map(bp => ({ line: bp.desiredLineNumber, condition: bp.condition, hitCondition: bp.hitCondition })), + lines: breakpointsToSend.map(bp => bp.lineNumber), + breakpoints: breakpointsToSend.map(bp => ({ line: bp.lineNumber, condition: bp.condition, hitCondition: bp.hitCondition })), sourceModified }).then(response => { if (!response || !response.body) { diff --git a/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts b/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts index 580cb6f4e7d..c459417e3f0 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugViewer.ts @@ -1257,7 +1257,7 @@ export class BreakpointsRenderer implements IRenderer { this.debugService.getModel().areBreakpointsActivated() ? tree.removeTraits('disabled', [breakpoint]) : tree.addTraits('disabled', [breakpoint]); data.name.textContent = getPathLabel(paths.basename(breakpoint.uri.fsPath), this.contextService); - data.lineNumber.textContent = breakpoint.desiredLineNumber !== breakpoint.lineNumber ? breakpoint.desiredLineNumber + ' \u2192 ' + breakpoint.lineNumber : '' + breakpoint.lineNumber; + data.lineNumber.textContent = breakpoint.lineNumber.toString(); data.filePath.textContent = getPathLabel(paths.dirname(breakpoint.uri.fsPath), this.contextService); data.checkbox.checked = breakpoint.enabled; data.actionBar.context = breakpoint; diff --git a/src/vs/workbench/parts/debug/electron-browser/debugViews.ts b/src/vs/workbench/parts/debug/electron-browser/debugViews.ts index 4c978c7dcb5..20fa93a163a 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugViews.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugViews.ts @@ -382,7 +382,7 @@ export class BreakpointsView extends AdaptiveCollapsibleViewletView { return paths.basename(first.uri.fsPath).localeCompare(paths.basename(second.uri.fsPath)); } - return first.desiredLineNumber - second.desiredLineNumber; + return first.lineNumber - second.lineNumber; } } }, debugTreeOptions(nls.localize({ comment: ['Debug is a noun in this context, not a verb.'], key: 'breakpointsAriaTreeLabel' }, "Debug Breakpoints"))); diff --git a/src/vs/workbench/parts/debug/test/node/debugModel.test.ts b/src/vs/workbench/parts/debug/test/node/debugModel.test.ts index e014d245e89..0259b19346a 100644 --- a/src/vs/workbench/parts/debug/test/node/debugModel.test.ts +++ b/src/vs/workbench/parts/debug/test/node/debugModel.test.ts @@ -57,12 +57,10 @@ suite('Debug - Model', () => { assert.equal(model.getBreakpoints().length, 5); var bp = model.getBreakpoints()[0]; - var originalLineLumber = bp.lineNumber; const update: any = {}; update[bp.getId()] = { line: 100, verified: false }; model.updateBreakpoints(update); assert.equal(bp.lineNumber, 100); - assert.equal(bp.desiredLineNumber, originalLineLumber); model.enableOrDisableAllBreakpoints(false); model.getBreakpoints().forEach(bp => {