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