diff options
author | Pawel Piech | 2009-10-22 18:05:17 +0000 |
---|---|---|
committer | Pawel Piech | 2009-10-22 18:05:17 +0000 |
commit | 7111ed8b9fb652c7f49cfb204f4681393b52ea37 (patch) | |
tree | 9206786dff9fa2acbd7edf70a07e95554af659e8 /org.eclipse.debug.ui | |
parent | 6418c272d352c8b4672f00b2ec433bd8b87b5e0b (diff) | |
download | eclipse.platform.debug-7111ed8b9fb652c7f49cfb204f4681393b52ea37.tar.gz eclipse.platform.debug-7111ed8b9fb652c7f49cfb204f4681393b52ea37.tar.xz eclipse.platform.debug-7111ed8b9fb652c7f49cfb204f4681393b52ea37.zip |
Bug 292480 - Terminate and Relaunch does not properly support custom models
Diffstat (limited to 'org.eclipse.debug.ui')
5 files changed, 35 insertions, 37 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java index b2316bcf4..9af543be8 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java @@ -48,6 +48,8 @@ import org.eclipse.debug.core.ILaunchListener; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.IStatusHandler; import org.eclipse.debug.core.Launch; +import org.eclipse.debug.core.model.IDebugElement; +import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.internal.core.IInternalDebugCoreConstants; import org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager; import org.eclipse.debug.internal.ui.launchConfigurations.ClosedProjectFilter; @@ -832,6 +834,31 @@ public class DebugUIPlugin extends AbstractUIPlugin implements ILaunchListener { public void launchRemoved(ILaunch launch) {} /** + * Return the ILaunch associated with a model element, or null if there is + * no such association. + * + * @param element the model element + * @return the ILaunch associated with the element, or null. + * @since 3.6 + */ + public static ILaunch getLaunch(Object element) { + // support for custom models + ILaunch launch= (ILaunch)DebugPlugin.getAdapter(element, ILaunch.class); + if (launch == null) { + // support for standard debug model + if (element instanceof IDebugElement) { + launch= ((IDebugElement)element).getLaunch(); + } else if (element instanceof ILaunch) { + launch= ((ILaunch)element); + } else if (element instanceof IProcess) { + launch= ((IProcess)element).getLaunch(); + } + } + return launch; + } + + + /** * Save dirty editors before launching, according to preferences. * * @return whether to proceed with launch diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/RelaunchActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/RelaunchActionDelegate.java index d461458a6..bae103538 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/RelaunchActionDelegate.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/RelaunchActionDelegate.java @@ -15,6 +15,7 @@ import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager; import org.eclipse.debug.ui.DebugUITools; @@ -24,23 +25,11 @@ public class RelaunchActionDelegate extends AbstractDebugActionDelegate { * @see AbstractDebugActionDelegate#doAction(Object) */ protected void doAction(Object object) { - ILaunch launch= getLaunch(object); + ILaunch launch= DebugUIPlugin.getLaunch(object); if (launch != null) { relaunch(launch.getLaunchConfiguration(), launch.getLaunchMode()); } } - - public static ILaunch getLaunch(Object element) { - ILaunch launch= null; - if (element instanceof IDebugElement) { - launch= ((IDebugElement)element).getLaunch(); - } else if (element instanceof ILaunch) { - launch= ((ILaunch)element); - } else if (element instanceof IProcess) { - launch= ((IProcess)element).getLaunch(); - } - return launch; - } /** * Re-launches the given configuration in the specified mode. diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java index 07c5974f7..ff576bd89 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java @@ -38,7 +38,7 @@ public class TerminateAndRelaunchAction extends DebugCommandAction { // Must be run in the UI thread since the launch can require // prompting to proceed for (int i = 0; i < targets.length; i++) { - ILaunch launch = RelaunchActionDelegate.getLaunch(targets[i]); + ILaunch launch = DebugUIPlugin.getLaunch(targets[i]); RelaunchActionDelegate.relaunch(launch.getLaunchConfiguration(), launch.getLaunchMode()); } } @@ -66,7 +66,7 @@ public class TerminateAndRelaunchAction extends DebugCommandAction { } protected boolean canRelaunch(Object element) { - ILaunch launch = RelaunchActionDelegate.getLaunch(element); + ILaunch launch = DebugUIPlugin.getLaunch(element); if (launch != null) { ILaunchConfiguration configuration = launch.getLaunchConfiguration(); if (configuration != null) { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java index af0ed98bb..afcfebc40 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java @@ -15,9 +15,8 @@ import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.IRequest; import org.eclipse.debug.core.commands.ITerminateHandler; -import org.eclipse.debug.core.model.IDebugElement; -import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.actions.ActionMessages; import org.eclipse.debug.ui.actions.DebugCommandAction; @@ -66,15 +65,7 @@ public class TerminateAndRemoveAction extends DebugCommandAction { IStatus status = request.getStatus(); if(status == null || status.isOK()) { for (int i = 0; i < targets.length; i++) { - Object element = targets[i]; - ILaunch launch= null; - if (element instanceof ILaunch) { - launch= (ILaunch) element; - } else if (element instanceof IDebugElement) { - launch= ((IDebugElement) element).getLaunch(); - } else if (element instanceof IProcess) { - launch= ((IProcess) element).getLaunch(); - } + ILaunch launch = DebugUIPlugin.getLaunch(targets[i]); if (launch != null) DebugPlugin.getDefault().getLaunchManager().removeLaunch(launch); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java index fff336567..327dfc817 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java @@ -32,7 +32,6 @@ import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.commands.IRestartHandler; -import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.core.model.IStackFrame; @@ -838,16 +837,8 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi * Terminates and removes the given element from the launch manager */ public static void terminateAndRemove(Object element) throws DebugException { - ILaunch launch= null; - ITerminate terminable = null; - if (element instanceof ILaunch) { - launch= (ILaunch) element; - } else if (element instanceof IDebugElement) { - launch= ((IDebugElement) element).getLaunch(); - } else if (element instanceof IProcess) { - launch= ((IProcess) element).getLaunch(); - } - terminable = launch; + ILaunch launch = DebugUIPlugin.getLaunch(element); + ITerminate terminable = launch; if (terminable == null) { if (element instanceof ITerminate) { terminable = (ITerminate) element; |