提交 1d566aeb 编写于 作者: I isidor

debug: get rid of session.configuration.type

fixes #20432
上级 4b2b4a59
......@@ -603,7 +603,7 @@ export class SetValueAction extends AbstractDebugAction {
protected isEnabled(state: State): boolean {
const process = this.debugService.getViewModel().focusedProcess;
return super.isEnabled(state) && state === State.Stopped && process && process.session.configuration.capabilities.supportsSetVariable;
return super.isEnabled(state) && state === State.Stopped && process && process.session.capabilities.supportsSetVariable;
}
}
......@@ -795,7 +795,7 @@ export class StepBackAction extends AbstractDebugAction {
protected isEnabled(state: State): boolean {
const process = this.debugService.getViewModel().focusedProcess;
return super.isEnabled(state) && state === State.Stopped &&
process && process.session.configuration.capabilities.supportsStepBack;
process && process.session.capabilities.supportsStepBack;
}
}
......@@ -818,6 +818,6 @@ export class ReverseContinueAction extends AbstractDebugAction {
protected isEnabled(state: State): boolean {
const process = this.debugService.getViewModel().focusedProcess;
return super.isEnabled(state) && state === State.Stopped &&
process && process.session.configuration.capabilities.supportsStepBack;
process && process.session.capabilities.supportsStepBack;
}
}
......@@ -210,7 +210,7 @@ export class DebugActionsWidget implements IWorkbenchContribution {
const state = this.debugService.state;
const process = this.debugService.getViewModel().focusedProcess;
const attached = process && !strings.equalsIgnoreCase(process.session.configuration.type, 'extensionHost') && process.isAttach();
const attached = process && strings.equalsIgnoreCase(process.configuration.request, 'attach') && !strings.equalsIgnoreCase(process.configuration.type, 'extensionHost');
return this.allActions.filter(a => {
if (a.id === ContinueAction.ID) {
......@@ -220,10 +220,10 @@ export class DebugActionsWidget implements IWorkbenchContribution {
return state === debug.State.Running;
}
if (a.id === StepBackAction.ID) {
return process && process.session.configuration.capabilities.supportsStepBack;
return process && process.session.capabilities.supportsStepBack;
}
if (a.id === ReverseContinueAction.ID) {
return process && process.session.configuration.capabilities.supportsStepBack;
return process && process.session.capabilities.supportsStepBack;
}
if (a.id === DisconnectAction.ID) {
return attached;
......
......@@ -271,7 +271,7 @@ export class DebugEditorModelManager implements IWorkbenchContribution {
}
const process = this.debugService.getViewModel().focusedProcess;
if (process && !process.session.configuration.capabilities.supportsConditionalBreakpoints) {
if (process && !process.session.capabilities.supportsConditionalBreakpoints) {
return DebugEditorModelManager.BREAKPOINT_UNSUPPORTED_DECORATION;
}
......
......@@ -78,7 +78,7 @@ export interface ISession {
variables(args: DebugProtocol.VariablesArguments): TPromise<DebugProtocol.VariablesResponse>;
evaluate(args: DebugProtocol.EvaluateArguments): TPromise<DebugProtocol.EvaluateResponse>;
configuration: { type: string, capabilities: DebugProtocol.Capabilities };
capabilities: DebugProtocol.Capabilities;
disconnect(restart?: boolean, force?: boolean): TPromise<DebugProtocol.DisconnectResponse>;
custom(request: string, args: any): TPromise<DebugProtocol.Response>;
onDidEvent: Event<DebugProtocol.Event>;
......
......@@ -269,7 +269,7 @@ export class Variable extends ExpressionContainer implements debug.IExpression {
names.forEach(name => {
if (!result) {
result = name;
} else if (Variable.ARRAY_ELEMENT_SYNTAX.test(name) || (this.process.session.configuration.type === 'node' && !Variable.NOT_PROPERTY_SYNTAX.test(name))) {
} else if (Variable.ARRAY_ELEMENT_SYNTAX.test(name) || (this.process.configuration.type === 'node' && !Variable.NOT_PROPERTY_SYNTAX.test(name))) {
// use safe way to access node properties a['property_name']. Also handles array elements.
result = name && name.indexOf('[') === 0 ? `${result}${name}` : `${result}['${name}']`;
} else {
......@@ -591,7 +591,7 @@ export class Process implements debug.IProcess {
}
public completions(frameId: number, text: string, position: Position, overwriteBefore: number): TPromise<ISuggestion[]> {
if (!this.session.configuration.capabilities.supportsCompletionsRequest) {
if (!this.session.capabilities.supportsCompletionsRequest) {
return TPromise.as([]);
}
......
......@@ -170,7 +170,7 @@ export class DebugHoverWidget implements IContentWidget {
// use regex to extract the sub-expression #9821
const matchingExpression = lineContent.substring(expressionRange.startColumn - 1, expressionRange.endColumn);
let promise: TPromise<IExpression>;
if (process.session.configuration.capabilities.supportsEvaluateForHovers) {
if (process.session.capabilities.supportsEvaluateForHovers) {
const result = new Expression(matchingExpression);
promise = result.evaluate(process, this.debugService.getViewModel().focusedStackFrame, 'hover').then(() => result);
} else {
......
......@@ -149,7 +149,8 @@ export class DebugService implements debug.IDebugService {
// TODO@Isidor this is a hack to just get any 'extensionHost' session.
// Optimally the broadcast would contain the id of the session
// We are only intersted if we have an active debug session for extensionHost
const session = <RawDebugSession>this.model.getProcesses().map(p => p.session).filter(s => s.configuration.type === 'extensionHost').pop();
const process = this.model.getProcesses().filter(p => p.configuration.type === 'extensionHost').pop();
const session = process ? <RawDebugSession>process.session : null;
if (broadcast.channel === EXTENSION_ATTACH_BROADCAST_CHANNEL) {
this.rawAttach(session, broadcast.payload.port);
return;
......@@ -242,7 +243,7 @@ export class DebugService implements debug.IDebugService {
this.toDisposeOnSessionEnd.get(session.getId()).push(session.onDidInitialize(event => {
aria.status(nls.localize('debuggingStarted', "Debugging started."));
const sendConfigurationDone = () => {
if (session && session.configuration.capabilities.supportsConfigurationDoneRequest) {
if (session && session.capabilities.supportsConfigurationDoneRequest) {
return session.configurationDone().done(null, e => {
// Disconnect the debug session on configuration done error #10596
if (session) {
......@@ -363,7 +364,7 @@ export class DebugService implements debug.IDebugService {
this.toDisposeOnSessionEnd.get(session.getId()).push(session.onDidExitAdapter(event => {
// 'Run without debugging' mode VSCode must terminate the extension host. More details: #3905
const process = this.viewModel.focusedProcess;
if (session && session.configuration.type === 'extensionHost' && this.sessionStates.get(session.getId()) === debug.State.Running &&
if (process && session && process.getId() === session.getId() && process.configuration.type === 'extensionHost' && this.sessionStates.get(session.getId()) === debug.State.Running &&
process && this.contextService.getWorkspace() && process.configuration.noDebug) {
this.windowsService.closeExtensionHostWindow(this.contextService.getWorkspace().resource.fsPath);
}
......@@ -694,7 +695,7 @@ export class DebugService implements debug.IDebugService {
supportsVariablePaging: true, // #9537
supportsRunInTerminalRequest: true // #10574
}).then((result: DebugProtocol.InitializeResponse) => {
this.model.setExceptionBreakpoints(session.configuration.capabilities.exceptionBreakpointFilters);
this.model.setExceptionBreakpoints(session.capabilities.exceptionBreakpointFilters);
return configuration.request === 'attach' ? session.attach(configuration) : session.launch(configuration);
}).then((result: DebugProtocol.Response) => {
if (session.disconnected) {
......@@ -826,7 +827,7 @@ export class DebugService implements debug.IDebugService {
return this.createProcess(this.viewModel.selectedConfigurationName);
}
if (process.session.configuration.capabilities.supportsRestartRequest) {
if (process.session.capabilities.supportsRestartRequest) {
return process.session.custom('restart', null);
}
const preserveFocus = process.getId() === this.viewModel.focusedProcess.getId();
......@@ -852,8 +853,9 @@ export class DebugService implements debug.IDebugService {
private onSessionEnd(session: RawDebugSession): void {
const bpsExist = this.model.getBreakpoints().length > 0;
const process = this.model.getProcesses().filter(p => p.getId() === session.getId()).pop();
this.telemetryService.publicLog('debugSessionStop', {
type: session.configuration.type,
type: process.configuration.type,
success: session.emittedStopped || !bpsExist,
sessionLengthInSeconds: session.getLengthInSeconds(),
breakpointCount: this.model.getBreakpoints().length,
......@@ -866,7 +868,7 @@ export class DebugService implements debug.IDebugService {
// an internal module might be open so the dispose can throw -> ignore and continue with stop session.
}
this.model.removeProcess(session.getId());
this.model.removeProcess(process.getId());
const focusedProcess = this.viewModel.focusedProcess;
if (focusedProcess && focusedProcess.getId() === session.getId()) {
this.focusStackFrameAndEvaluate(null).done(null, errors.onUnexpectedError);
......@@ -970,7 +972,7 @@ export class DebugService implements debug.IDebugService {
private sendFunctionBreakpoints(targetProcess?: debug.IProcess): TPromise<void> {
const sendFunctionBreakpointsToProcess = (process: debug.IProcess): TPromise<void> => {
const session = <RawDebugSession>process.session;
if (!session.readyForBreakpoints || !session.configuration.capabilities.supportsFunctionBreakpoints) {
if (!session.readyForBreakpoints || !session.capabilities.supportsFunctionBreakpoints) {
return TPromise.as(null);
}
......
......@@ -318,7 +318,7 @@ export class CallStackActionProvider implements IActionProvider {
actions.push(this.instantiationService.createInstance(PauseAction, PauseAction.ID, PauseAction.LABEL));
}
} else if (element instanceof StackFrame) {
if (element.thread.process.session.configuration.capabilities.supportsRestartFrame) {
if (element.thread.process.session.capabilities.supportsRestartFrame) {
actions.push(this.instantiationService.createInstance(RestartFrameAction, RestartFrameAction.ID, RestartFrameAction.LABEL));
}
actions.push(new CopyStackTraceAction(CopyStackTraceAction.ID, CopyStackTraceAction.LABEL));
......@@ -1167,9 +1167,9 @@ export class BreakpointsRenderer implements IRenderer {
// Mark function breakpoints as disabled if deactivated or if debug type does not support them #9099
const process = this.debugService.getViewModel().focusedProcess;
if ((process && !process.session.configuration.capabilities.supportsFunctionBreakpoints) || !this.debugService.getModel().areBreakpointsActivated()) {
if ((process && !process.session.capabilities.supportsFunctionBreakpoints) || !this.debugService.getModel().areBreakpointsActivated()) {
tree.addTraits('disabled', [functionBreakpoint]);
if (process && !process.session.configuration.capabilities.supportsFunctionBreakpoints) {
if (process && !process.session.capabilities.supportsFunctionBreakpoints) {
data.breakpoint.title = nls.localize('functionBreakpointsNotSupported', "Function breakpoints are not supported by this debug type");
}
} else {
......
......@@ -51,7 +51,7 @@ export class RawDebugSession extends v8.V8Protocol implements debug.ISession {
private startTime: number;
public disconnected: boolean;
private sentPromises: TPromise<DebugProtocol.Response>[];
private capabilities: DebugProtocol.Capabilities;
private _capabilities: DebugProtocol.Capabilities;
private allThreadsContinued: boolean;
private _onDidInitialize: Emitter<DebugProtocol.InitializedEvent>;
......@@ -214,11 +214,8 @@ export class RawDebugSession extends v8.V8Protocol implements debug.ISession {
this._onDidEvent.fire(event);
}
public get configuration(): { type: string, capabilities: DebugProtocol.Capabilities } {
return {
type: this.adapter.type,
capabilities: this.capabilities || {}
};
public get capabilities(): DebugProtocol.Capabilities {
return this._capabilities || {};
}
public initialize(args: DebugProtocol.InitializeRequestArguments): TPromise<DebugProtocol.InitializeResponse> {
......@@ -227,7 +224,7 @@ export class RawDebugSession extends v8.V8Protocol implements debug.ISession {
private readCapabilities(response: DebugProtocol.Response): DebugProtocol.Response {
if (response) {
this.capabilities = objects.mixin(this.capabilities, response.body);
this._capabilities = objects.mixin(this._capabilities, response.body);
}
return response;
......
......@@ -128,11 +128,8 @@ export class MockSession implements debug.ISession {
return TPromise.as(null);
}
public get configuration(): { type: string, capabilities: DebugProtocol.Capabilities } {
return {
type: 'mock',
capabilities: {}
};
public get capabilities(): DebugProtocol.Capabilities {
return {};
}
public get onDidEvent(): Event<DebugProtocol.Event> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册