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:
parent
c893038fcc
commit
f274c35232
9 changed files with 149 additions and 8 deletions
|
@ -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.SuspendedEvent;
|
||||
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.MIBreakpointCreatedEvent;
|
||||
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.MIInferiorExitEvent;
|
||||
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.MIRegisterCreatedEvent;
|
||||
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.MIThreadCreatedEvent;
|
||||
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.MIVarCreatedEvent;
|
||||
|
||||
/**
|
||||
*/
|
||||
|
@ -138,6 +143,14 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
|
|||
} 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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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.MIFormat;
|
||||
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.MIDataReadMemory;
|
||||
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.MIMemoryCreatedEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
|
||||
|
||||
/**
|
||||
|
@ -76,7 +78,7 @@ public class MemoryManager extends SessionObject implements ICDIMemoryManager {
|
|||
/**
|
||||
* @return the registers MemoryBlock.
|
||||
*/
|
||||
MemoryBlock[] listMemoryBlocks() {
|
||||
public MemoryBlock[] listMemoryBlocks() {
|
||||
return (MemoryBlock[])blockList.toArray(new MemoryBlock[0]);
|
||||
}
|
||||
|
||||
|
@ -150,6 +152,8 @@ public class MemoryManager extends SessionObject implements ICDIMemoryManager {
|
|||
MIDataReadMemoryInfo info = createMIDataReadMemoryInfo(address, length);
|
||||
ICDIMemoryBlock block = new MemoryBlock(getCSession().getCTarget(), address, info);
|
||||
blockList.add(block);
|
||||
MISession mi = getCSession().getMISession();
|
||||
mi.fireEvent(new MIMemoryCreatedEvent(block.getStartAddress(), block.getLength()));
|
||||
return block;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.event.MIEvent;
|
||||
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.MIDataListRegisterNamesInfo;
|
||||
|
||||
|
@ -64,7 +65,7 @@ public class RegisterManager extends SessionObject {
|
|||
public Register getRegister(int regno) throws CDIException {
|
||||
Register[] regs = getRegisters();
|
||||
for (int i = 0; i < regs.length; i++) {
|
||||
if (regs[i].getId() == regno) {
|
||||
if (regs[i].getID() == regno) {
|
||||
return regs[i];
|
||||
}
|
||||
}
|
||||
|
@ -86,6 +87,8 @@ public class RegisterManager extends SessionObject {
|
|||
if (reg == null) {
|
||||
reg = new Register(getCSession().getCTarget(), regObject);
|
||||
regList.add(reg);
|
||||
MISession mi = getCSession().getMISession();
|
||||
mi.fireEvent(new MIRegisterCreatedEvent(reg.getName(), reg.getID()));
|
||||
}
|
||||
return reg;
|
||||
}
|
||||
|
|
|
@ -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.event.MIEvent;
|
||||
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.MIVarChange;
|
||||
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);
|
||||
element.variable = var;
|
||||
addElement(element);
|
||||
// Fire an created Event.
|
||||
MISession mi = getCSession().getMISession();
|
||||
mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
|
||||
}
|
||||
return var;
|
||||
}
|
||||
|
@ -277,6 +281,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
|
|||
Variable var = new Variable(stack, name, miVar);
|
||||
element.variable = var;
|
||||
addElement(element);
|
||||
// Fire an created Event.
|
||||
MISession mi = getCSession().getMISession();
|
||||
mi.fireEvent(new MIVarCreatedEvent(miVar.getVarName()));
|
||||
return var;
|
||||
}
|
||||
|
||||
|
@ -289,6 +296,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
|
|||
carg = new Argument(stack, name,element.miVar);
|
||||
element.variable = carg;
|
||||
addElement(element);
|
||||
// Fire an created Event.
|
||||
MISession mi = getCSession().getMISession();
|
||||
mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
|
||||
}
|
||||
return carg;
|
||||
}
|
||||
|
@ -302,6 +312,9 @@ public class VariableManager extends SessionObject implements ICDIExpressionMana
|
|||
cexp = new Expression(stack, name, element.miVar);
|
||||
element.variable = cexp;
|
||||
addElement(element);
|
||||
// Fire an created Event.
|
||||
MISession mi = getCSession().getMISession();
|
||||
mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
|
||||
}
|
||||
return cexp;
|
||||
}
|
||||
|
|
|
@ -4,13 +4,25 @@
|
|||
*/
|
||||
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.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.ICDIThread;
|
||||
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.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.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.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) {
|
||||
session = s;
|
||||
source = src;
|
||||
|
|
|
@ -10,7 +10,7 @@ import java.util.List;
|
|||
import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
|
||||
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.MemoryBlock;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
|
||||
|
||||
/**
|
||||
|
|
|
@ -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.MIThreadSelect;
|
||||
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.output.MIDataEvaluateExpressionInfo;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIInfo;
|
||||
|
@ -144,12 +145,38 @@ public class CTarget implements ICDITarget {
|
|||
|
||||
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.
|
||||
if (oldThreads != null && oldThreads.length > 0) {
|
||||
List dList = new ArrayList(oldThreads.length);
|
||||
for (int i = 0; i < oldThreads.length; i++) {
|
||||
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()) {
|
||||
found = true;
|
||||
break;
|
||||
|
@ -235,6 +262,20 @@ public class CTarget implements ICDITarget {
|
|||
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()
|
||||
*/
|
||||
|
|
|
@ -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.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.MIFormat;
|
||||
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.model.CTarget;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
|
||||
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.MIDataWriteMemory;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
|
|
@ -82,7 +82,7 @@ public class Register extends CObject implements ICDIRegister, ICDIValue {
|
|||
/**
|
||||
* return the MI regno.
|
||||
*/
|
||||
public int getId() {
|
||||
public int getID() {
|
||||
return regObject.getId();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue