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:
parent
fd4b56fff1
commit
40b891daa9
1 changed files with 66 additions and 40 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue