1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Deal with the new created events.

This commit is contained in:
Alain Magloire 2003-01-09 19:13:11 +00:00
parent c893038fcc
commit f274c35232
9 changed files with 149 additions and 8 deletions

View file

@ -24,6 +24,7 @@ import org.eclipse.cdt.debug.mi.core.cdi.event.MemoryChangedEvent;
import org.eclipse.cdt.debug.mi.core.cdi.event.ResumedEvent; import org.eclipse.cdt.debug.mi.core.cdi.event.ResumedEvent;
import org.eclipse.cdt.debug.mi.core.cdi.event.SuspendedEvent; import org.eclipse.cdt.debug.mi.core.cdi.event.SuspendedEvent;
import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget; import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent; import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent; import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent;
@ -35,11 +36,15 @@ import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent; import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
import org.eclipse.cdt.debug.mi.core.event.MIStoppedEvent; import org.eclipse.cdt.debug.mi.core.event.MIStoppedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
/** /**
*/ */
@ -138,6 +143,14 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
} catch (CDIException e) { } catch (CDIException e) {
} }
} }
} else if (miEvent instanceof MIVarCreatedEvent) {
cdiList.add(new CreatedEvent(session, (MIVarCreatedEvent)miEvent));
} else if (miEvent instanceof MIRegisterCreatedEvent) {
cdiList.add(new CreatedEvent(session, (MIRegisterCreatedEvent)miEvent));
} else if (miEvent instanceof MIThreadCreatedEvent) {
cdiList.add(new CreatedEvent(session, (MIThreadCreatedEvent)miEvent));
} else if (miEvent instanceof MIMemoryCreatedEvent) {
cdiList.add(new CreatedEvent(session, (MIMemoryCreatedEvent)miEvent));
} }
} }

View file

@ -14,10 +14,12 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MIFormat; import org.eclipse.cdt.debug.mi.core.MIFormat;
import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory; import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataReadMemory; import org.eclipse.cdt.debug.mi.core.command.MIDataReadMemory;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo; import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
/** /**
@ -76,7 +78,7 @@ public class MemoryManager extends SessionObject implements ICDIMemoryManager {
/** /**
* @return the registers MemoryBlock. * @return the registers MemoryBlock.
*/ */
MemoryBlock[] listMemoryBlocks() { public MemoryBlock[] listMemoryBlocks() {
return (MemoryBlock[])blockList.toArray(new MemoryBlock[0]); return (MemoryBlock[])blockList.toArray(new MemoryBlock[0]);
} }
@ -150,6 +152,8 @@ public class MemoryManager extends SessionObject implements ICDIMemoryManager {
MIDataReadMemoryInfo info = createMIDataReadMemoryInfo(address, length); MIDataReadMemoryInfo info = createMIDataReadMemoryInfo(address, length);
ICDIMemoryBlock block = new MemoryBlock(getCSession().getCTarget(), address, info); ICDIMemoryBlock block = new MemoryBlock(getCSession().getCTarget(), address, info);
blockList.add(block); blockList.add(block);
MISession mi = getCSession().getMISession();
mi.fireEvent(new MIMemoryCreatedEvent(block.getStartAddress(), block.getLength()));
return block; return block;
} }

View file

@ -18,6 +18,7 @@ import org.eclipse.cdt.debug.mi.core.command.MIDataListChangedRegisters;
import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames; import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo; import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo;
import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo; import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo;
@ -64,7 +65,7 @@ public class RegisterManager extends SessionObject {
public Register getRegister(int regno) throws CDIException { public Register getRegister(int regno) throws CDIException {
Register[] regs = getRegisters(); Register[] regs = getRegisters();
for (int i = 0; i < regs.length; i++) { for (int i = 0; i < regs.length; i++) {
if (regs[i].getId() == regno) { if (regs[i].getID() == regno) {
return regs[i]; return regs[i];
} }
} }
@ -86,6 +87,8 @@ public class RegisterManager extends SessionObject {
if (reg == null) { if (reg == null) {
reg = new Register(getCSession().getCTarget(), regObject); reg = new Register(getCSession().getCTarget(), regObject);
regList.add(reg); regList.add(reg);
MISession mi = getCSession().getMISession();
mi.fireEvent(new MIRegisterCreatedEvent(reg.getName(), reg.getID()));
} }
return reg; return reg;
} }

View file

@ -27,6 +27,7 @@ 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.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
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;
import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo; import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo;
@ -264,6 +265,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
var = new Variable(stack, name, element.miVar); var = new Variable(stack, name, element.miVar);
element.variable = var; element.variable = var;
addElement(element); addElement(element);
// Fire an created Event.
MISession mi = getCSession().getMISession();
mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
} }
return var; return var;
} }
@ -277,6 +281,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
Variable var = new Variable(stack, name, miVar); Variable var = new Variable(stack, name, miVar);
element.variable = var; element.variable = var;
addElement(element); addElement(element);
// Fire an created Event.
MISession mi = getCSession().getMISession();
mi.fireEvent(new MIVarCreatedEvent(miVar.getVarName()));
return var; return var;
} }
@ -289,6 +296,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
carg = new Argument(stack, name,element.miVar); carg = new Argument(stack, name,element.miVar);
element.variable = carg; element.variable = carg;
addElement(element); addElement(element);
// Fire an created Event.
MISession mi = getCSession().getMISession();
mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
} }
return carg; return carg;
} }
@ -302,6 +312,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
cexp = new Expression(stack, name, element.miVar); cexp = new Expression(stack, name, element.miVar);
element.variable = cexp; element.variable = cexp;
addElement(element); addElement(element);
// Fire an created Event.
MISession mi = getCSession().getMISession();
mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
} }
return cexp; return cexp;
} }

View file

@ -4,13 +4,25 @@
*/ */
package org.eclipse.cdt.debug.mi.core.cdi.event; package org.eclipse.cdt.debug.mi.core.cdi.event;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager; import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
import org.eclipse.cdt.debug.mi.core.cdi.CSession; import org.eclipse.cdt.debug.mi.core.cdi.CSession;
import org.eclipse.cdt.debug.mi.core.cdi.MemoryManager;
import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
import org.eclipse.cdt.debug.mi.core.cdi.model.CObject; import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
import org.eclipse.cdt.debug.mi.core.cdi.model.Register;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent; import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
/** /**
*/ */
@ -31,6 +43,61 @@ public class CreatedEvent implements ICDICreatedEvent {
} }
} }
public CreatedEvent(CSession s, MIVarCreatedEvent var) {
session = s;
VariableManager mgr = session.getVariableManager();
String varName = var.getVarName();
VariableManager.Element element = mgr.getElement(varName);
if (element != null && element.variable != null) {
source = element.variable;
} else {
source = new CObject(session.getCTarget());
}
}
public CreatedEvent(CSession s, MIRegisterCreatedEvent var) {
session = s;
RegisterManager mgr = session.getRegisterManager();
int regno = var.getNumber();
Register reg = null;
try {
reg = mgr.getRegister(regno);
} catch (CDIException e) {
}
if (reg != null) {
source = reg;
} else {
source = new CObject(session.getCTarget());
}
}
public CreatedEvent(CSession s, MIThreadCreatedEvent ethread) {
session = s;
CTarget target = (CTarget)session.getCurrentTarget();
ICDIThread thread = target.getThread(ethread.getId());
if (thread != null) {
source = thread;
} else {
source = new CObject(session.getCTarget());
}
}
public CreatedEvent(CSession s, MIMemoryCreatedEvent mblock) {
session = s;
MemoryManager mgr = (MemoryManager)session.getMemoryManager();
ICDIMemoryBlock[] blocks = mgr.listMemoryBlocks();
for (int i = 0; i < blocks.length; i++) {
if (blocks[i].getStartAddress() == mblock.getAddress() &&
blocks[i].getLength() == mblock.getLength()) {
source = blocks[i];
break;
}
}
if (source == null) {
source = new CObject(session.getCTarget());
}
}
public CreatedEvent(CSession s, ICDIObject src) { public CreatedEvent(CSession s, ICDIObject src) {
session = s; session = s;
source = src; source = src;

View file

@ -10,7 +10,7 @@ import java.util.List;
import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent; import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.cdi.CSession; import org.eclipse.cdt.debug.mi.core.cdi.CSession;
import org.eclipse.cdt.debug.mi.core.cdi.MemoryBlock; import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
/** /**

View file

@ -36,6 +36,7 @@ import org.eclipse.cdt.debug.mi.core.command.MIInfoThreads;
import org.eclipse.cdt.debug.mi.core.command.MITargetDetach; import org.eclipse.cdt.debug.mi.core.command.MITargetDetach;
import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect; import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect;
import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent; import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo; import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo;
import org.eclipse.cdt.debug.mi.core.output.MIInfo; import org.eclipse.cdt.debug.mi.core.output.MIInfo;
@ -144,12 +145,38 @@ public class CTarget implements ICDITarget {
currentThreads = newThreads; currentThreads = newThreads;
// Fire CreatedEvent for new threads.
if (newThreads != null && newThreads.length > 0) {
List cList = new ArrayList(newThreads.length);
for (int i = 0; i < newThreads.length; i++) {
boolean found = false;
for (int j = 0; oldThreads != null && j < oldThreads.length; j++) {
if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
found = true;
break;
}
}
if (!found) {
cList.add(new Integer(newThreads[i].getId()));
}
}
if (!cList.isEmpty()) {
MIThreadCreatedEvent[] events = new MIThreadCreatedEvent[cList.size()];
for (int j = 0; j < events.length; j++) {
int id = ((Integer)cList.get(j)).intValue();
events[j] = new MIThreadCreatedEvent(id);
}
MISession miSession = session.getMISession();
miSession.fireEvents(events);
}
}
// Fire destroyedEvent for old threads. // Fire destroyedEvent for old threads.
if (oldThreads != null && oldThreads.length > 0) { if (oldThreads != null && oldThreads.length > 0) {
List dList = new ArrayList(oldThreads.length); List dList = new ArrayList(oldThreads.length);
for (int i = 0; i < oldThreads.length; i++) { for (int i = 0; i < oldThreads.length; i++) {
boolean found = false; boolean found = false;
for (int j = 0; j < newThreads.length; j++) { for (int j = 0; newThreads != null && j < newThreads.length; j++) {
if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) { if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
found = true; found = true;
break; break;
@ -235,6 +262,20 @@ public class CTarget implements ICDITarget {
return currentThreads; return currentThreads;
} }
public ICDIThread getThread(int tid) {
CThread th = null;
if (currentThreads != null) {
for (int i = 0; i < currentThreads.length; i++) {
CThread cthread = (CThread)currentThreads[i];
if (cthread.getId() == tid) {
th = cthread;
break;
}
}
}
return th;
}
/** /**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#restart() * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#restart()
*/ */

View file

@ -1,4 +1,4 @@
package org.eclipse.cdt.debug.mi.core.cdi; package org.eclipse.cdt.debug.mi.core.cdi.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -8,8 +8,8 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MIFormat; import org.eclipse.cdt.debug.mi.core.MIFormat;
import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.cdi.model.CObject; import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget; import org.eclipse.cdt.debug.mi.core.cdi.MemoryManager;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory; import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory; import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory;
import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo; import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;

View file

@ -82,7 +82,7 @@ public class Register extends CObject implements ICDIRegister, ICDIValue {
/** /**
* return the MI regno. * return the MI regno.
*/ */
public int getId() { public int getID() {
return regObject.getId(); return regObject.getId();
} }