From 33ac8da64ed6352750d2240a6a5e09e1952c5e6d Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Tue, 3 Jun 2008 18:33:34 +0000 Subject: [PATCH] Bug 235426 Make the FinalLaunchSequence class easily replaceable for someone that wants to extend the launch --- .../gdb/internal/ui/launching/ProcessPrompter.java | 6 ++---- .../provisional/launching/FinalLaunchSequence.java | 5 +---- .../provisional/launching/GdbLaunchDelegate.java | 14 ++++++++++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/ProcessPrompter.java b/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/ProcessPrompter.java index 916ae6197fd..ea506073117 100644 --- a/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/ProcessPrompter.java +++ b/plugins/org.eclipse.dd.gdb.ui/src/org/eclipse/dd/gdb/internal/ui/launching/ProcessPrompter.java @@ -18,7 +18,6 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; -import org.eclipse.dd.gdb.internal.provisional.launching.FinalLaunchSequence; import org.eclipse.dd.gdb.internal.provisional.launching.LaunchMessages; import org.eclipse.dd.gdb.internal.ui.GdbUIPlugin; import org.eclipse.debug.core.IStatusHandler; @@ -39,7 +38,7 @@ public class ProcessPrompter implements IStatusHandler { * @see org.eclipse.debug.core.IStatusHandler#handleStatus(org.eclipse.core.runtime.IStatus, * java.lang.Object) */ - public Object handleStatus(IStatus status, Object source) throws CoreException { + public Object handleStatus(IStatus status, Object processList) throws CoreException { Shell shell = GdbUIPlugin.getShell(); if (shell == null) { IStatus error = new Status(IStatus.ERROR, GdbUIPlugin.getUniqueIdentifier(), @@ -48,8 +47,7 @@ public class ProcessPrompter implements IStatusHandler { throw new CoreException(error); } - // Get the process list from the FinalLaunchSequence - IProcessInfo[] plist = ((FinalLaunchSequence)source).getProcessList(); + IProcessInfo[] plist = (IProcessInfo[])processList; if (plist == null) { MessageDialog.openError( shell, diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java index 79f35eddbd3..43703848ca1 100644 --- a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java @@ -272,7 +272,7 @@ public class FinalLaunchSequence extends Sequence { @Override protected IStatus run(IProgressMonitor monitor) { try { - Object result = prompter.handleStatus(processPromptStatus, FinalLaunchSequence.this); + Object result = prompter.handleStatus(processPromptStatus, fProcessList); if (result instanceof Integer) { rm.setData((Integer)result); } else { @@ -389,8 +389,5 @@ public class FinalLaunchSequence extends Sequence { public Step[] getSteps() { return fSteps; } - - public IProcessInfo[] getProcessList() { return fProcessList; } - } diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java index f4a202f7ffb..74d34502e31 100644 --- a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java @@ -37,6 +37,8 @@ import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.dd.dsf.concurrent.DsfExecutor; +import org.eclipse.dd.dsf.concurrent.Sequence; import org.eclipse.dd.dsf.concurrent.ThreadSafe; import org.eclipse.dd.dsf.debug.sourcelookup.DsfSourceLookupDirector; import org.eclipse.dd.dsf.service.DsfSession; @@ -131,8 +133,8 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate launch.addInferiorProcess(exePath.lastSegment()); // Create and invoke the final launch sequence to setup GDB - final FinalLaunchSequence finalLaunchSequence = - new FinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach); + final Sequence finalLaunchSequence = + getFinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach); launch.getSession().getExecutor().execute(finalLaunchSequence); try { finalLaunchSequence.get(); @@ -143,6 +145,14 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate } } + /* + * This method can be overridden by subclasses to allow to change the final launch sequence without + * having to change the entire GdbLaunchDelegate + */ + protected Sequence getFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType type, boolean attach) { + return new FinalLaunchSequence(executor, launch, type, attach); + } + private SessionType getSessionType(ILaunchConfiguration config) { try { String debugMode = config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN );