Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] GDB/MI recognise CLI

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.52
diff -u -r1.52 ChangeLog
--- ChangeLog	7 Jan 2003 17:12:33 -0000	1.52
+++ ChangeLog	8 Jan 2003 15:39:45 -0000
@@ -1,3 +1,40 @@
+2003-01-08 Alain Magloire
+
+	CLIProcessor a new class to recognise the CLI(Command Line Interface)
+	of gdb example:
+	 (gdb) next
+	 (gdb) n
+	 (gdb) b
+	 (gdb) break
+           etc ..:
+	When the patterns are discover, the class will generate some events
+	to warn te UI that something change.
+
+	* src/.../mi/core/cdi/BreakpointManager.java (update):
+	Send a -break-list and generate events for any difference, in
+	the breakpoints that we know about.
+	(deleteBreakpoint): Take as argument the breakpoint number.
+	(getBreakpoints): Call update() to generate events if new breakpoints.
+	(getMIBreakpoints): return the MIBreakpoints.
+	* src/.../mi/core/cdi/ChangedEvent.java (ChangedEvent):
+	New constructor with MIBreakPointChangedEvent.
+	* src/.../mi/core/cdi/DestroyedEvent.java (DestroyedEvent):
+	New constructor with MIBreakPointDeletedEvent.
+	* src/.../mi/core/cdi/Created.java: New file.
+	* src/.../mi/core/cdi/EventManager.java (update):
+	Watch for the new MIBreakPoint*Events.
+	* src/.../mi/core/event/MIBreakPointCreatedEvent.java: New file.
+	* src/.../mi/core/event/MIBreakPointChangedEvent.java: New file.
+	* src/.../mi/core/event/MIBreakPointDeletedEvent.java: New file.
+	* src/.../mi/core/event/MICreatedEvent.java: New file.
+	* src/.../mi/core/event/MIDestroyedEvent.java: New file.
+	* src/.../mi/core/event/MIInferiorExitEvent.java: Extends MIDestroyedEvent
+	* src/.../mi/core/event/MIThreadExitEvent.java: Extends MIDestroyedEvent
+	* src/.../mi/core/event/MIGDBExitEvent.java: Extends MIDestroyedEvent
+	* src/.../mi/core/event/MIDetachedEvent.java: Extends MIDestroyedEvent
+	* src/.../mi/core/CLIProcessor.java: New file.
+	* src/.../mi/core/TxThread.java: New file.
+
 2003-01-07 Alain Magloire
 
 	* src/.../mi/core/MIInferior.java (getOutputStream): Remove useless assignement.
