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:
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 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue