diff --git a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIRunControl.java b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIRunControl.java index ed43f92efd0..f66e51e4fb8 100644 --- a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIRunControl.java +++ b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIRunControl.java @@ -38,6 +38,7 @@ import org.eclipse.dd.mi.service.command.commands.MIExecStep; import org.eclipse.dd.mi.service.command.commands.MIExecStepInstruction; import org.eclipse.dd.mi.service.command.commands.MIExecUntil; import org.eclipse.dd.mi.service.command.commands.MIThreadListIds; +import org.eclipse.dd.mi.service.command.events.IMIDMEvent; import org.eclipse.dd.mi.service.command.events.MIBreakpointHitEvent; import org.eclipse.dd.mi.service.command.events.MIErrorEvent; import org.eclipse.dd.mi.service.command.events.MIEvent; @@ -137,7 +138,7 @@ public class MIRunControl extends AbstractDsfService implements IRunControl */ @Immutable protected static class RunControlEvent> extends AbstractDMEvent - implements IDMEvent + implements IDMEvent, IMIDMEvent { final private T fMIInfo; public RunControlEvent(V dmc, T miInfo) { diff --git a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java index 19809f68c96..e48c0ce8ebe 100644 --- a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java +++ b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java @@ -27,16 +27,18 @@ import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.datamodel.AbstractDMContext; import org.eclipse.dd.dsf.datamodel.DMContexts; import org.eclipse.dd.dsf.datamodel.IDMContext; -import org.eclipse.dd.dsf.debug.service.IRunControl; import org.eclipse.dd.dsf.debug.service.IStack; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; +import org.eclipse.dd.dsf.debug.service.IRunControl.IResumedDMEvent; +import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent; import org.eclipse.dd.dsf.debug.service.IRunControl.StateChangeReason; import org.eclipse.dd.dsf.debug.service.command.CommandCache; -import org.eclipse.dd.dsf.debug.service.command.ICommandControl; import org.eclipse.dd.dsf.service.AbstractDsfService; import org.eclipse.dd.dsf.service.DsfServiceEventHandler; import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.mi.internal.MIPlugin; +import org.eclipse.dd.mi.service.MIRunControl.SuspendedEvent; +import org.eclipse.dd.mi.service.command.AbstractMIControl; import org.eclipse.dd.mi.service.command.commands.MIStackInfoDepth; import org.eclipse.dd.mi.service.command.commands.MIStackListArguments; import org.eclipse.dd.mi.service.command.commands.MIStackListFrames; @@ -144,7 +146,10 @@ public class MIStack extends AbstractDsfService } private void doInitialize(RequestMonitor rm) { - fMICommandCache = new CommandCache(getSession(), getServicesTracker().getService(ICommandControl.class)); + AbstractMIControl miControl = getServicesTracker().getService(AbstractMIControl.class); + fMICommandCache = new CommandCache(getSession(), miControl); + fMICommandCache.setContextAvailable(miControl.getControlDMContext(), true); + getSession().addServiceEventListener(this, null); register(new String[]{IStack.class.getName(), MIStack.class.getName()}, new Hashtable()); rm.done(); @@ -575,7 +580,7 @@ public class MIStack extends AbstractDsfService // IServiceEventListener @DsfServiceEventHandler - public void eventDispatched(IRunControl.IResumedDMEvent e) { + public void eventDispatched(IResumedDMEvent e) { fMICommandCache.setContextAvailable(e.getDMContext(), false); if (e.getReason() != StateChangeReason.STEP) { fCachedStoppedEvent = null; @@ -584,14 +589,11 @@ public class MIStack extends AbstractDsfService } @DsfServiceEventHandler - public void eventDispatched(IRunControl.ISuspendedDMEvent e) { + public void eventDispatched(ISuspendedDMEvent e) { fMICommandCache.setContextAvailable(e.getDMContext(), true); fMICommandCache.reset(); + if (e instanceof SuspendedEvent) { + fCachedStoppedEvent = ((SuspendedEvent)e).getMIEvent(); + } } - - @DsfServiceEventHandler - public void eventDispatched(MIRunControl.ContainerSuspendedEvent e) { - fCachedStoppedEvent = e.getMIEvent(); - } - } diff --git a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/command/events/IMIDMEvent.java b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/command/events/IMIDMEvent.java new file mode 100644 index 00000000000..8457a6266d3 --- /dev/null +++ b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/command/events/IMIDMEvent.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2008 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Ericsson - initial API and implementation + *******************************************************************************/ +package org.eclipse.dd.mi.service.command.events; + +import org.eclipse.dd.dsf.datamodel.IDMContext; + +/** + * Common interface for events that are directly caused by some MI event. + */ +public interface IMIDMEvent> { + public V getMIEvent(); +}