Index: src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java
diff -N src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/CLIProcessor.java	8 Jan 2003 15:39:45 -0000
@@ -0,0 +1,113 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+
+package org.eclipse.cdt.debug.mi.core;
+ 
+import org.eclipse.cdt.debug.mi.core.command.CLICommand;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
+
+/**
+ * Transmission command thread blocks on the command Queue
+ * and wake cmd are available and push them to gdb out channel.
+ */
+public class CLIProcessor {
+
+	MISession session;
+
+	public CLIProcessor(MISession s) {
+		session = s;
+	}
+
+	/**
+	 * An attempt to discover the command type and
+	 * fire an event if necessary.
+	 */
+	void process(CLICommand cmd) {
+		String operation = cmd.getOperation().trim();
+		// Get the command name.
+		int indx = operation.indexOf(' ');
+		if (indx != -1) {
+			operation = operation.substring(0, indx).trim();
+		} else {
+			operation = operation.trim();
+		}
+
+		// Check the type of command
+
+		int type = getSteppingOperationKind(operation);
+		if (type != -1) {
+			// if it was a step instruction set state running
+			session.getMIInferior().setRunning();
+			MIEvent event = new MIRunningEvent(cmd.getToken(), type);
+			session.fireEvent(event);
+		} else if (isSettingBreakpoint(operation)) {
+			session.fireEvent(new MIBreakPointChangedEvent(0));
+		} else if (isSettingWatchpoint(operation)) {
+		} else if (isDeletingBreakpoint(operation)) {
+		}
+	}
+
+	int getSteppingOperationKind(String operation) {
+		int type = -1;
+		/* execution commands: n, next, s, step, si, stepi, u, until, finish,
+		   c, continue, fg */
+		if (operation.equals("n") || operation.equals("next")) {
+			type = MIRunningEvent.NEXT;
+		} else if (operation.equals("ni") || operation.equals("nexti")) {
+			type = MIRunningEvent.NEXTI;
+		} else if (operation.equals("s") || operation.equals("step")) {
+			type = MIRunningEvent.STEP;
+		} else if (operation.equals("si") || operation.equals("stepi")) {
+			type = MIRunningEvent.STEPI;
+		} else if (operation.equals("u") ||
+			   (operation.startsWith("unt") &&  "until".indexOf(operation) != -1)) {
+				type = MIRunningEvent.UNTIL;
+		} else if (operation.startsWith("fin") && "finish".indexOf(operation) != -1) {
+			type = MIRunningEvent.FINISH;
+		} else if (operation.equals("c") || operation.equals("fg") ||
+			   (operation.startsWith("cont") && "continue".indexOf(operation) != -1)) {
+			type = MIRunningEvent.CONTINUE;
+		}
+		return type;
+	}
+
+	boolean isSettingBreakpoint(String operation) {
+		boolean isbreak = false;
+		/* breakpoints: b, break, hbreak, tbreak, rbreak, thbreak */
+		/* watchpoints: watch, rwatch, awatch, tbreak, rbreak, thbreak */
+		if ((operation.startsWith("b")   && "break".indexOf(operation)   != -1) ||
+		    (operation.startsWith("tb")  && "tbreak".indexOf(operation)  != -1) ||
+		    (operation.startsWith("hb")  && "hbreak".indexOf(operation)  != -1) ||
+		    (operation.startsWith("thb") && "thbreak".indexOf(operation) != -1) ||
+		    (operation.startsWith("rb")  && "rbreak".indexOf(operation)  != -1)) {
+			isbreak = true;
+		}
+		return isbreak;
+	}
+
+	boolean isSettingWatchpoint(String operation) {
+		boolean isWatch = false;
+		/* watchpoints: watch, rwatch, awatch, tbreak, rbreak, thbreak */
+		if ((operation.startsWith("wa")  && "watch".indexOf(operation)   != -1) ||
+		    (operation.startsWith("rw")  && "rwatch".indexOf(operation)  != -1) ||
+		    (operation.startsWith("aw")  && "awatch".indexOf(operation)  != -1)) {
+			isWatch = true;
+		}
+		return  isWatch;
+	}
+
+	boolean isDeletingBreakpoint(String operation) {
+		boolean isDelete = false;
+		/* deleting breaks: clear, delete */
+		if ((operation.startsWith("cl")  && "clear".indexOf(operation)   != -1) ||
+		    (operation.startsWith("del") && "delete".indexOf(operation)  != -1)) {
+			isDelete = true;
+		}
+		return isDelete;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/TxThread.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/TxThread.java,v
retrieving revision 1.16
diff -u -r1.16 TxThread.java
--- src/org/eclipse/cdt/debug/mi/core/TxThread.java	14 Dec 2002 14:04:40 -0000	1.16
+++ src/org/eclipse/cdt/debug/mi/core/TxThread.java	8 Jan 2003 15:39:46 -0000
@@ -20,10 +20,12 @@
 public class TxThread extends Thread {
 
 	MISession session;
+	CLIProcessor cli;
 
 	public TxThread(MISession s) {
 		super("MI TX Thread");
 		session = s;
+		cli = new CLIProcessor(session);
 	}
 
 	public void run () {
@@ -54,7 +56,7 @@
 					
 					// May need to fire event.
 					if (cmd instanceof CLICommand) {
-						processCLICommand((CLICommand)cmd);
+						cli.process((CLICommand)cmd);
 					}
 				
 					// shove in the pipe
Index: src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java,v
retrieving revision 1.23
diff -u -r1.23 BreakpointManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java	6 Jan 2003 16:32:16 -0000	1.23
+++ src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java	8 Jan 2003 15:39:49 -0000
@@ -18,6 +18,7 @@
 import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
 import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
 import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
 import org.eclipse.cdt.debug.mi.core.command.MIBreakAfter;
 import org.eclipse.cdt.debug.mi.core.command.MIBreakCondition;
@@ -27,6 +28,10 @@
 import org.eclipse.cdt.debug.mi.core.command.MIBreakInsert;
 import org.eclipse.cdt.debug.mi.core.command.MIBreakList;
 import org.eclipse.cdt.debug.mi.core.command.MIBreakWatch;
+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;
+import org.eclipse.cdt.debug.mi.core.event.MIEvent;
 import org.eclipse.cdt.debug.mi.core.output.MIBreakInsertInfo;
 import org.eclipse.cdt.debug.mi.core.output.MIBreakListInfo;
 import org.eclipse.cdt.debug.mi.core.output.MIBreakPoint;
@@ -39,18 +44,79 @@
 public class BreakpointManager extends SessionObject implements ICDIBreakpointManager {
 
 	List breakList;
+	List delList;
 	boolean allowInterrupt;
 
 	public BreakpointManager(CSession session) {
 		super(session);
 		breakList = new ArrayList(1);
+		delList = new ArrayList(1);
 		allowInterrupt = true;
 	}
 
+	public MIBreakPoint[] getMIBreakpoints() throws CDIException {
+		CSession s = getCSession();
+		CommandFactory factory = s.getMISession().getCommandFactory();
+		MIBreakList breakpointList = factory.createMIBreakList();
+		try {
+			s.getMISession().postCommand(breakpointList);
+			MIBreakListInfo info = breakpointList.getMIBreakListInfo();
+			if (info == null) {
+				throw new CDIException("No answer");
+			}
+			return info.getBreakPoints();
+		} catch (MIException e) {
+			throw new MI2CDIException(e);
+		}
+	}
+
+	void update() throws CDIException {
+		MIBreakPoint[] newMIBreakPoints = getMIBreakpoints();
+		List eventList = new ArrayList(newMIBreakPoints.length);
+		for (int i = 0; i < newMIBreakPoints.length; i++) {
+			int no = newMIBreakPoints[i].getNumber();
+			if (containsBreakpoint(no)) {
+				if (hasBreakpointChanged(newMIBreakPoints[i])) {
+					// Fire ChangedEvent
+					eventList.add(new MIBreakPointChangedEvent(no)); 
+				}
+			} else {
+				// add the new breakpoint and fire create event
+				breakList.add(new Breakpoint(this, newMIBreakPoints[i]));
+				eventList.add(new MIBreakPointCreatedEvent(no)); 
+			}
+		}
+		// Check if any breakpoint was removed.
+		Breakpoint[] oldBreakpoints = listBreakpoints();
+		for (int i = 0; i < oldBreakpoints.length; i++) {
+			boolean found = false;
+			int no = oldBreakpoints[i].getMIBreakPoint().getNumber();
+			for (int j = 0; j < newMIBreakPoints.length; j++) {
+				if (no == newMIBreakPoints[i].getNumber()) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				// Fire destroyed Events.
+				breakList.remove(oldBreakpoints[i]);
+				delList.add(oldBreakpoints[i]);
+				eventList.add(new MIBreakPointDeletedEvent(no)); 
+			}
+		}
+		MISession mi = getCSession().getMISession();
+		MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
+		mi.fireEvents(events);
+	}
+
 	boolean containsBreakpoint(int number) {
 		return (getBreakpoint(number) != null);
 	}
 
+	boolean hasBreakpointChanged(MIBreakPoint miBreakPoint) {
+		return false;
+	}
+
 	Breakpoint getBreakpoint(int number) {
 		ICDIBreakpoint[] bkpts = listBreakpoints();
 		for (int i = 0; i < bkpts.length; i++) {
@@ -70,8 +136,7 @@
 	}
 
 	Breakpoint[] listBreakpoints() {
-		return (Breakpoint[]) breakList.toArray(
-			new Breakpoint[breakList.size()]);
+		return (Breakpoint[]) breakList.toArray(new Breakpoint[breakList.size()]);
 	}
 
 	boolean suspendInferior() throws CDIException {
@@ -149,9 +214,29 @@
 		} finally {
 			resumeInferior(state);
 		}
+		List eventList = new ArrayList(breakpoints.length);
 		for (int i = 0; i < breakpoints.length; i++) {
 			breakList.remove(breakpoints[i]);
+			delList.add(breakpoints[i]);
+			int no = ((Breakpoint)breakpoints[i]).getMIBreakPoint().getNumber();
+			eventList.add(new MIBreakPointDeletedEvent(no));
+		}
+		MISession mi = s.getMISession();
+		MIEvent[] events = (MIEvent[])eventList.toArray(new MIEvent[0]);
+		mi.fireEvents(events);
+	}
+
+	Breakpoint deleteBreakpoint (int no) {
+		Breakpoint point = null;
+		Breakpoint[] points = (Breakpoint[])delList.toArray(new Breakpoint[delList.size()]);
+		for (int i = 0; i < points.length; i++) {
+			if (points[i].getMIBreakPoint().getNumber() == no) {
+				delList.remove(points[i]);
+				point = points[i];
+				break;
+			}
 		}
+		return point;
 	}
 
 	public void enableBreakpoint(ICDIBreakpoint breakpoint) throws CDIException {
@@ -258,28 +343,36 @@
 	 * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#getBreakpoints()
 	 */
 	public ICDIBreakpoint[] getBreakpoints() throws CDIException {
-		CSession s = getCSession();
-		CommandFactory factory = s.getMISession().getCommandFactory();
-		MIBreakList breakpointList = factory.createMIBreakList();
-		try {
-			s.getMISession().postCommand(breakpointList);
-			MIBreakListInfo info = breakpointList.getMIBreakListInfo();
-			if (info == null) {
-				throw new CDIException("No answer");
-			}
-			MIBreakPoint[] miPoints = info.getBreakPoints();
-			for (int i = 0; i < miPoints.length; i++) {
-				if (!containsBreakpoint(miPoints[i].getNumber())) {
-					// FIXME: Generate a Create/Change Event??
-					breakList.add(new Breakpoint(this, miPoints[i]));
-				}
-			}
-			// FIXME: Generate a DestroyEvent for deleted ones.
-		} catch (MIException e) {
-			throw new MI2CDIException(e);
-		}
+		update();
 		return (ICDIBreakpoint[]) listBreakpoints();
 	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#getBreakpoints()
+	 */
+//	public ICDIBreakpoint[] getBreakpoints() throws CDIException {
+//		CSession s = getCSession();
+//		CommandFactory factory = s.getMISession().getCommandFactory();
+//		MIBreakList breakpointList = factory.createMIBreakList();
+//		try {
+//			s.getMISession().postCommand(breakpointList);
+//			MIBreakListInfo info = breakpointList.getMIBreakListInfo();
+//			if (info == null) {
+//				throw new CDIException("No answer");
+//			}
+//			MIBreakPoint[] miPoints = info.getBreakPoints();
+//			for (int i = 0; i < miPoints.length; i++) {
+//				if (!containsBreakpoint(miPoints[i].getNumber())) {
+//					// FIXME: Generate a Create/Change Event??
+//					breakList.add(new Breakpoint(this, miPoints[i]));
+//				}
+//			}
+//			// FIXME: Generate a DestroyEvent for deleted ones.
+//		} catch (MIException e) {
+//			throw new MI2CDIException(e);
+//		}
+//		return (ICDIBreakpoint[]) listBreakpoints();
+//	}
 
 	/**
 	 * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager#setCatchpoint(int, ICDICatchEvent, String, ICDICondition, boolean)
Index: src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java,v
retrieving revision 1.4
diff -u -r1.4 ChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java	2 Oct 2002 04:47:08 -0000	1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java	8 Jan 2003 15:39:49 -0000
@@ -6,7 +6,9 @@
 
 import org.eclipse.cdt.debug.core.cdi.CDIException;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointChangedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
 
@@ -40,6 +42,18 @@
 		}
 		if (reg != null) {
 			source = reg;
+		} else {
+			source = new CObject(session.getCTarget());
+		}
+	}
+
+	public ChangedEvent(CSession s, MIBreakPointChangedEvent bpoint) {
+		session = s;
+		BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+		int number = bpoint.getNumber();
+		ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
+		if (breakpoint != null) {
+			source = breakpoint;
 		} else {
 			source = new CObject(session.getCTarget());
 		}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java	8 Jan 2003 15:39:49 -0000
@@ -0,0 +1,43 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi;
+
+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.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointCreatedEvent;
+
+/**
+ */
+public class CreatedEvent implements ICDICreatedEvent {
+
+	CSession session;
+	ICDIObject source;
+
+	public CreatedEvent(CSession s, MIBreakPointCreatedEvent bpoint) {
+		session = s;
+		BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+		int number = bpoint.getNumber();
+		ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
+		if (breakpoint != null) {
+			source = breakpoint;
+		} else {
+			source = new CObject(session.getCTarget());
+		}
+	}
+
+	public CreatedEvent(CSession s, ICDIObject src) {
+		session = s;
+		source = src;
+	}
+
+	/**
+	 * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+	 */
+	public ICDIObject getSource() {
+		return source;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java,v
retrieving revision 1.4
diff -u -r1.4 DestroyedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java	5 Dec 2002 16:01:53 -0000	1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java	8 Jan 2003 15:39:48 -0000
@@ -7,6 +7,7 @@
 
 import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakPointDeletedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
 
@@ -32,7 +33,18 @@
 		} else {
 			source = new CObject(session.getCTarget());
 		}
+	}
 
+	public DestroyedEvent(CSession s, MIBreakPointDeletedEvent bpoint) {
+		session = s;
+		BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+		int number = bpoint.getNumber();
+		Breakpoint breakpoint = mgr.deleteBreakpoint(number);
+		if (breakpoint != null) {
+			source = breakpoint;
+		} else {
+			source = new CObject(session.getCTarget());
+		}
 	}
 
 	public DestroyedEvent(CSession s, ICDIObject src) {
@@ -42,8 +54,7 @@
 	
 	public DestroyedEvent(CSession s) {
 		session = s;
-	}
-	
+	}	
 	
 	/**
 	 * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
Index: src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java,v
retrieving revision 1.26
diff -u -r1.26 EventManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java	7 Jan 2003 17:11:57 -0000	1.26
+++ src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java	8 Jan 2003 15:39:50 -0000
@@ -15,7 +15,12 @@
 import org.eclipse.cdt.debug.core.cdi.ICDIEventManager;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
+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;
 import org.eclipse.cdt.debug.mi.core.event.MIChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MICreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIDestroyedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIEvent;
 import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
@@ -76,15 +81,34 @@
 						blocks[i].setDirty(false);
 					}
 				}
+			} else if (miEvent instanceof MIBreakPointChangedEvent) {
+				MIBreakPointChangedEvent bpoint = (MIBreakPointChangedEvent)miEvent;
+				if (bpoint.getNumber() > 0) {
+					cdiList.add(new ChangedEvent(session, (MIBreakPointChangedEvent)miEvent));
+				} else {
+					// Try to update to figure out what have change.
+					try {
+						((BreakpointManager)(session.getBreakpointManager())).update();
+					} catch (CDIException e) {
+					}
+				}
+			}
+		} else if (miEvent instanceof MIDestroyedEvent) {
+			if (miEvent instanceof MIThreadExitEvent) {
+				cdiList.add(new DestroyedEvent(session,(MIThreadExitEvent)miEvent)); 
+			} else if (miEvent instanceof MIInferiorExitEvent) {
+				cdiList.add(new ExitedEvent(session, (MIInferiorExitEvent)miEvent));
+			} else if (miEvent instanceof MIGDBExitEvent) {
+				cdiList.add(new DestroyedEvent(session));
+			} else if (miEvent instanceof MIDetachedEvent) {
+				cdiList.add(new DisconnectedEvent(session));
+			} else if (miEvent instanceof MIBreakPointDeletedEvent) {
+				cdiList.add(new DestroyedEvent(session));
+			}
+		} else if (miEvent instanceof MICreatedEvent) {
+			if (miEvent instanceof MIBreakPointCreatedEvent) {
+				cdiList.add(new CreatedEvent(session, (MIBreakPointCreatedEvent)miEvent));
 			}
-		} else if (miEvent instanceof MIThreadExitEvent) {
-			cdiList.add(new DestroyedEvent(session,(MIThreadExitEvent)miEvent)); 
-		} else if (miEvent instanceof MIInferiorExitEvent) {
-			cdiList.add(new ExitedEvent(session, (MIInferiorExitEvent)miEvent));
-		} else if (miEvent instanceof MIGDBExitEvent) {
-			cdiList.add(new DestroyedEvent(session));
-		} else if (miEvent instanceof MIDetachedEvent) {
-			cdiList.add(new DisconnectedEvent(session));
 		}
 
 		// Fire the event;
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointChangedEvent.java	8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ *
+ */
+public class MIBreakPointChangedEvent extends MIChangedEvent {
+
+	int no;
+
+	public MIBreakPointChangedEvent(int number) {
+		super(0);
+		no = number;
+	}
+
+	public MIBreakPointChangedEvent(int id, int number) {
+		super(id);
+		no = number;
+	}
+
+	public int getNumber() {
+		return no;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointCreatedEvent.java	8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ *
+ */
+public class MIBreakPointCreatedEvent extends MICreatedEvent {
+
+	int no;
+
+	public MIBreakPointCreatedEvent(int number) {
+		super(0);
+		no = number;
+	}
+
+	public MIBreakPointCreatedEvent(int id, int number) {
+		super(id);
+		no = number;
+	}
+
+	public int getNumber() {
+		return no;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakPointDeletedEvent.java	8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ *
+ */
+public class MIBreakPointDeletedEvent extends MIDestroyedEvent {
+
+	int no;
+
+	public MIBreakPointDeletedEvent(int number) {
+		super(0);
+		no = number;
+	}
+
+	public MIBreakPointDeletedEvent(int id, int number) {
+		super(id);
+		no = number;
+	}
+
+	public int getNumber() {
+		return no;
+	}
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MICreatedEvent.java	8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,18 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public abstract class MICreatedEvent extends MIEvent {
+	public MICreatedEvent(int id) {
+		super(id);
+	}
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIDestroyedEvent.java	8 Jan 2003 15:39:46 -0000
@@ -0,0 +1,18 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public abstract class MIDestroyedEvent extends MIEvent {
+	public MIDestroyedEvent(int id) {
+		super(id);
+	}
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java,v
retrieving revision 1.3
diff -u -r1.3 MIDetachedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java	26 Oct 2002 20:25:56 -0000	1.3
+++ src/org/eclipse/cdt/debug/mi/core/event/MIDetachedEvent.java	8 Jan 2003 15:39:46 -0000
@@ -11,7 +11,7 @@
  *
  *  ^running
  */
-public class MIDetachedEvent extends MIEvent {
+public class MIDetachedEvent extends MIDestroyedEvent {
 
 	public MIDetachedEvent(int token) {
 		super(token);
Index: src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java,v
retrieving revision 1.2
diff -u -r1.2 MIGDBExitEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java	26 Oct 2002 20:26:15 -0000	1.2
+++ src/org/eclipse/cdt/debug/mi/core/event/MIGDBExitEvent.java	8 Jan 2003 15:39:46 -0000
@@ -10,7 +10,7 @@
 /**
  * Gdb Session terminated.
  */
-public class MIGDBExitEvent extends MIEvent {
+public class MIGDBExitEvent extends MIDestroyedEvent {
 
 	public MIGDBExitEvent(int token) {
 		super(token);
Index: src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java,v
retrieving revision 1.5
diff -u -r1.5 MIInferiorExitEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java	26 Oct 2002 20:26:21 -0000	1.5
+++ src/org/eclipse/cdt/debug/mi/core/event/MIInferiorExitEvent.java	8 Jan 2003 15:39:46 -0000
@@ -19,7 +19,7 @@
  * ^done,reason="exited",exit-code="04"
  *
  */
-public class MIInferiorExitEvent extends MIEvent {
+public class MIInferiorExitEvent extends MIDestroyedEvent {
 
 	int code = 0;
 
Index: src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java,v
retrieving revision 1.3
diff -u -r1.3 MIThreadExitEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java	26 Oct 2002 20:27:10 -0000	1.3
+++ src/org/eclipse/cdt/debug/mi/core/event/MIThreadExitEvent.java	8 Jan 2003 15:39:46 -0000
@@ -10,7 +10,7 @@
  * This can not be detected yet by gdb/mi.
  *
  */
-public class MIThreadExitEvent extends MIEvent {
+public class MIThreadExitEvent extends MIDestroyedEvent {
 
 	int tid;
 



Back to the top