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.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));
}
}

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.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;
}

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.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;
}

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.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;
}

View file

@ -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;

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.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;
/**

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.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()
*/

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.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;

View file

@ -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();
}