1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-08 00:35:49 +02:00

Was creating unecessary objects.

This commit is contained in:
Alain Magloire 2002-08-26 05:23:14 +00:00
parent fd4b56fff1
commit 40b891daa9

View file

@ -9,15 +9,9 @@ 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.event.ICDIEvent;
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;
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
@ -25,6 +19,8 @@ import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIVarCreate;
import org.eclipse.cdt.debug.mi.core.command.MIVarDelete;
import org.eclipse.cdt.debug.mi.core.command.MIVarUpdate;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIInfo;
import org.eclipse.cdt.debug.mi.core.output.MIVar;
import org.eclipse.cdt.debug.mi.core.output.MIVarChange;
@ -36,6 +32,7 @@ import org.eclipse.cdt.debug.mi.core.output.MIVarUpdateInfo;
public class VariableManager extends SessionObject {
List elementList;
List oosList; // Out of Scope variable lists;
/**
* Class container to regroup all info concerning a variable.
@ -50,6 +47,7 @@ public class VariableManager extends SessionObject {
public VariableManager(CSession session) {
super(session);
elementList = new ArrayList();
oosList = new ArrayList();
}
Element getElement(String varName) {
@ -99,23 +97,20 @@ public class VariableManager extends SessionObject {
if (info == null) {
throw new CDIException("No answer");
}
MIVarChange[]changes = info.getMIVarChanges();
MIVarChange[] changes = info.getMIVarChanges();
List eventList = new ArrayList(changes.length);
for (int i = 0 ; i < changes.length; i++) {
ICDIEvent cdiEvent = null;
Element element = getElement(changes[i].getVarName());
if (!changes[i].isInScope()) {
if (element != null) {
cdiEvent = new DestroyedEvent(getCSession(), element.variable);
}
removeVariable(changes[i]);
} else {
if (element != null) {
cdiEvent = new ChangedEvent(getCSession(), element.variable);
}
String varName = changes[i].getVarName();
Element element = getElement(varName);
if (element != null) {
eventList.add( new MIVarChangedEvent(varName, changes[i].isInScope()));
}
if (! changes[i].isInScope()) {
removeVariable(changes[i]);
}
EventManager mgr = (EventManager)getCSession().getEventManager();
mgr.fireEvent(cdiEvent);
}
MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
mi.fireEvents(events);
} catch (MIException e) {
throw new CDIException(e.toString());
}
@ -124,7 +119,7 @@ public class VariableManager extends SessionObject {
Element createElement(StackFrame stack, String name) throws CDIException {
Element element = getElement(stack, name);
if (element == null) {
stack.getCThread().setCurrentStackFrame(stack);
//stack.getCThread().setCurrentStackFrame(stack);
MISession mi = getCSession().getMISession();
CommandFactory factory = mi.getCommandFactory();
MIVarCreate var = factory.createMIVarCreate(name);
@ -157,9 +152,14 @@ public class VariableManager extends SessionObject {
}
}
void removeVariable(MIVarChange changed) throws CDIException {
String varName = changed.getVarName();
removeVariable(varName);
Element removeOutOfScope(String varName) {
Element[] oos = (Element[])oosList.toArray(new Element[0]);
for (int i = 0; i < oos.length; i++) {
if (oos[i].miVar.getVarName().equals(varName)) {
return oos[i];
}
}
return null;
}
void removeVariable(String varName) throws CDIException {
@ -167,11 +167,17 @@ public class VariableManager extends SessionObject {
for (int i = 0; i < elements.length; i++) {
if (elements[i].miVar.getVarName().equals(varName)) {
elementList.remove(elements[i]);
oosList.add(elements[i]); // Put on the Out Of Scope list
removeMIVar(elements[i].miVar);
}
}
}
void removeVariable(MIVarChange changed) throws CDIException {
String varName = changed.getVarName();
removeVariable(varName);
}
void removeVariable(Variable variable) throws CDIException {
String varName = ((Variable)variable).getMIVar().getVarName();
removeVariable(varName);
@ -185,35 +191,55 @@ public class VariableManager extends SessionObject {
ICDIVariable createVariable(StackFrame stack, String name) throws CDIException {
Element element = createElement(stack, name);
Variable var = new Variable(stack, name, element.miVar);
element.variable = var;
addElement(element);
return (ICDIVariable)var;
Variable var;
if (element.variable != null) {
var = element.variable;
} else {
var = new Variable(stack, name, element.miVar);
element.variable = var;
addElement(element);
}
return var;
}
ICDIArgument createArgument(StackFrame stack, String name) throws CDIException {
Element element = createElement(stack, name);
Variable carg = new Argument(stack, name,element.miVar);
element.variable = carg;
addElement(element);
return (ICDIArgument)carg;
Argument carg;
if (element.variable != null && element.variable instanceof Argument) {
carg = (Argument)element.variable;
} else {
carg = new Argument(stack, name,element.miVar);
element.variable = carg;
addElement(element);
}
return carg;
}
ICDIExpression createExpression(StackFrame stack, String name) throws CDIException {
Element element = createElement(stack, name);
Variable cexp = new Expression(stack, name, element.miVar);
element.variable = cexp;
addElement(element);
return (ICDIExpression)cexp;
Expression cexp;
if (element.variable != null && element.variable instanceof Expression) {
cexp = (Expression)element.variable;
} else {
cexp = new Expression(stack, name, element.miVar);
element.variable = cexp;
addElement(element);
}
return cexp;
}
ICDIRegister createRegister(StackFrame stack, String name) throws CDIException {
Element element = createElement(stack, "$" + name);
Variable reg = new Register(stack, name, element.miVar);
element.variable = reg;
addElement(element);
return (ICDIRegister)reg;
Register reg;
if (element.variable != null && element.variable instanceof Register) {
reg = (Register)element.variable;
} else {
reg = new Register(stack, name, element.miVar);
element.variable = reg;
addElement(element);
}
return reg;
}
}