mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
VariableObjec takes the target as constructor argument
This commit is contained in:
parent
a46e76ff43
commit
5bf0f9e81e
8 changed files with 56 additions and 29 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue