diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/actions/DsfTerminateCommand.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/actions/DsfTerminateCommand.java index 5f1af3cd6a9..9cf33ac0894 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/actions/DsfTerminateCommand.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/actions/DsfTerminateCommand.java @@ -71,7 +71,7 @@ public class DsfTerminateCommand implements ITerminateHandler { } else { // Check the teriminate. processes.canTerminate( - processes.getThreadForExecutionContext(dmc), + processes.getProcessForDebugContext(dmc), new DataRequestMonitor(fExecutor, null) { @Override public void handleCompleted() { @@ -93,7 +93,7 @@ public class DsfTerminateCommand implements ITerminateHandler { fExecutor.submit(new DsfCommandRunnable(fTracker, request.getElements()[0], request) { @Override public void doExecute() { getProcesses().terminate( - getProcesses().getThreadForExecutionContext(getContext()), new RequestMonitor(fExecutor, null)); + getProcesses().getProcessForDebugContext(getContext()), new RequestMonitor(fExecutor, null)); } }); return false; diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesLayoutNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesLayoutNode.java index 6968cc8d6b6..95f0fe97a9f 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StackFramesLayoutNode.java @@ -19,7 +19,10 @@ import org.eclipse.dd.dsf.datamodel.IDMEvent; import org.eclipse.dd.dsf.debug.service.IRunControl; import org.eclipse.dd.dsf.debug.service.IStack; import org.eclipse.dd.dsf.debug.service.IStepQueueManager; +import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerSuspendedDMEvent; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; +import org.eclipse.dd.dsf.debug.service.IRunControl.IResumedDMEvent; +import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent; import org.eclipse.dd.dsf.debug.service.IRunControl.StateChangeReason; import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext; import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMData; @@ -91,7 +94,8 @@ public class StackFramesLayoutNode extends AbstractDMVMLayoutNode= 1) { fCachedOldFrameVMCs[0] = topFrameVmc; - for (int i = 0; i < fCachedOldFrameVMCs.length; i++) update.setChild(fCachedOldFrameVMCs[i], i); + for (int i = 0; i < fCachedOldFrameVMCs.length; i++) + update.setChild(fCachedOldFrameVMCs[i], i); } else { update.setChild(topFrameVmc, 0); } @@ -209,10 +214,10 @@ public class StackFramesLayoutNode extends AbstractDMVMLayoutNode e) { // This node generates delta if the timers have changed, or if the // label has changed. - if (e instanceof IRunControl.ISuspendedDMEvent) { + if (e instanceof ISuspendedDMEvent) { return IModelDelta.CONTENT | IModelDelta.EXPAND | IModelDelta.SELECT; - } else if (e instanceof IRunControl.IResumedDMEvent) { - if (((IRunControl.IResumedDMEvent)e).getReason() == StateChangeReason.STEP) { + } else if (e instanceof IResumedDMEvent) { + if (((IResumedDMEvent)e).getReason() == StateChangeReason.STEP) { return IModelDelta.STATE; } else { return IModelDelta.CONTENT; @@ -225,10 +230,12 @@ public class StackFramesLayoutNode extends AbstractDMVMLayoutNode e, final VMDelta parent, final int nodeOffset, final RequestMonitor rm) { - if (e instanceof IRunControl.ISuspendedDMEvent) { - buildDeltaForSuspendedEvent((IRunControl.ISuspendedDMEvent)e, parent, nodeOffset, rm); - } else if (e instanceof IRunControl.IResumedDMEvent) { - buildDeltaForResumedEvent((IRunControl.IResumedDMEvent)e, parent, nodeOffset, rm); + if (e instanceof IContainerSuspendedDMEvent) { + buildDeltaForSuspendedEvent((ISuspendedDMEvent)e, ((IContainerSuspendedDMEvent)e).getTriggeringContext(), parent, nodeOffset, rm); + } else if (e instanceof ISuspendedDMEvent) { + buildDeltaForSuspendedEvent((ISuspendedDMEvent)e, ((ISuspendedDMEvent)e).getDMContext(), parent, nodeOffset, rm); + } else if (e instanceof IResumedDMEvent) { + buildDeltaForResumedEvent((IResumedDMEvent)e, parent, nodeOffset, rm); } else if (e instanceof IStepQueueManager.ISteppingTimedOutEvent) { buildDeltaForSteppingTimedOutEvent((IStepQueueManager.ISteppingTimedOutEvent)e, parent, nodeOffset, rm); } else { @@ -237,7 +244,7 @@ public class StackFramesLayoutNode extends AbstractDMVMLayoutNode {} - public interface IProcessDMContext extends IThreadDMContext {} + public interface IProcessDMContext extends IDMContext {} /** - * Interface for thread and process object data. This data provides a link - * to the lower level debugger services, in form of symbol, memory, and - * execution contexts. + * Interface for thread and process object data. */ public interface IThreadDMData extends IDMData { String getName(); String getId(); boolean isDebuggerAttached(); - IDMContext getDebuggingContext(); + IDMContext getDebugContext(); } - + + /** + * Interface for thread and process object data. + */ + public interface IProcessDMData extends IDMData { + String getName(); + String getId(); + boolean isDebuggerAttached(); + IDMContext getDebugContext(); + } + /** * Event indicating that process data has changed. */ - public interface ProcessChangedDMEvent extends IDMEvent {} + public interface IProcessChangedDMEvent extends IDMEvent {} - public IThreadDMContext getThreadForExecutionContext(IExecutionDMContext execCtx); + public interface IProcessStartedEvent extends IDMEvent> { + IProcessDMContext getProcess(); + } + + public interface IProcessExitedEvent extends IDMEvent> { + IProcessDMContext getProcess(); + } + + /** + * Returns a thread for the corresponding context. null if no corresponding + * thread exists. + * @param execCtx + * @return + */ + public IThreadDMContext getThreadForDebugContext(IDMContext execCtx); + + /** + * Returns a process context corresponding to the given context. null if no + * corresponding process exists. + */ + public IProcessDMContext getProcessForDebugContext(IDMContext execCtx); + /** * Retrieves the current list of processes running on target. * @param rm Request completion monitor, to be filled in with array of process contexts. @@ -86,12 +114,13 @@ public interface INativeProcesses extends IDMService { * @param thread Thread or process to terminate. * @param rm Return token. */ - void canTerminate(IThreadDMContext thread, DataRequestMonitor rm); + void canTerminate(IDMContext ctx, DataRequestMonitor rm); /** * Terminates the selected process or thread. * @param thread Thread or process to terminate. * @param rm Request completion monitor, indicates success or failure. */ - void terminate(IThreadDMContext thread, RequestMonitor requestMonitor); + void terminate(IDMContext ctx, RequestMonitor requestMonitor); + } diff --git a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRunControl.java b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRunControl.java index 4d23e119a8c..07b8da2aa52 100644 --- a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRunControl.java +++ b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRunControl.java @@ -39,6 +39,7 @@ public interface IRunControl extends IDMService * for execution cotnexts, which by itself can perform run-control * operations. */ + public interface IContainerDMContext extends IExecutionDMContext {} /** Flag indicating reason context state change. */ @@ -50,16 +51,17 @@ public interface IRunControl extends IDMService public interface ISuspendedDMEvent extends IDMEvent { StateChangeReason getReason(); } + public interface IResumedDMEvent extends IDMEvent { StateChangeReason getReason(); } - public interface IContainerSuspendedDMEvent extends IDMEvent { - StateChangeReason getReason(); + + public interface IContainerSuspendedDMEvent extends ISuspendedDMEvent { + IExecutionDMContext getTriggeringContext(); } - public interface IContainerResumedDMEvent extends IDMEvent { - StateChangeReason getReason(); + + public interface IContainerResumedDMEvent extends IResumedDMEvent { } - /** * Indicates that a new execution context (thread) was started. The DMC * for the event is the container of the new exec context.