From 0c30d752e01e32da1e2bbcd2dff171244028c1dc Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Tue, 4 May 2010 17:34:55 +0000 Subject: [PATCH] Bug 289526 - [debug view] Migrate the Restart feature to the new one, as supported by the platform --- .../cdt/debug/core/CDebugCorePlugin.java | 10 ++ .../core/command/CCommandAdapterFactory.java | 50 +++++++ .../debug/core/command/CForEachCommand.java | 56 +++++++ .../debug/core/command/RestartCommand.java | 44 ++++++ .../cdt/debug/core/model/IRestart.java | 13 +- .../icons/dlcl16/restart.gif | Bin 344 -> 0 bytes .../icons/elcl16/restart.gif | Bin 353 -> 0 bytes .../plugin.properties | 3 - debug/org.eclipse.cdt.debug.ui/plugin.xml | 35 ----- .../ui/actions/ActionMessages.properties | 3 - .../ui/actions/RestartActionDelegate.java | 139 ------------------ 11 files changed, 170 insertions(+), 183 deletions(-) create mode 100755 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CCommandAdapterFactory.java create mode 100755 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CForEachCommand.java create mode 100755 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/RestartCommand.java delete mode 100644 debug/org.eclipse.cdt.debug.ui/icons/dlcl16/restart.gif delete mode 100644 debug/org.eclipse.cdt.debug.ui/icons/elcl16/restart.gif delete mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RestartActionDelegate.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugCorePlugin.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugCorePlugin.java index b836bddb2f0..15af99f8a9d 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugCorePlugin.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugCorePlugin.java @@ -18,7 +18,9 @@ import java.util.HashSet; import java.util.List; import org.eclipse.cdt.debug.core.breakpointactions.BreakpointActionManager; +import org.eclipse.cdt.debug.core.command.CCommandAdapterFactory; import org.eclipse.cdt.debug.core.disassembly.IDisassemblyContextService; +import org.eclipse.cdt.debug.core.model.IRestart; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; import org.eclipse.cdt.debug.internal.core.DebugConfiguration; import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; @@ -31,6 +33,7 @@ import org.eclipse.cdt.debug.internal.core.sourcelookup.SourceUtils; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdapterManager; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IStatus; @@ -331,6 +334,7 @@ public class CDebugCorePlugin extends Plugin { public void start( BundleContext context ) throws Exception { super.start( context ); initializeCommonSourceLookupDirector(); + createCommandAdapterFactory(); createBreakpointListenersList(); createDisassemblyContextService(); setSessionManager( new SessionManager() ); @@ -349,6 +353,12 @@ public class CDebugCorePlugin extends Plugin { super.stop( context ); } + private void createCommandAdapterFactory() { + IAdapterManager manager= Platform.getAdapterManager(); + CCommandAdapterFactory actionFactory = new CCommandAdapterFactory(); + manager.registerAdapters(actionFactory, IRestart.class); + } + private void initializeCommonSourceLookupDirector() { if ( fCommonSourceLookupDirector == null ) { fCommonSourceLookupDirector = new CommonSourceLookupDirector(); diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CCommandAdapterFactory.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CCommandAdapterFactory.java new file mode 100755 index 00000000000..5c0f666f6bd --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CCommandAdapterFactory.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2006, 2010 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Wind River Systems - copied to use in CDT + *******************************************************************************/ +package org.eclipse.cdt.debug.core.command; + +import org.eclipse.cdt.debug.core.model.IRestart; +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.debug.core.commands.IRestartHandler; + +/** + * Adapter factory for debug commands. + * + * @see org.eclipse.debug.core.command + * + * @since 7.0 + * + */ +public class CCommandAdapterFactory implements IAdapterFactory { + private static IRestartHandler fgRestartCommand = new RestartCommand(); + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + public Object getAdapter(Object adaptableObject, Class adapterType) { + if (IRestartHandler.class.equals(adapterType)) { + if (adaptableObject instanceof IRestart) { + return fgRestartCommand; + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() + */ + public Class[] getAdapterList() { + return new Class[] { + IRestartHandler.class + }; + } + +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CForEachCommand.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CForEachCommand.java new file mode 100755 index 00000000000..c2f3abfe277 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/CForEachCommand.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Wind River Systems - copied to use in CDT + *******************************************************************************/ +package org.eclipse.cdt.debug.core.command; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.IRequest; +import org.eclipse.debug.core.commands.AbstractDebugCommand; +import org.eclipse.debug.core.commands.IEnabledStateRequest; + +/** + * A command that operates on each element individually. + *

+ * Note: copied from org.eclipse.debug.core.command.ForEachCommand. + *

+ * @since 7.0 + */ +public abstract class CForEachCommand extends AbstractDebugCommand { + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.core.commands.DebugCommand#doExecute(java.lang.Object[], org.eclipse.core.runtime.IProgressMonitor, org.eclipse.debug.core.IRequest) + */ + protected void doExecute(Object[] targets, IProgressMonitor monitor, IRequest request) throws CoreException { + for (int i = 0; i < targets.length; i++) { + execute(targets[i]); + monitor.worked(1); + } + } + + protected abstract void execute(Object target) throws CoreException; + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.core.commands.DebugCommand#isExecutable(java.lang.Object[], org.eclipse.core.runtime.IProgressMonitor, org.eclipse.debug.core.commands.IEnabledStateRequest) + */ + protected boolean isExecutable(Object[] targets, IProgressMonitor monitor, IEnabledStateRequest request) throws CoreException { + for (int i = 0; i < targets.length; i++) { + if (!isExecutable(targets[i])) { + return false; + } + monitor.worked(1); + } + return true; + } + + protected abstract boolean isExecutable(Object target); + +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/RestartCommand.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/RestartCommand.java new file mode 100755 index 00000000000..feef3bafd2d --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/command/RestartCommand.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2006, 2010 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Wind River Systems - adopted to use for restart command + *******************************************************************************/ +package org.eclipse.cdt.debug.core.command; + +import org.eclipse.cdt.debug.core.model.IRestart; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.commands.IDebugCommandRequest; +import org.eclipse.debug.core.commands.IRestartHandler; + +/** + * Default restart command for CDI + * + * @since 7.0 + */ +public class RestartCommand extends CForEachCommand implements IRestartHandler { + + protected Object getTarget(Object element) { + return getAdapter(element, IRestart.class); + } + + protected void execute(Object target) throws CoreException { + ((IRestart)target).restart(); + } + + protected boolean isExecutable(Object target) { + return ((IRestart)target).canRestart(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.commands.AbstractDebugCommand#getEnabledStateJobFamily(org.eclipse.debug.core.commands.IDebugCommandRequest) + */ + protected Object getEnabledStateJobFamily(IDebugCommandRequest request) { + return IRestart.class; + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IRestart.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IRestart.java index b9f9ea25c76..38cfd177bf2 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IRestart.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IRestart.java @@ -14,10 +14,17 @@ package org.eclipse.cdt.debug.core.model; import org.eclipse.debug.core.DebugException; /** - * Provides the ability to restart a debug target. + * Provides the ability to restart a debug target. + *

+ * Note: Debug elements which support restart should implement this interface. + * Adopting to this interface is not enough. + *

+ *

+ * Note 2: Debugger can also implement the asynchronous + * {@link org.eclipse.debug.core.commands.IRestartHandler}. + *

* - * @deprecated Use org.eclipse.debug.core.commands.IRestartHandler instead. IRestartHandler - * handles the call in an asynchronous fashion. + * @see org.eclipse.debug.core.commands.IRestartHandler */ public interface IRestart { diff --git a/debug/org.eclipse.cdt.debug.ui/icons/dlcl16/restart.gif b/debug/org.eclipse.cdt.debug.ui/icons/dlcl16/restart.gif deleted file mode 100644 index a3c6fc5f8252c4f6ab758661641647e99bdd433e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmZ?wbhEHb6krfwxT?#rY{Aqu%VxcJdT;r{X`9w8Ubb=Nx38bReEzU*$HoK453F7~ zbIr2ZtGBKH^zq$_Mbo}~et+%qxz{fry?gWQ!IMY#ZeM=<;MRk?*KS_Bc>mFZm5ZmZ zTr_><=5;#`?EdiX)#kmMe|-PCaLuya+tw{!yW+;xi<{Oi{`mg&-W?m}EMK^M!PFzC z4qd%;cGZ#@y|X6&|NozXETH(4g^__lmq7=l8{{Vjw$cOB3OsbA+LgqfWuz>Pn9W&y z!Yd+jL1uTWgMkFcwJD(*n=OtpTs>^%+1=P&wc6&GebL%Qi7(7W+!}PXTlibFUA5bs zrDP@DB~_)I`GiEdUAaYt_?!h;1jU${H5Q8rs))PH7hzhrPK0HZtCkwW_U($wPL2%L E0BB8=DF6Tf diff --git a/debug/org.eclipse.cdt.debug.ui/icons/elcl16/restart.gif b/debug/org.eclipse.cdt.debug.ui/icons/elcl16/restart.gif deleted file mode 100644 index 5708b00dd2bee367ad9b2a6b663e59b25b3eb65c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmZ?wbhEHb6krfwxN6Pt=jpOFm6AU{-CkQM*|4J_Vnu<+f`q@{?ky`4e}84-fg2~* zS4$muaA8A}$<=*R{=DAv_w$vXAFeDf5?@s&u{cjGU`4^=JkizV67O#=et&)DpBEc$ z9-1AnpkiaQ$&Ev^H`Ge~eSczOoz(S%v)5EeuBldDQ=`1BNNi)1sl|kZ6(!<-fU>pH ze}6o6otd+_L3-x|pOq!zSN2ZcJvnGep4j?oNrxF32^$g$Hgrrl(6FgqN}|Ez|Ns9C zNI>x?3nK%AHG>XF4CE&Uwz>mz3p{kB+I8nX%DD2dM24++g>ppc)|Y - - - - - - - - - - - - - - - -