mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 243465 and Bug 243461 Furhter cleanup of events in non-stop, as well as proper processing of state change on the DSF event instead of MIEvent
This commit is contained in:
parent
be5c3679cb
commit
cf852997b6
1 changed files with 56 additions and 83 deletions
|
@ -133,21 +133,21 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
|||
}
|
||||
}
|
||||
|
||||
@Immutable
|
||||
private static class ContainerSuspendedEvent extends SuspendedEvent
|
||||
implements IContainerSuspendedDMEvent
|
||||
{
|
||||
final IExecutionDMContext[] triggeringDmcs;
|
||||
ContainerSuspendedEvent(IContainerDMContext containerDmc, MIStoppedEvent miInfo, IExecutionDMContext triggeringDmc) {
|
||||
super(containerDmc, miInfo);
|
||||
this.triggeringDmcs = triggeringDmc != null
|
||||
? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
||||
}
|
||||
|
||||
public IExecutionDMContext[] getTriggeringContexts() {
|
||||
return triggeringDmcs;
|
||||
}
|
||||
}
|
||||
// @Immutable
|
||||
// private static class ContainerSuspendedEvent extends SuspendedEvent
|
||||
// implements IContainerSuspendedDMEvent
|
||||
// {
|
||||
// final IExecutionDMContext[] triggeringDmcs;
|
||||
// ContainerSuspendedEvent(IContainerDMContext containerDmc, MIStoppedEvent miInfo, IExecutionDMContext triggeringDmc) {
|
||||
// super(containerDmc, miInfo);
|
||||
// this.triggeringDmcs = triggeringDmc != null
|
||||
// ? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
||||
// }
|
||||
//
|
||||
// public IExecutionDMContext[] getTriggeringContexts() {
|
||||
// return triggeringDmcs;
|
||||
// }
|
||||
// }
|
||||
|
||||
@Immutable
|
||||
private static class ResumedEvent extends RunControlEvent<IExecutionDMContext, MIRunningEvent>
|
||||
|
@ -177,22 +177,22 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
|||
}
|
||||
}
|
||||
|
||||
@Immutable
|
||||
private static class ContainerResumedEvent extends ResumedEvent
|
||||
implements IContainerResumedDMEvent
|
||||
{
|
||||
final IExecutionDMContext[] triggeringDmcs;
|
||||
|
||||
ContainerResumedEvent(IContainerDMContext containerDmc, MIRunningEvent miInfo, IExecutionDMContext triggeringDmc) {
|
||||
super(containerDmc, miInfo);
|
||||
this.triggeringDmcs = triggeringDmc != null
|
||||
? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
||||
}
|
||||
|
||||
public IExecutionDMContext[] getTriggeringContexts() {
|
||||
return triggeringDmcs;
|
||||
}
|
||||
}
|
||||
// @Immutable
|
||||
// private static class ContainerResumedEvent extends ResumedEvent
|
||||
// implements IContainerResumedDMEvent
|
||||
// {
|
||||
// final IExecutionDMContext[] triggeringDmcs;
|
||||
//
|
||||
// ContainerResumedEvent(IContainerDMContext containerDmc, MIRunningEvent miInfo, IExecutionDMContext triggeringDmc) {
|
||||
// super(containerDmc, miInfo);
|
||||
// this.triggeringDmcs = triggeringDmc != null
|
||||
// ? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
||||
// }
|
||||
//
|
||||
// public IExecutionDMContext[] getTriggeringContexts() {
|
||||
// return triggeringDmcs;
|
||||
// }
|
||||
// }
|
||||
|
||||
@Immutable
|
||||
private static class StartedDMEvent extends RunControlEvent<IExecutionDMContext,MIThreadCreatedEvent>
|
||||
|
@ -685,30 +685,6 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
|||
return fConnection;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Event handlers
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(final MIRunningEvent e) {
|
||||
|
||||
IDMEvent<?> event = null;
|
||||
|
||||
// If it's not an execution context (what else could it be?!?), just propagate it
|
||||
IMIExecutionDMContext executionDmc = DMContexts.getAncestorOfType(e.getDMContext(), IMIExecutionDMContext.class);
|
||||
if (executionDmc == null) {
|
||||
event = new ResumedEvent(e.getDMContext(), e);
|
||||
getSession().dispatchEvent(event, getProperties());
|
||||
return;
|
||||
}
|
||||
|
||||
// It's a thread execution context (since we are in non-stop mode)
|
||||
event = new ResumedEvent(e.getDMContext(), e);
|
||||
updateThreadState(executionDmc, (ResumedEvent) event);
|
||||
getSession().dispatchEvent(event, getProperties());
|
||||
fMICommandCache.reset();
|
||||
}
|
||||
|
||||
private void updateThreadState(IMIExecutionDMContext context, ResumedEvent event) {
|
||||
StateChangeReason reason = event.getReason();
|
||||
boolean isStepping = reason.equals(StateChangeReason.STEP);
|
||||
|
@ -723,26 +699,6 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
|||
threadState.fStepping = isStepping;
|
||||
}
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(final MIStoppedEvent e) {
|
||||
|
||||
IDMEvent<?> event = null;
|
||||
|
||||
// If it's not an execution context (what else could it be?!?), just propagate it
|
||||
IMIExecutionDMContext executionDmc = DMContexts.getAncestorOfType(e.getDMContext(), IMIExecutionDMContext.class);
|
||||
if (executionDmc == null) {
|
||||
event = new SuspendedEvent(e.getDMContext(), e);
|
||||
getSession().dispatchEvent(event, getProperties());
|
||||
return;
|
||||
}
|
||||
|
||||
// It's a thread execution context (since we are in non-stop mode)
|
||||
event = new SuspendedEvent(e.getDMContext(), e);
|
||||
updateThreadState(executionDmc, (SuspendedEvent) event);
|
||||
getSession().dispatchEvent(event, getProperties());
|
||||
fMICommandCache.reset();
|
||||
}
|
||||
|
||||
private void updateThreadState(IMIExecutionDMContext context, SuspendedEvent event) {
|
||||
StateChangeReason reason = event.getReason();
|
||||
MIThreadRunState threadState = fThreadRunStates.get(context);
|
||||
|
@ -756,6 +712,21 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
|||
threadState.fStateChangeReason = reason;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Event handlers
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(final MIRunningEvent e) {
|
||||
getSession().dispatchEvent(new ResumedEvent(e.getDMContext(), e), getProperties());
|
||||
}
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(final MIStoppedEvent e) {
|
||||
getSession().dispatchEvent(new SuspendedEvent(e.getDMContext(), e), getProperties());
|
||||
}
|
||||
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(final MIThreadCreatedEvent e) {
|
||||
IContainerDMContext containerDmc = e.getDMContext();
|
||||
|
@ -782,18 +753,20 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
|||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(ResumedEvent e) {
|
||||
IExecutionDMContext ctx = e.getDMContext();
|
||||
if (ctx instanceof IMIExecutionDMContext) {
|
||||
updateThreadState((IMIExecutionDMContext)ctx, e);
|
||||
fMICommandCache.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(SuspendedEvent e) {
|
||||
}
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(ContainerResumedEvent e) {
|
||||
}
|
||||
|
||||
@DsfServiceEventHandler
|
||||
public void eventDispatched(ContainerSuspendedEvent e) {
|
||||
IExecutionDMContext ctx = e.getDMContext();
|
||||
if (ctx instanceof IMIExecutionDMContext) {
|
||||
updateThreadState((IMIExecutionDMContext)ctx, e);
|
||||
fMICommandCache.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@DsfServiceEventHandler
|
||||
|
|
Loading…
Add table
Reference in a new issue