From ed14a106dbd1450598cff0c34c16dffe0b5daa17 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Tue, 27 Aug 2002 23:41:17 +0000 Subject: [PATCH] implement new scheme for BreakpointHit, WatchpointTrigger and WatchpointScope --- .../cdt/debug/mi/core/cdi/Breakpoint.java | 4 +- .../cdt/debug/mi/core/cdi/BreakpointHit.java | 31 ++++++++++++++++ .../debug/mi/core/cdi/BreakpointManager.java | 4 ++ .../cdt/debug/mi/core/cdi/CTarget.java | 14 +++++++ .../cdt/debug/mi/core/cdi/SuspendedEvent.java | 18 +++------ .../debug/mi/core/cdi/WatchpointScope.java | 37 +++++++++++++++++++ .../debug/mi/core/cdi/WatchpointTrigger.java | 34 +++++++++++++++++ 7 files changed, 127 insertions(+), 15 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java create mode 100644 debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java create mode 100644 debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java index 883039e48e9..61448f2412d 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java @@ -12,7 +12,7 @@ import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint; /** */ -public class Breakpoint extends SessionObject implements ICDILocationBreakpoint { +public class Breakpoint extends CObject implements ICDILocationBreakpoint { ICDILocation location; ICDICondition condition; @@ -20,7 +20,7 @@ public class Breakpoint extends SessionObject implements ICDILocationBreakpoint BreakpointManager mgr; public Breakpoint(BreakpointManager m, MIBreakPoint miBreak) { - super(m.getCSession()); + super(m.getCSession().getCTarget()); miBreakPoint = miBreak; mgr = m; } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java new file mode 100644 index 00000000000..0c6f611ff57 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java @@ -0,0 +1,31 @@ +package org.eclipse.cdt.debug.mi.core.cdi; + +import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit; +import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint; +import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent; + +/** + */ +public class BreakpointHit extends SessionObject implements ICDIBreakpointHit { + + MIBreakpointEvent breakEvent; + + public BreakpointHit(CSession session, MIBreakpointEvent e) { + super(session); + breakEvent = e; + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit#getBreakpoint() + */ + public ICDIBreakpoint getBreakpoint() { + int number = breakEvent.getNumber(); + // Ask the breakpointManager for the breakpoint + BreakpointManager mgr = (BreakpointManager)getCSession().getBreakpointManager(); + // We need to return the same object as the breakpoint. + Breakpoint point = mgr.getBreakpoint(number); + // FIXME: if point == null ?? Create a new breakpoint ?? + return point; + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java index 74d6f5da6ea..1fd275c6e8e 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java @@ -63,6 +63,10 @@ public class BreakpointManager extends SessionObject implements ICDIBreakpointMa return null; } + Watchpoint getWatchpoint(int number) { + return (Watchpoint)getBreakpoint(number); + } + Breakpoint[] listBreakpoints() { return (Breakpoint[]) breakList.toArray( new Breakpoint[breakList.size()]); diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java index 03ada7d497c..79b076e7814 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java @@ -170,6 +170,20 @@ public class CTarget implements ICDITarget { return cthreads; } + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getCurrentThread() + */ + public ICDIThread getCurrentThread() throws CDIException { + ICDIThread[] threads = getThreads(); + for (int i = 0; i < threads.length; i++) { + CThread cthread = (CThread)threads[i]; + if (cthread.getId() == currentThreadId) { + return cthread; + } + } + return null; + } + /** * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getThreads() */ diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java index a059388d2f4..3110c8ffbcd 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java @@ -32,22 +32,14 @@ public class SuspendedEvent implements ICDISuspendedEvent { } public ICDISessionObject getReason() { - if (event instanceof MIBreakpointEvent || event instanceof MIWatchpointEvent) { - MIBreakpointEvent breakEvent = (MIBreakpointEvent)event; - int number = breakEvent.getNumber(); - BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager(); - // Ask the breakpointManager for the breakpoint - // We need to return the same object as the reason. - Breakpoint point = mgr.getBreakpoint(number); - if (point != null) { - return point; - } else { - // FIXME: Create a new breakpoint. - } + if (event instanceof MIBreakpointEvent) { + return new BreakpointHit(session, (MIBreakpointEvent)event); + } else if (event instanceof MIWatchpointEvent) { + return new WatchpointTrigger(session, (MIWatchpointEvent)event); } else if (event instanceof MISteppingRangeEvent) { return new EndSteppingRange(session); } else if (event instanceof MISignalEvent) { - return new Signal(session, (MISignalEvent) event); + return new Signal(session, (MISignalEvent)event); } else if (event instanceof MILocationReachedEvent) { return new EndSteppingRange(session); } else if (event instanceof MIFunctionFinishedEvent) { diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java new file mode 100644 index 00000000000..16511252157 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java @@ -0,0 +1,37 @@ +package org.eclipse.cdt.debug.mi.core.cdi; + +import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointScope; +import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint; +import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent; + +/** + * @author alain + * + * To change this generated comment edit the template variable "typecomment": + * Window>Preferences>Java>Templates. + * To enable and disable the creation of type comments go to + * Window>Preferences>Java>Code Generation. + */ +public class WatchpointScope extends SessionObject implements ICDIWatchpointScope { + + MIWatchpointEvent watchEvent; + + public WatchpointScope(CSession session, MIWatchpointEvent e) { + super(session); + watchEvent = e; + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpointScope#getWatchpoint() + */ + public ICDIWatchpoint getWatchpoint() { + int number = watchEvent.getNumber(); + // Ask the breakpointManager for the breakpoint + BreakpointManager mgr = (BreakpointManager)getCSession().getBreakpointManager(); + // We need to return the same object as the reason. + Watchpoint point = mgr.getWatchpoint(number); + // FIXME: if point ==null ??? Create a new breakpoint ? + return point; + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java new file mode 100644 index 00000000000..e349be020bd --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java @@ -0,0 +1,34 @@ +package org.eclipse.cdt.debug.mi.core.cdi; + +import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger; +import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent; + +/** + * @author alain + * + * To change this generated comment edit the template variable "typecomment": + * Window>Preferences>Java>Templates. + * To enable and disable the creation of type comments go to + * Window>Preferences>Java>Code Generation. + */ +public class WatchpointTrigger extends WatchpointScope implements ICDIWatchpointTrigger { + + public WatchpointTrigger(CSession session, MIWatchpointEvent e) { + super(session, e); + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger#getNewValue() + */ + public String getNewValue() { + return watchEvent.getNewValue(); + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger#getOldValue() + */ + public String getOldValue() { + return watchEvent.getOldValue(); + } + +}