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
|
// @Immutable
|
||||||
private static class ContainerSuspendedEvent extends SuspendedEvent
|
// private static class ContainerSuspendedEvent extends SuspendedEvent
|
||||||
implements IContainerSuspendedDMEvent
|
// implements IContainerSuspendedDMEvent
|
||||||
{
|
// {
|
||||||
final IExecutionDMContext[] triggeringDmcs;
|
// final IExecutionDMContext[] triggeringDmcs;
|
||||||
ContainerSuspendedEvent(IContainerDMContext containerDmc, MIStoppedEvent miInfo, IExecutionDMContext triggeringDmc) {
|
// ContainerSuspendedEvent(IContainerDMContext containerDmc, MIStoppedEvent miInfo, IExecutionDMContext triggeringDmc) {
|
||||||
super(containerDmc, miInfo);
|
// super(containerDmc, miInfo);
|
||||||
this.triggeringDmcs = triggeringDmc != null
|
// this.triggeringDmcs = triggeringDmc != null
|
||||||
? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
// ? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public IExecutionDMContext[] getTriggeringContexts() {
|
// public IExecutionDMContext[] getTriggeringContexts() {
|
||||||
return triggeringDmcs;
|
// return triggeringDmcs;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
private static class ResumedEvent extends RunControlEvent<IExecutionDMContext, MIRunningEvent>
|
private static class ResumedEvent extends RunControlEvent<IExecutionDMContext, MIRunningEvent>
|
||||||
|
@ -177,22 +177,22 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Immutable
|
// @Immutable
|
||||||
private static class ContainerResumedEvent extends ResumedEvent
|
// private static class ContainerResumedEvent extends ResumedEvent
|
||||||
implements IContainerResumedDMEvent
|
// implements IContainerResumedDMEvent
|
||||||
{
|
// {
|
||||||
final IExecutionDMContext[] triggeringDmcs;
|
// final IExecutionDMContext[] triggeringDmcs;
|
||||||
|
//
|
||||||
ContainerResumedEvent(IContainerDMContext containerDmc, MIRunningEvent miInfo, IExecutionDMContext triggeringDmc) {
|
// ContainerResumedEvent(IContainerDMContext containerDmc, MIRunningEvent miInfo, IExecutionDMContext triggeringDmc) {
|
||||||
super(containerDmc, miInfo);
|
// super(containerDmc, miInfo);
|
||||||
this.triggeringDmcs = triggeringDmc != null
|
// this.triggeringDmcs = triggeringDmc != null
|
||||||
? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
// ? new IExecutionDMContext[] { triggeringDmc } : new IExecutionDMContext[0];
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public IExecutionDMContext[] getTriggeringContexts() {
|
// public IExecutionDMContext[] getTriggeringContexts() {
|
||||||
return triggeringDmcs;
|
// return triggeringDmcs;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
private static class StartedDMEvent extends RunControlEvent<IExecutionDMContext,MIThreadCreatedEvent>
|
private static class StartedDMEvent extends RunControlEvent<IExecutionDMContext,MIThreadCreatedEvent>
|
||||||
|
@ -685,30 +685,6 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
||||||
return fConnection;
|
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) {
|
private void updateThreadState(IMIExecutionDMContext context, ResumedEvent event) {
|
||||||
StateChangeReason reason = event.getReason();
|
StateChangeReason reason = event.getReason();
|
||||||
boolean isStepping = reason.equals(StateChangeReason.STEP);
|
boolean isStepping = reason.equals(StateChangeReason.STEP);
|
||||||
|
@ -723,26 +699,6 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
||||||
threadState.fStepping = isStepping;
|
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) {
|
private void updateThreadState(IMIExecutionDMContext context, SuspendedEvent event) {
|
||||||
StateChangeReason reason = event.getReason();
|
StateChangeReason reason = event.getReason();
|
||||||
MIThreadRunState threadState = fThreadRunStates.get(context);
|
MIThreadRunState threadState = fThreadRunStates.get(context);
|
||||||
|
@ -756,6 +712,21 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
||||||
threadState.fStateChangeReason = reason;
|
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
|
@DsfServiceEventHandler
|
||||||
public void eventDispatched(final MIThreadCreatedEvent e) {
|
public void eventDispatched(final MIThreadCreatedEvent e) {
|
||||||
IContainerDMContext containerDmc = e.getDMContext();
|
IContainerDMContext containerDmc = e.getDMContext();
|
||||||
|
@ -782,18 +753,20 @@ public class MIRunControlNS extends AbstractDsfService implements IRunControl
|
||||||
|
|
||||||
@DsfServiceEventHandler
|
@DsfServiceEventHandler
|
||||||
public void eventDispatched(ResumedEvent e) {
|
public void eventDispatched(ResumedEvent e) {
|
||||||
|
IExecutionDMContext ctx = e.getDMContext();
|
||||||
|
if (ctx instanceof IMIExecutionDMContext) {
|
||||||
|
updateThreadState((IMIExecutionDMContext)ctx, e);
|
||||||
|
fMICommandCache.reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@DsfServiceEventHandler
|
@DsfServiceEventHandler
|
||||||
public void eventDispatched(SuspendedEvent e) {
|
public void eventDispatched(SuspendedEvent e) {
|
||||||
|
IExecutionDMContext ctx = e.getDMContext();
|
||||||
|
if (ctx instanceof IMIExecutionDMContext) {
|
||||||
|
updateThreadState((IMIExecutionDMContext)ctx, e);
|
||||||
|
fMICommandCache.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@DsfServiceEventHandler
|
|
||||||
public void eventDispatched(ContainerResumedEvent e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@DsfServiceEventHandler
|
|
||||||
public void eventDispatched(ContainerSuspendedEvent e) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@DsfServiceEventHandler
|
@DsfServiceEventHandler
|
||||||
|
|
Loading…
Add table
Reference in a new issue