From f274c35232ad6087be6e6942f68c819587bcd224 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Thu, 9 Jan 2003 19:13:11 +0000 Subject: [PATCH] Deal with the new created events. --- .../cdt/debug/mi/core/cdi/EventManager.java | 13 ++++ .../cdt/debug/mi/core/cdi/MemoryManager.java | 6 +- .../debug/mi/core/cdi/RegisterManager.java | 5 +- .../debug/mi/core/cdi/VariableManager.java | 13 ++++ .../debug/mi/core/cdi/event/CreatedEvent.java | 67 +++++++++++++++++++ .../mi/core/cdi/event/MemoryChangedEvent.java | 2 +- .../cdt/debug/mi/core/cdi/model/CTarget.java | 43 +++++++++++- .../mi/core/cdi/{ => model}/MemoryBlock.java | 6 +- .../cdt/debug/mi/core/cdi/model/Register.java | 2 +- 9 files changed, 149 insertions(+), 8 deletions(-) rename debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/{ => model}/MemoryBlock.java (96%) diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java index d206624ad67..8b55ef4b76b 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java @@ -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)); } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java index 2ccbc8d95bd..7ad1cc2148e 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java @@ -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; } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java index 7a7c2034569..44241a5ef95 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java @@ -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; } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java index 2676010bccc..83b2a6041cb 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java @@ -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; } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java index efd2eea3a9b..11a07d8aaa8 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java @@ -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; diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java index 682375c6140..368684c18fa 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java @@ -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; /** diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java index dc501e2620e..2f39d5c9261 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java @@ -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() */ diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java similarity index 96% rename from debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java rename to debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java index b9f711c1ef9..256d1c260bd 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java @@ -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; diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java index 46dfd0da912..c98e06de55c 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java @@ -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(); }