1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-05 07:15:39 +02:00

Process Suspended Event.

This commit is contained in:
Alain Magloire 2002-08-26 05:20:48 +00:00
parent c5881820fa
commit 760848d439

View file

@ -7,23 +7,25 @@ package org.eclipse.cdt.debug.mi.core.cdi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import org.eclipse.cdt.debug.core.cdi.CDIException;
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.MIBreakpointEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
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.MILocationReachedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
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.MIWatchpointEvent;
/**
@ -40,40 +42,35 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
CSession session = getCSession();
ICDIEvent cdiEvent = null;
if (miEvent instanceof MIBreakpointEvent) {
cdiEvent = new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MIFunctionFinishedEvent) {
cdiEvent = new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MILocationReachedEvent) {
cdiEvent = new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MISignalEvent) {
cdiEvent = new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MISteppingRangeEvent) {
cdiEvent = new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MIWatchpointEvent) {
if ((miEvent instanceof MIBreakpointEvent) ||
(miEvent instanceof MIFunctionFinishedEvent) ||
(miEvent instanceof MILocationReachedEvent) ||
(miEvent instanceof MISignalEvent) ||
(miEvent instanceof MISteppingRangeEvent) ||
(miEvent instanceof MIWatchpointEvent)) {
processSuspendedEvent(miEvent);
cdiEvent = new SuspendedEvent(session, miEvent);
} else if (miEvent instanceof MIRunningEvent) {
cdiEvent = new ResumedEvent(session, (MIRunningEvent)miEvent);
} else if (miEvent instanceof MIVarChangedEvent) {
MIVarChangedEvent eventChanged = (MIVarChangedEvent)miEvent;
if (eventChanged.isInScope()) {
cdiEvent = new ChangedEvent(session, (MIVarChangedEvent)miEvent);
} else {
cdiEvent = new DestroyedEvent(session, (MIVarChangedEvent)miEvent);
}
} else if (miEvent instanceof MIThreadExitEvent) {
cdiEvent = new DestroyedEvent(session,(MIThreadExitEvent)miEvent);
} else if (miEvent instanceof MIInferiorExitEvent) {
cdiEvent = new ExitedEvent(session, (MIInferiorExitEvent)miEvent);
} else if (miEvent instanceof MIExitEvent) {
cdiEvent = new DestroyedEvent(session, null);
} else if (miEvent instanceof MIGDBExitEvent) {
cdiEvent = new DestroyedEvent(session);
}
// Fire the event;
fireEvent(cdiEvent);
}
public void fireEvent(ICDIEvent cdiEvent) {
if (cdiEvent != null) {
ICDIEventListener[] listeners =
(ICDIEventListener[])list.toArray(new ICDIEventListener[0]);
for (int i = 0; i < listeners.length; i++) {
listeners[i].handleDebugEvent(cdiEvent);
}
}
}
public EventManager(CSession session) {
super(session);
}
@ -91,4 +88,55 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
public void removeEventListener(ICDIEventListener listener) {
list.remove(listener);
}
private void fireEvent(ICDIEvent cdiEvent) {
if (cdiEvent != null) {
ICDIEventListener[] listeners =
(ICDIEventListener[])list.toArray(new ICDIEventListener[0]);
for (int i = 0; i < listeners.length; i++) {
listeners[i].handleDebugEvent(cdiEvent);
}
}
}
/**
* When suspended arrives, reset managers and target.
*/
void processSuspendedEvent(MIEvent event) {
int threadId = 0;
CTarget target = getCSession().getCTarget();
// Set the current thread.
if (event instanceof MIBreakpointEvent) {
MIBreakpointEvent breakEvent = (MIBreakpointEvent) event;
threadId = breakEvent.getThreadId();
} else if (event instanceof MIWatchpointEvent) {
MIWatchpointEvent watchEvent = (MIWatchpointEvent) event;
threadId = watchEvent.getThreadId();
} else if (event instanceof MISteppingRangeEvent) {
MISteppingRangeEvent rangeEvent = (MISteppingRangeEvent) event;
threadId = rangeEvent.getThreadId();
} else if (event instanceof MISignalEvent) {
MISignalEvent sigEvent = (MISignalEvent) event;
threadId = sigEvent.getThreadId();
} else if (event instanceof MILocationReachedEvent) {
MILocationReachedEvent locEvent = (MILocationReachedEvent) event;
threadId = locEvent.getThreadId();
} else if (event instanceof MIFunctionFinishedEvent) {
MIFunctionFinishedEvent funcEvent = (MIFunctionFinishedEvent) event;
threadId = funcEvent.getThreadId();
}
target.updateState(threadId);
VariableManager varMgr = getCSession().getVariableManager();
try {
varMgr.update();
} catch (CDIException e) {
System.out.println(e);
}
}
void processRunningEvent() {
CTarget target = getCSession().getCTarget();
//target.clearState();
}
}