提交 7f182c40 编写于 作者: I isidor

debug brekpoints: polish inline breakpoint decorations

上级 d9ec15cd
......@@ -68,7 +68,7 @@ async function createCandidateDecorations(model: ITextModel, lineNumbers: number
const result: { range: Range; options: IModelDecorationOptions; }[] = [];
const session = debugService.getViewModel().focusedSession;
if (session && session.capabilities.supportsBreakpointLocationsRequest) {
lineNumbers.forEach(async lineNumber => {
await Promise.all(lineNumbers.map(async lineNumber => {
const positions = await session.breakpointsLocations(model.uri, lineNumber);
positions.forEach(p => {
result.push({
......@@ -79,7 +79,7 @@ async function createCandidateDecorations(model: ITextModel, lineNumbers: number
}
});
});
});
}));
}
return result;
......@@ -114,7 +114,7 @@ class BreakpointEditorContribution implements IBreakpointEditorContribution {
private breakpointWidgetVisible: IContextKey<boolean>;
private toDispose: IDisposable[] = [];
private ignoreDecorationsChangedEvent = false;
private ignoreFirstBreakpointsChangeEvent = false;
private ignoreBreakpointsChangeEvent = false;
private breakpointDecorations: IBreakpointDecoration[] = [];
private candidateDecoraions: { decorationId: string, inlineWidget: InlineBreakpointWidget }[] = [];
......@@ -222,11 +222,9 @@ class BreakpointEditorContribution implements IBreakpointEditorContribution {
await this.setDecorations();
}));
this.toDispose.push(this.debugService.getModel().onDidChangeBreakpoints(async () => {
if (this.ignoreFirstBreakpointsChangeEvent) {
this.ignoreFirstBreakpointsChangeEvent = false;
return;
if (!this.ignoreBreakpointsChangeEvent) {
await this.setDecorations();
}
await this.setDecorations();
}));
this.toDispose.push(this.editor.onDidChangeModelDecorations(() => this.onModelDecorationsChanged()));
}
......@@ -298,7 +296,7 @@ class BreakpointEditorContribution implements IBreakpointEditorContribution {
nls.localize('addLogPoint', "Add Logpoint..."),
undefined,
true,
() => Promise.resolve(this.showBreakpointWidget(lineNumber, BreakpointWidgetContext.LOG_MESSAGE))
() => Promise.resolve(this.showBreakpointWidget(lineNumber, column, BreakpointWidgetContext.LOG_MESSAGE))
));
}
......@@ -378,7 +376,7 @@ class BreakpointEditorContribution implements IBreakpointEditorContribution {
const lineNumbers = distinct(this.breakpointDecorations.map(bpd => bpd.range.startLineNumber));
let desiredCandidateDecorations = await createCandidateDecorations(this.editor.getModel(), lineNumbers, this.debugService);
desiredCandidateDecorations = desiredCandidateDecorations.filter(dbd => {
const breakpointDecorationAlreadyAtCandidateLocation = this.breakpointDecorations.filter(bd => bd.range.equalsRange(dbd.range)).length >= 0;
const breakpointDecorationAlreadyAtCandidateLocation = this.breakpointDecorations.filter(bd => bd.range.equalsRange(dbd.range)).length > 0;
return !breakpointDecorationAlreadyAtCandidateLocation;
});
const candidateDecorationids = this.editor.deltaDecorations(this.candidateDecoraions.map(c => c.decorationId), desiredCandidateDecorations);
......@@ -436,10 +434,10 @@ class BreakpointEditorContribution implements IBreakpointEditorContribution {
}
try {
this.ignoreFirstBreakpointsChangeEvent = true;
this.ignoreBreakpointsChangeEvent = true;
await this.debugService.updateBreakpoints(model.uri, data, true);
} finally {
this.ignoreFirstBreakpointsChangeEvent = false;
this.ignoreBreakpointsChangeEvent = false;
}
}
......
......@@ -376,7 +376,7 @@ export class DebugSession implements IDebugSession {
const response = await this.raw.breakpointLocations({ source, line: lineNumber });
const positions = response.body.breakpoints.map(bp => ({ lineNumber: bp.line, column: bp.column || 1 }));
return distinct(positions, p => p.toString());
return distinct(positions, p => `${p.lineNumber}:${p.column}`);
}
return Promise.reject(new Error('no debug adapter'));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册