parent
d7eac676ac
commit
40d9559590
2 changed files with 38 additions and 30 deletions
|
@ -17,7 +17,7 @@ import {
|
|||
ITreeElement, IExpression, IExpressionContainer, IDebugSession, IStackFrame, IExceptionBreakpoint, IBreakpoint, IFunctionBreakpoint, IDebugModel,
|
||||
IThread, IRawModelUpdate, IScope, IRawStoppedDetails, IEnablement, IBreakpointData, IExceptionInfo, IBreakpointsChangeEvent, IBreakpointUpdateData, IBaseBreakpoint, State, IDataBreakpoint
|
||||
} from 'vs/workbench/contrib/debug/common/debug';
|
||||
import { Source, UNKNOWN_SOURCE_LABEL } from 'vs/workbench/contrib/debug/common/debugSource';
|
||||
import { Source, UNKNOWN_SOURCE_LABEL, getUriFromSource } from 'vs/workbench/contrib/debug/common/debugSource';
|
||||
import { commonSuffixLength } from 'vs/base/common/strings';
|
||||
import { posix } from 'vs/base/common/path';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
|
@ -515,6 +515,7 @@ interface IBreakpointSessionData extends DebugProtocol.Breakpoint {
|
|||
supportsLogPoints: boolean;
|
||||
supportsFunctionBreakpoints: boolean;
|
||||
supportsDataBreakpoints: boolean;
|
||||
sessionId: string;
|
||||
}
|
||||
|
||||
function toBreakpointSessionData(data: DebugProtocol.Breakpoint, capabilities: DebugProtocol.Capabilities): IBreakpointSessionData {
|
||||
|
@ -549,6 +550,7 @@ export abstract class BaseBreakpoint extends Enablement implements IBaseBreakpoi
|
|||
if (!data) {
|
||||
this.sessionData.delete(sessionId);
|
||||
} else {
|
||||
data.sessionId = sessionId;
|
||||
this.sessionData.set(sessionId, data);
|
||||
}
|
||||
|
||||
|
@ -596,7 +598,7 @@ export abstract class BaseBreakpoint extends Enablement implements IBaseBreakpoi
|
|||
export class Breakpoint extends BaseBreakpoint implements IBreakpoint {
|
||||
|
||||
constructor(
|
||||
public uri: uri,
|
||||
private _uri: uri,
|
||||
private _lineNumber: number,
|
||||
private _column: number | undefined,
|
||||
enabled: boolean,
|
||||
|
@ -616,12 +618,16 @@ export class Breakpoint extends BaseBreakpoint implements IBreakpoint {
|
|||
|
||||
get verified(): boolean {
|
||||
if (this.data) {
|
||||
return this.data.verified && !this.textFileService.isDirty(this.uri);
|
||||
return this.data.verified && !this.textFileService.isDirty(this._uri);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
get uri(): uri {
|
||||
return this.verified && this.data && this.data.source ? getUriFromSource(this.data.source, this.data.source.path, this.data.sessionId) : this._uri;
|
||||
}
|
||||
|
||||
get column(): number | undefined {
|
||||
return this.verified && this.data && typeof this.data.column === 'number' ? this.data.column : this._column;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as nls from 'vs/nls';
|
||||
import { URI as uri } from 'vs/base/common/uri';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { normalize, isAbsolute } from 'vs/base/common/path';
|
||||
import * as resources from 'vs/base/common/resources';
|
||||
import { DEBUG_SCHEME } from 'vs/workbench/contrib/debug/common/debug';
|
||||
|
@ -32,7 +32,7 @@ export const UNKNOWN_SOURCE_LABEL = nls.localize('unknownSource', "Unknown Sourc
|
|||
|
||||
export class Source {
|
||||
|
||||
readonly uri: uri;
|
||||
readonly uri: URI;
|
||||
available: boolean;
|
||||
raw: DebugProtocol.Source;
|
||||
|
||||
|
@ -48,30 +48,7 @@ export class Source {
|
|||
path = `${DEBUG_SCHEME}:${UNKNOWN_SOURCE_LABEL}`;
|
||||
}
|
||||
|
||||
if (typeof this.raw.sourceReference === 'number' && this.raw.sourceReference > 0) {
|
||||
this.uri = uri.from({
|
||||
scheme: DEBUG_SCHEME,
|
||||
path,
|
||||
query: `session=${sessionId}&ref=${this.raw.sourceReference}`
|
||||
});
|
||||
} else {
|
||||
if (isUri(path)) { // path looks like a uri
|
||||
this.uri = uri.parse(path);
|
||||
} else {
|
||||
// assume a filesystem path
|
||||
if (isAbsolute(path)) {
|
||||
this.uri = uri.file(path);
|
||||
} else {
|
||||
// path is relative: since VS Code cannot deal with this by itself
|
||||
// create a debug url that will result in a DAP 'source' request when the url is resolved.
|
||||
this.uri = uri.from({
|
||||
scheme: DEBUG_SCHEME,
|
||||
path,
|
||||
query: `session=${sessionId}`
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
this.uri = getUriFromSource(this.raw, path, sessionId);
|
||||
}
|
||||
|
||||
get name() {
|
||||
|
@ -108,7 +85,7 @@ export class Source {
|
|||
}, sideBySide ? SIDE_GROUP : ACTIVE_GROUP);
|
||||
}
|
||||
|
||||
static getEncodedDebugData(modelUri: uri): { name: string, path: string, sessionId?: string, sourceReference?: number } {
|
||||
static getEncodedDebugData(modelUri: URI): { name: string, path: string, sessionId?: string, sourceReference?: number } {
|
||||
let path: string;
|
||||
let sourceReference: number | undefined;
|
||||
let sessionId: string | undefined;
|
||||
|
@ -149,3 +126,28 @@ export class Source {
|
|||
};
|
||||
}
|
||||
}
|
||||
|
||||
export function getUriFromSource(raw: DebugProtocol.Source, path: string | undefined, sessionId: string): URI {
|
||||
if (typeof raw.sourceReference === 'number' && raw.sourceReference > 0) {
|
||||
return URI.from({
|
||||
scheme: DEBUG_SCHEME,
|
||||
path,
|
||||
query: `session=${sessionId}&ref=${raw.sourceReference}`
|
||||
});
|
||||
}
|
||||
|
||||
if (path && isUri(path)) { // path looks like a uri
|
||||
return URI.parse(path);
|
||||
}
|
||||
// assume a filesystem path
|
||||
if (path && isAbsolute(path)) {
|
||||
return URI.file(path);
|
||||
}
|
||||
// path is relative: since VS Code cannot deal with this by itself
|
||||
// create a debug url that will result in a DAP 'source' request when the url is resolved.
|
||||
return URI.from({
|
||||
scheme: DEBUG_SCHEME,
|
||||
path,
|
||||
query: `session=${sessionId}`
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue