From 0d50385e635af212006d8205c3af091803a26c6f Mon Sep 17 00:00:00 2001 From: Dominic Scharfe Date: Mon, 3 Aug 2020 09:49:34 +0200 Subject: [PATCH] Bug 565771: Allow to extend GdbConnectCommand PID prompting mechanism - partially refactor connect method to connectToProcesses - rename variables to match existing ones from other methods (attachToProcesses and the PromptForPidJob constructor) - change visibility for attachToProcesses from private -> protected Change-Id: I62de9e1303895faac61fec011a8cce0d59d81f71 Signed-off-by: Dominic Scharfe --- .../ui/commands/GdbConnectCommand.java | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbConnectCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbConnectCommand.java index 17cb1a2a6b6..759a1fd48dc 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbConnectCommand.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbConnectCommand.java @@ -417,39 +417,7 @@ public class GdbConnectCommand extends RefreshableDebugCommand implements IConne new ImmediateDataRequestMonitor>(rm) { @Override protected void handleSuccess() { - List dbgPids = getData(); - - // Prompt the user to choose one or more processes - new PromptForPidJob( - LaunchUIMessages - .getString("ProcessPrompter.PromptJob"), //$NON-NLS-1$ - procInfoList.toArray( - new IProcessExtendedInfo[procInfoList - .size()]), - dbgPids, - new DataRequestMonitor(fExecutor, rm) { - @Override - protected void handleCancel() { - rm.cancel(); - rm.done(); - } - - @Override - protected void handleSuccess() { - Object data = getData(); - if (data instanceof IProcessExtendedInfo[]) { - attachToProcesses(controlCtx, - (IProcessExtendedInfo[]) data, - rm); - } else { - rm.done(new Status(IStatus.ERROR, - GdbUIPlugin.PLUGIN_ID, - IDsfStatusConstants.INTERNAL_ERROR, - "Invalid return type for process prompter", //$NON-NLS-1$ - null)); - } - } - }).schedule(); + connectToProcesses(controlCtx, procInfoList, getData(), rm); } }); } @@ -538,7 +506,43 @@ public class GdbConnectCommand extends RefreshableDebugCommand implements IConne }); } - private void attachToProcesses(final ICommandControlDMContext controlDmc, IProcessExtendedInfo[] processes, + /** + * This method is called by {@link #connect(RequestMonitor)}.
+ * The default implementation schedules a {@link PromptForPidJob}, which calls + * {@link #attachToProcesses(ICommandControlDMContext, IProcessExtendedInfo[], RequestMonitor)} on success. + * + * @param controlDmc + * @param processes + * @param dbgPids + * @param rm + */ + protected void connectToProcesses(final ICommandControlDMContext controlDmc, + final List processes, List debuggedProcesses, final RequestMonitor rm) { + // Prompt the user to choose one or more processes + new PromptForPidJob(LaunchUIMessages.getString("ProcessPrompter.PromptJob"), //$NON-NLS-1$ + processes.toArray(new IProcessExtendedInfo[processes.size()]), debuggedProcesses, + new DataRequestMonitor(fExecutor, rm) { + @Override + protected void handleCancel() { + rm.cancel(); + rm.done(); + } + + @Override + protected void handleSuccess() { + Object data = getData(); + if (data instanceof IProcessExtendedInfo[]) { + attachToProcesses(controlDmc, (IProcessExtendedInfo[]) data, rm); + } else { + rm.done(new Status(IStatus.ERROR, GdbUIPlugin.PLUGIN_ID, IDsfStatusConstants.INTERNAL_ERROR, + "Invalid return type for process prompter", //$NON-NLS-1$ + null)); + } + } + }).schedule(); + } + + protected void attachToProcesses(final ICommandControlDMContext controlDmc, IProcessExtendedInfo[] processes, final RequestMonitor rm) { // For a local attach, GDB can figure out the binary automatically,