From a8bb45b2757a8c46415ac8cb71559e3aa4fb5abe Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Tue, 4 Feb 2003 23:47:54 +0000 Subject: [PATCH] Implementation of the 'Resume Without Signal' action. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 9 ++ .../cdt/debug/core/model/ICDebugTarget.java | 1 + .../core/model/IResumeWithoutSignal.java | 33 +++++ .../internal/core/model/CDebugTarget.java | 24 ++++ .../debug/internal/core/model/CSignal.java | 2 +- .../internal/core/model/CStackFrame.java | 24 +++- .../debug/internal/core/model/CThread.java | 22 ++++ debug/org.eclipse.cdt.debug.ui/ChangeLog | 9 ++ .../icons/full/clcl16/signal0_co.gif | Bin 0 -> 139 bytes .../icons/full/dlcl16/signal0_co.gif | Bin 0 -> 139 bytes .../icons/full/elcl16/signal0_co.gif | Bin 0 -> 139 bytes .../plugin.properties | 1 + debug/org.eclipse.cdt.debug.ui/plugin.xml | 19 +++ .../ui/actions/SignalActionDelegate.java | 1 - .../ui/actions/SignalZeroActionDelegate.java | 123 ++++++++++++++++++ 15 files changed, 265 insertions(+), 3 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IResumeWithoutSignal.java create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/signal0_co.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/signal0_co.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/signal0_co.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalZeroActionDelegate.java diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 37774cf0c56..19af93a9b1d 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,12 @@ +2003-02-04 Mikhail Khodjaiants + Support of the 'Resume Without Signal' action. + * IResumeWithoutSignal.java: new + * ICDebugTarget.java + * CDebugTarget.java + * CThread.java + * CStackFrame.java + * CSignal.java + 2003-02-03 Alain Magloire * src/org/eclipse/cdt/debug/core/cdi/model/ICDITarget.java: diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java index 114cf40b0fb..e94a9c35c00 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICDebugTarget.java @@ -21,6 +21,7 @@ public interface ICDebugTarget extends IDebugTarget, IRestart, IRunToLine, IRunToAddress, + IResumeWithoutSignal, IState, ISwitchToThread, ICBreakpointManager diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IResumeWithoutSignal.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IResumeWithoutSignal.java new file mode 100644 index 00000000000..26699a8d24c --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IResumeWithoutSignal.java @@ -0,0 +1,33 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core.model; + +import org.eclipse.debug.core.DebugException; + +/** + * Provides the ability to resume execution without giving a signal. + * This is useful when the program stopped on account of a signal and would + * ordinary see the signal when resumed. + * + * @since: Feb 4, 2003 + */ +public interface IResumeWithoutSignal +{ + /** + * Causes this element to resume its execution ignoring a signal. + * Has no effect on an element that is not suspended because of a signal. + * + * @exception DebugException on failure. Reasons include: + */ + public void resumeWithoutSignal() throws DebugException; + + /** + * Returns whether this element can currently be resumed without signal. + * + * @return whether this element can currently be resumed without signal + */ + boolean canResumeWithoutSignal(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index e8165f557b5..51d8e60acf8 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -2443,4 +2443,28 @@ public class CDebugTarget extends CDebugElement { fSetBreakpoints = retry; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IResumeWithoutSignal#canResumeWithoutSignal() + */ + public boolean canResumeWithoutSignal() + { + // Check if the configuration supports this!!! + return ( isSuspended() && getCurrentStateInfo() instanceof ICDISignalReceived ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IResumeWithoutSignal#resumeWithoutSignal() + */ + public void resumeWithoutSignal() throws DebugException + { + try + { + getCDITarget().signal(); + } + catch( CDIException e ) + { + targetRequestFailed( e.toString(), e ); + } + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java index 145b7bfcc56..539946fd19d 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java @@ -102,7 +102,7 @@ public class CSignal extends CDebugElement implements ICSignal, ICDIEventListene { try { - getCDISignal().signal(); + getCDITarget().signal( getCDISignal() ); } catch( CDIException e ) { diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java index aa11151a545..96688667748 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CStackFrame.java @@ -20,6 +20,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument; import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.cdt.debug.core.model.IRestart; +import org.eclipse.cdt.debug.core.model.IResumeWithoutSignal; import org.eclipse.cdt.debug.core.model.IStackFrameInfo; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.core.runtime.IAdaptable; @@ -39,7 +40,8 @@ import org.eclipse.debug.core.model.IVariable; public class CStackFrame extends CDebugElement implements IStackFrame, IStackFrameInfo, - IRestart, + IRestart, + IResumeWithoutSignal, ICDIEventListener { /** @@ -752,4 +754,24 @@ public class CStackFrame extends CDebugElement { return fRefreshVariables; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IResumeWithoutSignal#canResumeWithoutSignal() + */ + public boolean canResumeWithoutSignal() + { + return ( getDebugTarget() instanceof IResumeWithoutSignal && + ((IResumeWithoutSignal)getDebugTarget()).canResumeWithoutSignal() ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IResumeWithoutSignal#resumeWithoutSignal() + */ + public void resumeWithoutSignal() throws DebugException + { + if ( canResumeWithoutSignal() ) + { + ((IResumeWithoutSignal)getDebugTarget()).resumeWithoutSignal(); + } + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java index 6f288b8ac36..3e03bc9ba22 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java @@ -32,6 +32,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; import org.eclipse.cdt.debug.core.model.IDummyStackFrame; import org.eclipse.cdt.debug.core.model.IInstructionStep; import org.eclipse.cdt.debug.core.model.IRestart; +import org.eclipse.cdt.debug.core.model.IResumeWithoutSignal; import org.eclipse.cdt.debug.core.model.IRunToLine; import org.eclipse.cdt.debug.core.model.IState; import org.eclipse.cdt.debug.core.model.ISwitchToFrame; @@ -61,6 +62,7 @@ public class CThread extends CDebugElement IRestart, IRunToLine, IInstructionStep, + IResumeWithoutSignal, ISwitchToFrame, ICDIEventListener { @@ -1158,4 +1160,24 @@ public class CThread extends CDebugElement { return fDisposed; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IResumeWithoutSignal#canResumeWithoutSignal() + */ + public boolean canResumeWithoutSignal() + { + return ( getDebugTarget() instanceof IResumeWithoutSignal && + ((IResumeWithoutSignal)getDebugTarget()).canResumeWithoutSignal() ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.IResumeWithoutSignal#resumeWithoutSignal() + */ + public void resumeWithoutSignal() throws DebugException + { + if ( canResumeWithoutSignal() ) + { + ((IResumeWithoutSignal)getDebugTarget()).resumeWithoutSignal(); + } + } } diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index bf4323c8dcd..217c1805014 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,12 @@ +2003-02-04 Mikhail Khodjaiants + Implementation of the 'Resume Without Signal' action. + * SignalZeroActionDelegate.java + * plugin.properties + * plugin.xml + icons/full/clcl16/signal0_co.gif + icons/full/dlcl16/signal0_co.gif + icons/full/elcl16/signal0_co.gif + 2003-02-04 Mikhail Khodjaiants 'DebugException' handling in the 'Signals' view. * SignalsView.java diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/signal0_co.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/signal0_co.gif new file mode 100644 index 0000000000000000000000000000000000000000..d8ce27f44879fdd3953f385f5294776613f39faa GIT binary patch literal 139 zcmZ?wbhEHb6krfw_{_lY|NsAM*RB=17|g6H@wL(Yb3o$HlljhyQVII1fA4pnIdf)S zrSI-p84L^z6EdBFq~cE&Mj*wY10q0XII~y?obX&7yHX)L(uwPWM>1>CiYGq4o`!CY o8=fp}&0P0hcyo(txPIXQR&8d-G*_V@G4s2Rws3z~C&*w80BHj=FaQ7m literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/signal0_co.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/signal0_co.gif new file mode 100644 index 0000000000000000000000000000000000000000..bbea1d3334cdcb2addcd8d5bcfb58510c47d963b GIT binary patch literal 139 zcmZ?wbhEHb6krfw_{_lY|NsAM*RB;77S5bG)7RJc&!0ce&dv!534j0oJ#*&Fym|9> z@7~S8z%XIL1Rx0nia%KxL9`Bt0GZ*;Vj*zCb9LwnnQU<@&I2CFtVJuX`1pA0x;k!n mva~gG-TTXnT2#aN6A!RzGdrfa3I&On&waFo`@=dx25SIOyEPa9 literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/signal0_co.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/signal0_co.gif new file mode 100644 index 0000000000000000000000000000000000000000..d8ce27f44879fdd3953f385f5294776613f39faa GIT binary patch literal 139 zcmZ?wbhEHb6krfw_{_lY|NsAM*RB=17|g6H@wL(Yb3o$HlljhyQVII1fA4pnIdf)S zrSI-p84L^z6EdBFq~cE&Mj*wY10q0XII~y?obX&7yHX)L(uwPWM>1>CiYGq4o`!CY o8=fp}&0P0hcyo(txPIXQR&8d-G*_V@G4s2Rws3z~C&*w80BHj=FaQ7m literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index d5237f621d9..5d49b9ccab5 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -56,4 +56,5 @@ DisassemblyEditor.name=Disassembly Editor LoadSymbolsAction.label=Load Symbols SignalAction.label=Deliver Signal +SignalZeroAction.label=Resume Without Signal diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 2d444b706e6..7547fa2d1b8 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -698,6 +698,25 @@ + + + + + + + + diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java index 222129897d3..5ba153f7590 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java @@ -81,7 +81,6 @@ public class SignalActionDelegate implements IObjectActionDelegate CDebugUIPlugin.log( ms ); } } - } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalZeroActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalZeroActionDelegate.java new file mode 100644 index 00000000000..999e73f048f --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalZeroActionDelegate.java @@ -0,0 +1,123 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.cdt.debug.core.model.IResumeWithoutSignal; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.debug.core.DebugException; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; + +/** + * Enter type comment. + * + * @since: Feb 4, 2003 + */ +public class SignalZeroActionDelegate implements IObjectActionDelegate +{ + private IResumeWithoutSignal fTarget = null; + + /** + * Constructor for SignalZeroActionDelegate. + */ + public SignalZeroActionDelegate() + { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) + */ + public void setActivePart( IAction action, IWorkbenchPart targetPart ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#run(IAction) + */ + public void run( IAction action ) + { + if ( getTarget() != null ) + { + final MultiStatus ms = new MultiStatus( CDebugUIPlugin.getUniqueIdentifier(), + DebugException.REQUEST_FAILED, + "Unable to resume ignoring signal.", + null ); + BusyIndicator.showWhile( Display.getCurrent(), + new Runnable() + { + public void run() + { + try + { + doAction( getTarget() ); + } + catch( DebugException e ) + { + ms.merge( e.getStatus() ); + } + } + } ); + if ( !ms.isOK() ) + { + IWorkbenchWindow window = CDebugUIPlugin.getActiveWorkbenchWindow(); + if ( window != null ) + { + CDebugUIPlugin.errorDialog( "Operation failed.", ms ); + } + else + { + CDebugUIPlugin.log( ms ); + } + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection) + */ + public void selectionChanged( IAction action, ISelection selection ) + { + if ( selection instanceof IStructuredSelection ) + { + Object element = ((IStructuredSelection)selection).getFirstElement(); + if ( element instanceof IResumeWithoutSignal ) + { + boolean enabled = ((IResumeWithoutSignal)element).canResumeWithoutSignal(); + action.setEnabled( enabled ); + if ( enabled ) + { + setTarget( (IResumeWithoutSignal)element ); + return; + } + } + } + action.setEnabled( false ); + setTarget( null ); + } + + protected void doAction( IResumeWithoutSignal target ) throws DebugException + { + target.resumeWithoutSignal(); + } + + protected IResumeWithoutSignal getTarget() + { + return fTarget; + } + + protected void setTarget( IResumeWithoutSignal target ) + { + fTarget = target; + } +}