From 5bf0f9e81e901ff8d20400f26735b8ac946214fd Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Mon, 27 Jan 2003 04:49:47 +0000 Subject: [PATCH] VariableObjec takes the target as constructor argument --- .../cdt/debug/mi/core/cdi/ArgumentObject.java | 5 +- .../debug/mi/core/cdi/ExpressionManager.java | 9 ++-- .../debug/mi/core/cdi/RegisterManager.java | 2 +- .../cdt/debug/mi/core/cdi/RegisterObject.java | 5 +- .../debug/mi/core/cdi/VariableManager.java | 49 +++++++++++++------ .../cdt/debug/mi/core/cdi/VariableObject.java | 8 ++- .../cdt/debug/mi/core/cdi/model/Value.java | 5 +- .../cdt/debug/mi/core/cdi/model/Variable.java | 2 +- 8 files changed, 56 insertions(+), 29 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ArgumentObject.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ArgumentObject.java index 3e83d40860b..0fe3d53e68c 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ArgumentObject.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ArgumentObject.java @@ -7,14 +7,15 @@ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.ICDIArgumentObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.mi.core.cdi.model.StackFrame; /** */ public class ArgumentObject extends VariableObject implements ICDIArgumentObject { - public ArgumentObject(String name, StackFrame frame, int pos, int depth) { - super(name, frame, pos, depth); + public ArgumentObject(ICDITarget target, String name, StackFrame frame, int pos, int depth) { + super(target, name, frame, pos, depth); } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java index 67a00088fc4..730b10cbdfd 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ExpressionManager.java @@ -51,8 +51,8 @@ public class ExpressionManager extends SessionObject implements ICDIExpressionMa try { Session session = (Session)getSession(); ICDITarget currentTarget = session.getCurrentTarget(); - ICDIThread currentThread = currentTarget.getCurrentThread(); - StackFrame currentFrame = (StackFrame)currentThread.getCurrentStackFrame(); + //ICDIThread currentThread = currentTarget.getCurrentThread(); + //StackFrame currentFrame = (StackFrame)currentThread.getCurrentStackFrame(); MISession mi = session.getMISession(); CommandFactory factory = mi.getCommandFactory(); MIVarCreate var = factory.createMIVarCreate(name); @@ -61,7 +61,7 @@ public class ExpressionManager extends SessionObject implements ICDIExpressionMa if (info == null) { throw new CDIException("No answer"); } - VariableObject varObj = new VariableObject(name, currentFrame, 0, 0); + VariableObject varObj = new VariableObject(currentTarget, name, null, 0, 0); expression = new Expression(varObj, info.getMIVar()); addExpression(expression); } catch (MIException e) { @@ -92,7 +92,8 @@ public class ExpressionManager extends SessionObject implements ICDIExpressionMa if (info == null) { throw new CDIException("No answer"); } - VariableObject varObj = new VariableObject(name, (StackFrame)frame, 0, 0); + ICDITarget target = frame.getThread().getTarget(); + VariableObject varObj = new VariableObject(target, name, (StackFrame)frame, 0, 0); expression = new Expression(varObj, info.getMIVar()); addExpression(expression); } catch (MIException e) { diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java index 332bbae8833..08f6af13a82 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java @@ -56,7 +56,7 @@ public class RegisterManager extends SessionObject implements ICDIRegisterManage String[] names = info.getRegisterNames(); RegisterObject[] regs = new RegisterObject[names.length]; for (int i = 0; i < names.length; i++) { - regs[i] = new RegisterObject(names[i], i); + regs[i] = new RegisterObject(session.getCurrentTarget(), names[i], i); } return regs; } catch (MIException e) { diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java index e8d67828763..4d141a6c185 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java @@ -1,13 +1,14 @@ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; /** */ public class RegisterObject extends VariableObject implements ICDIRegisterObject { - public RegisterObject(String name, int i) { - super(name, null, i, 0); + public RegisterObject(ICDITarget target, String name, int i) { + super(target, name, null, i, 0); } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java index 6d32b81fdfa..de237847e67 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java @@ -77,12 +77,14 @@ public class VariableManager extends SessionObject implements ICDIVariableManage Variable[] vars = getVariables(); for (int i = 0; i < vars.length; i++) { if (vars[i].getName().equals(name)) { - if (vars[i].getStackFrame().equals(stack)) { + if (stack != null && vars[i].getStackFrame().equals(stack)) { if (vars[i].getVariableObject().getPosition() == position) { if (vars[i].getVariableObject().getStackDepth() == depth) { return vars[i]; } } + } else { + return vars[i]; } } } @@ -159,13 +161,17 @@ public class VariableManager extends SessionObject implements ICDIVariableManage argument = (Argument)variable; } if (argument == null) { - StackFrame stack = argObj.getStackFrame(); String name = argObj.getName(); + StackFrame stack = argObj.getStackFrame(); Session session = (Session)getSession(); - ICDITarget currentTarget = session.getCurrentTarget(); - Thread currentThread = (Thread)currentTarget.getCurrentThread(); - StackFrame currentFrame = (StackFrame)currentThread.getCurrentStackFrame(); - ((Thread)stack.getThread()).setCurrentStackFrame(stack, false); + Thread currentThread = null; + StackFrame currentFrame = null; + if (stack != null) { + ICDITarget currentTarget = session.getCurrentTarget(); + currentThread = (Thread)currentTarget.getCurrentThread(); + currentFrame = (StackFrame)currentThread.getCurrentStackFrame(); + ((Thread)stack.getThread()).setCurrentStackFrame(stack, false); + } try { MISession mi = session.getMISession(); CommandFactory factory = mi.getCommandFactory(); @@ -180,7 +186,9 @@ public class VariableManager extends SessionObject implements ICDIVariableManage } catch (MIException e) { throw new MI2CDIException(e); } finally { - currentThread.setCurrentStackFrame(currentFrame, false); + if (currentThread != null) { + currentThread.setCurrentStackFrame(currentFrame, false); + } } } return argument; @@ -233,8 +241,9 @@ public class VariableManager extends SessionObject implements ICDIVariableManage args = miFrames[0].getArgs(); } if (args != null) { + ICDITarget target = frame.getThread().getTarget(); for (int i = 0; i < args.length; i++) { - ArgumentObject arg = new ArgumentObject(args[i].getName(), + ArgumentObject arg = new ArgumentObject(target, args[i].getName(), (StackFrame)frame, args.length - i, depth); argObjects.add(arg); } @@ -281,7 +290,8 @@ public class VariableManager extends SessionObject implements ICDIVariableManage buffer.append(function).append("::"); } buffer.append(name); - return new VariableObject(buffer.toString(), null, 0, 0); + ICDITarget target = getSession().getCurrentTarget(); + return new VariableObject(target, buffer.toString(), null, 0, 0); } /** @@ -310,8 +320,9 @@ public class VariableManager extends SessionObject implements ICDIVariableManage } args = info.getLocals(); if (args != null) { + ICDITarget target = frame.getThread().getTarget(); for (int i = 0; i < args.length; i++) { - VariableObject varObj = new VariableObject(args[i].getName(), + VariableObject varObj = new VariableObject(target, args[i].getName(), (StackFrame)frame, args.length - i, depth); varObjects.add(varObj); } @@ -332,13 +343,17 @@ public class VariableManager extends SessionObject implements ICDIVariableManage VariableObject varObj = (VariableObject)v; Variable variable = findVariable(varObj); if (variable == null) { - StackFrame stack = varObj.getStackFrame(); String name = varObj.getName(); Session session = (Session)getSession(); - ICDITarget currentTarget = session.getCurrentTarget(); - Thread currentThread = (Thread)currentTarget.getCurrentThread(); - StackFrame currentFrame = (StackFrame)currentThread.getCurrentStackFrame(); - ((Thread)stack.getThread()).setCurrentStackFrame(stack, false); + StackFrame stack = varObj.getStackFrame(); + Thread currentThread = null; + StackFrame currentFrame = null; + if (stack != null) { + ICDITarget currentTarget = session.getCurrentTarget(); + currentThread = (Thread)currentTarget.getCurrentThread(); + currentFrame = (StackFrame)currentThread.getCurrentStackFrame(); + ((Thread)stack.getThread()).setCurrentStackFrame(stack, false); + } try { MISession mi = session.getMISession(); CommandFactory factory = mi.getCommandFactory(); @@ -353,7 +368,9 @@ public class VariableManager extends SessionObject implements ICDIVariableManage } catch (MIException e) { throw new MI2CDIException(e); } finally { - currentThread.setCurrentStackFrame(currentFrame, false); + if (currentThread != null) { + currentThread.setCurrentStackFrame(currentFrame, false); + } } } return variable; diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableObject.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableObject.java index 1704260c640..599c7e3ff42 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableObject.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableObject.java @@ -6,6 +6,7 @@ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.ICDIVariableObject; +import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.mi.core.cdi.model.StackFrame; /** @@ -16,14 +17,19 @@ public class VariableObject implements ICDIVariableObject { int position; StackFrame frame; int stackdepth; + ICDITarget target; - public VariableObject(String n, StackFrame stack, int pos, int depth) { + public VariableObject(ICDITarget tgt, String n, StackFrame stack, int pos, int depth) { + target = tgt; name = n; frame = stack; position = pos; stackdepth = depth; } + public ICDITarget getTarget() { + return target; + } public StackFrame getStackFrame() { return frame; diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java index d3670890e0e..7c459a98e5b 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java @@ -112,8 +112,9 @@ public class Value extends CObject implements ICDIValue { MIVar[] vars = info.getMIVars(); variables = new Variable[vars.length]; for (int i = 0; i < vars.length; i++) { - VariableObject varObj = new VariableObject(vars[i].getExp(), - (StackFrame)variable.getStackFrame(), variable.getVariableObject().getPosition(), + VariableObject varObj = new VariableObject(getTarget(), + vars[i].getExp(), (StackFrame)variable.getStackFrame(), + variable.getVariableObject().getPosition(), variable.getVariableObject().getStackDepth()); variables[i] = mgr.createVariable(varObj, vars[i]); diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java index 3db15df3716..2b1cf73c30e 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java @@ -33,7 +33,7 @@ public class Variable extends CObject implements ICDIVariable { VariableObject varObj; public Variable(VariableObject obj, MIVar v) { - super(obj.getStackFrame().getTarget()); + super(obj.getTarget()); miVar = v; varObj = obj; }