From d0e0286a8d674a3b222fbf50fe4ced3f91a2a66e Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Sat, 17 Nov 2007 00:24:49 +0000 Subject: [PATCH] [205142] Refactored use of execution, frame, and expression contexts in the MI implementation. --- .../sourcelookup/MISourceDisplayAdapter.java | 2 +- .../launch/StackFramesLayoutNode.java | 2 +- .../variable/VariableLayoutNode.java | 18 +++++++-------- .../dd/dsf/debug/service/IExpressions.java | 10 ++++---- .../dd/dsf/debug/service/IRunControl.java | 23 +++++++++++++++++-- .../eclipse/dd/dsf/debug/service/IStack.java | 5 ++-- 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/sourcelookup/MISourceDisplayAdapter.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/sourcelookup/MISourceDisplayAdapter.java index 2338223bb17..058126bd9ab 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/sourcelookup/MISourceDisplayAdapter.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/sourcelookup/MISourceDisplayAdapter.java @@ -288,7 +288,7 @@ public class MISourceDisplayAdapter implements ISourceDisplay @Override public void handleOK() { FramePositioningData clientData = new FramePositioningData(); - clientData.fLevel = getData().getLevel(); + clientData.fLevel = frameDmc.getLevel(); // Document line numbers are 0-based. While debugger line numbers are 1-based. clientData.fLine = getData().getLine() - 1; rm.setData(clientData); 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 62bee6a8935..6738a2f4e10 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 @@ -212,7 +212,7 @@ public class StackFramesLayoutNode extends AbstractDMVMLayoutNode { // Add frame number (if total number of frames in known) if (fCachedOldFrameVMCs != null) { - label.append(fCachedOldFrameVMCs.length - dmData.getLevel()); + label.append(fCachedOldFrameVMCs.length - dmContext.getLevel()); } // Add the function name diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableLayoutNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableLayoutNode.java index d696d5233b9..383e3467689 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableLayoutNode.java @@ -13,6 +13,8 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.dd.dsf.concurrent.DataRequestMonitor; import org.eclipse.dd.dsf.concurrent.DsfExecutor; import org.eclipse.dd.dsf.concurrent.MultiRequestMonitor; @@ -439,19 +441,15 @@ public class VariableLayoutNode extends AbstractExpressionLayoutNode implements @Override protected void getElementForExpressionPart(IChildrenUpdate update, String expressionPartText, DataRequestMonitor rm) { - /* - * Create a valid DMC for this entered expression. - */ final IFrameDMContext frameDmc = findDmcInPath(update.getElementPath(), IFrameDMContext.class); final IExpressions expressionService = getServicesTracker().getService(IExpressions.class); - IExpressionDMContext expressionDMC = expressionService.createExpression(frameDmc, expressionPartText); - - /* - * Now create the valid VMC which wrappers it. - */ - IVMContext vmc = createVMContext(expressionDMC); - rm.setData(vmc); + if (frameDmc != null) { + IExpressionDMContext expressionDMC = expressionService.createExpression(frameDmc, expressionPartText); + rm.setData(createVMContext(expressionDMC)); + } else { + rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfService.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$ + } rm.done(); } diff --git a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IExpressions.java b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IExpressions.java index 6c418069124..4158552a8c9 100644 --- a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IExpressions.java +++ b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IExpressions.java @@ -51,7 +51,7 @@ public interface IExpressions extends IFormattedValues { /** * This is the model data interface that corresponds to IExpressionDMContext. */ - interface IExpressionDMData extends IDMData { + public interface IExpressionDMData extends IDMData { // These static fields define the possible return values of method getTypeId(). final static String TYPEID_UNKNOWN = "TYPEID_UNKNOWN"; @@ -128,7 +128,7 @@ public interface IExpressions extends IFormattedValues { * Event indicating that a given expression is changed. If an expression is changed, it's implied that all * the children of that expression are changed too. */ - interface IExpressionChangedDMEvent extends IDMEvent {} + public interface IExpressionChangedDMEvent extends IDMEvent {} /** * Retrieves the expression DM data object for the given expression context(dmc). @@ -154,15 +154,15 @@ public interface IExpressions extends IFormattedValues { /** * Returns the data model context object for the specified expression in the context - * specified by ctx. + * specified by ctx. * * @param ctx: Context in which to evaluate the expression. This context could include the * PC location, stack frame, thread, or just a symbol context. * * @param expression: The expression to evaluate. * - * @return An expression data model context object that must be passed to getModelData() to obtain the - * value of the expression. + * @return An expression data model context object that must be passed to + * getModelData() to obtain the value of the expression. */ IExpressionDMContext createExpression(IDMContext ctx, String expression); 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 28d4dceb0b8..3f5567cd8ae 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 @@ -47,22 +47,41 @@ public interface IRunControl extends IDMService public enum StateChangeReason { UNKNOWN, USER_REQUEST, STEP, BREAKPOINT, EXCEPTION, CONTAINER, WATCHPOINT, SIGNAL, SHAREDLIB, ERROR }; /** - * Events signaling a state changes. + * Indicates that the given thread has suspended. */ public interface ISuspendedDMEvent extends IDMEvent { StateChangeReason getReason(); } + /** + * Indicates that the given thread has resumed. + */ public interface IResumedDMEvent extends IDMEvent { StateChangeReason getReason(); } + /** + * Indicates that the given container has suspended. + */ public interface IContainerSuspendedDMEvent extends ISuspendedDMEvent { - IExecutionDMContext getTriggeringContext(); + /** + * Returns the context which triggered the resume, which could be + * null if not known. + */ + IExecutionDMContext getTriggeringContext(); } + /** + * Indicates that the given container has resumed. + */ public interface IContainerResumedDMEvent extends IResumedDMEvent { + /** + * Returns the context which triggered the resume, which could be + * null if not known. + */ + IExecutionDMContext getTriggeringContext(); } + /** * Indicates that a new execution context (thread) was started. The DMC * for the event is the container of the new exec context. diff --git a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java index 49020ad4c25..f14d6887bac 100644 --- a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java +++ b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java @@ -27,13 +27,14 @@ public interface IStack extends IDMService { * frame data, this context is used by other services that require a stack * frame for evaluation. */ - public interface IFrameDMContext extends IDMContext {} + public interface IFrameDMContext extends IDMContext { + int getLevel(); + } /** * Stack frame information. */ public interface IFrameDMData extends IDMData { - int getLevel(); IAddress getAddress(); String getFile(); String getFunction();