1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-30 21:55:31 +02:00

Implements ExpressionManager

This commit is contained in:
Alain Magloire 2002-08-30 04:59:16 +00:00
parent e048dcfe95
commit 488f8d814c

View file

@ -9,6 +9,8 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDICondition;
import org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager;
import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument;
import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister;
@ -29,7 +31,7 @@ import org.eclipse.cdt.debug.mi.core.output.MIVarUpdateInfo;
/**
*/
public class VariableManager extends SessionObject {
public class VariableManager extends SessionObject implements ICDIExpressionManager {
List elementList;
List oosList; // Out of Scope variable lists;
@ -71,12 +73,14 @@ public class VariableManager extends SessionObject {
return null;
}
/**
* Make sure an element is not added twice.
*/
void addElement(Element element) {
Element[] elements = getElements();
for (int i = 0; i < elements.length; i++) {
String name = elements[i].miVar.getVarName();
if (name.equals(element.miVar.getVarName())) {
// Thread.currentThread().dumpStack();
return;
}
}
@ -106,13 +110,17 @@ public class VariableManager extends SessionObject {
eventList.add( new MIVarChangedEvent(varName, changes[i].isInScope()));
}
if (! changes[i].isInScope()) {
removeVariable(changes[i]);
// Only remove ICDIVariables.
if (! (element.variable instanceof Expression ||
element.variable instanceof Register)) {
removeElement(changes[i]);
}
}
}
MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
mi.fireEvents(events);
} catch (MIException e) {
throw new CDIException(e.toString());
throw new CDIException(e.getMessage());
}
}
@ -134,24 +142,12 @@ public class VariableManager extends SessionObject {
element.name = name;
element.stackframe = stack;
} catch (MIException e) {
throw new CDIException(e.toString());
throw new CDIException(e.getMessage());
}
}
return element;
}
void removeMIVar(MIVar miVar) throws CDIException {
MISession mi = getCSession().getMISession();
CommandFactory factory = mi.getCommandFactory();
MIVarDelete var = factory.createMIVarDelete(miVar.getVarName());
try {
mi.postCommand(var);
MIInfo info = var.getMIInfo();
} catch (MIException e) {
throw new CDIException(e.toString());
}
}
Element removeOutOfScope(String varName) {
Element[] oos = (Element[])oosList.toArray(new Element[0]);
for (int i = 0; i < oos.length; i++) {
@ -162,7 +158,19 @@ public class VariableManager extends SessionObject {
return null;
}
void removeVariable(String varName) throws CDIException {
void removeMIVar(MIVar miVar) throws CDIException {
MISession mi = getCSession().getMISession();
CommandFactory factory = mi.getCommandFactory();
MIVarDelete var = factory.createMIVarDelete(miVar.getVarName());
try {
mi.postCommand(var);
MIInfo info = var.getMIInfo();
} catch (MIException e) {
throw new CDIException(e.getMessage());
}
}
void removeElement(String varName) throws CDIException {
Element[] elements = getElements();
for (int i = 0; i < elements.length; i++) {
if (elements[i].miVar.getVarName().equals(varName)) {
@ -173,19 +181,19 @@ public class VariableManager extends SessionObject {
}
}
void removeVariable(MIVarChange changed) throws CDIException {
void removeElement(MIVarChange changed) throws CDIException {
String varName = changed.getVarName();
removeVariable(varName);
removeElement(varName);
}
void removeVariable(Variable variable) throws CDIException {
void removeElement(Variable variable) throws CDIException {
String varName = ((Variable)variable).getMIVar().getVarName();
removeVariable(varName);
removeElement(varName);
}
void removeVariables(Variable[] variables) throws CDIException {
void removeElements(Variable[] variables) throws CDIException {
for (int i = 0; i < variables.length; i++) {
removeVariable(variables[i]);
removeElement(variables[i]);
}
}
@ -242,4 +250,47 @@ public class VariableManager extends SessionObject {
return reg;
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager#createExpression(String)
*/
public ICDIExpression createExpression(String name) throws CDIException {
CTarget target = getCSession().getCTarget();
StackFrame frame = ((CThread)target.getCurrentThread()).getCurrentStackFrame();
return createExpression(frame, name);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager#getExpressions()
*/
public ICDIExpression[] getExpressions() throws CDIException {
Element[] elements = getElements();
List aList = new ArrayList(elements.length);
for (int i = 0; i < elements.length; i++) {
if (elements[i].variable instanceof ICDIExpression) {
aList.add(elements[i].variable);
}
}
return (ICDIExpression[])aList.toArray(new ICDIExpression[0]);
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager#removeExpression(ICDIExpression)
*/
public void removeExpression(ICDIExpression expression)
throws CDIException {
if (expression instanceof Variable) {
removeElement((Variable)expression);
}
}
/**
* @see org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager#removeExpressions(ICDIExpression[])
*/
public void removeExpressions(ICDIExpression[] expressions)
throws CDIException {
for (int i = 0; i < expressions.length; i++) {
removeExpression(expressions[i]);
}
}
}