1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bugzilla 202852 & 211490.

This commit is contained in:
Randy Rohrbach 2008-05-12 17:22:01 +00:00
parent 7e61e9f632
commit 6290d55275
9 changed files with 763 additions and 25 deletions

View file

@ -18,6 +18,7 @@ import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants; import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.DMContexts; 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.IRunControl;
import org.eclipse.dd.dsf.debug.service.IStack; import org.eclipse.dd.dsf.debug.service.IStack;
import org.eclipse.dd.dsf.debug.service.StepQueueManager; import org.eclipse.dd.dsf.debug.service.StepQueueManager;
@ -38,17 +39,21 @@ import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.IDMVMContext; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.IDMVMContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.ui.IMemento;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class StackFramesVMNode extends AbstractDMVMNode public class StackFramesVMNode extends AbstractDMVMNode
implements IElementLabelProvider implements IElementLabelProvider, IElementMementoProvider
{ {
public IVMContext[] fCachedOldFrameVMCs; public IVMContext[] fCachedOldFrameVMCs;
@ -57,6 +62,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
super(provider, session, IStack.IFrameDMContext.class); super(provider, session, IStack.IFrameDMContext.class);
} }
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode#updateHasElementsInSessionThread(org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate)
*/
@Override @Override
protected void updateHasElementsInSessionThread(IHasChildrenUpdate update) { protected void updateHasElementsInSessionThread(IHasChildrenUpdate update) {
IRunControl runControl = getServicesTracker().getService(IRunControl.class); IRunControl runControl = getServicesTracker().getService(IRunControl.class);
@ -70,6 +79,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
update.done(); update.done();
} }
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode#updateElementsInSessionThread(org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate)
*/
@Override @Override
protected void updateElementsInSessionThread(final IChildrenUpdate update) { protected void updateElementsInSessionThread(final IChildrenUpdate update) {
@ -166,7 +179,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
} }
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider#update(org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate[])
*/
public void update(final ILabelUpdate[] updates) { public void update(final ILabelUpdate[] updates) {
try { try {
getSession().getExecutor().execute(new DsfRunnable() { getSession().getExecutor().execute(new DsfRunnable() {
@ -180,7 +196,6 @@ public class StackFramesVMNode extends AbstractDMVMNode
} }
} }
protected void updateLabelInSessionThread(ILabelUpdate[] updates) { protected void updateLabelInSessionThread(ILabelUpdate[] updates) {
for (final ILabelUpdate update : updates) { for (final ILabelUpdate update : updates) {
final IFrameDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IFrameDMContext.class); final IFrameDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IFrameDMContext.class);
@ -291,6 +306,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
update.setLabel(label.toString(), 0); update.setLabel(label.toString(), 0);
} }
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.AbstractVMNode#handleFailedUpdate(org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate)
*/
@Override @Override
protected void handleFailedUpdate(IViewerUpdate update) { protected void handleFailedUpdate(IViewerUpdate update) {
if (update instanceof ILabelUpdate) { if (update instanceof ILabelUpdate) {
@ -302,7 +321,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
} }
} }
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode#getContextsForEvent(org.eclipse.dd.dsf.ui.viewmodel.VMDelta, java.lang.Object, org.eclipse.dd.dsf.concurrent.DataRequestMonitor)
*/
@Override @Override
public void getContextsForEvent(final VMDelta parentDelta, Object e, final DataRequestMonitor<IVMContext[]> rm) { public void getContextsForEvent(final VMDelta parentDelta, Object e, final DataRequestMonitor<IVMContext[]> rm) {
if (e instanceof ModelProxyInstalledEvent) { if (e instanceof ModelProxyInstalledEvent) {
@ -328,6 +350,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
super.getContextsForEvent(parentDelta, e, rm); super.getContextsForEvent(parentDelta, e, rm);
} }
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#getDeltaFlags(java.lang.Object)
*/
public int getDeltaFlags(Object e) { public int getDeltaFlags(Object e) {
// This node generates delta if the timers have changed, or if the // This node generates delta if the timers have changed, or if the
// label has changed. // label has changed.
@ -348,6 +374,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
return IModelDelta.NO_CHANGE; return IModelDelta.NO_CHANGE;
} }
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#buildDelta(java.lang.Object, org.eclipse.dd.dsf.ui.viewmodel.VMDelta, int, org.eclipse.dd.dsf.concurrent.RequestMonitor)
*/
public void buildDelta(final Object e, final VMDelta parent, final int nodeOffset, final RequestMonitor rm) { public void buildDelta(final Object e, final VMDelta parent, final int nodeOffset, final RequestMonitor rm) {
if (e instanceof IContainerSuspendedDMEvent) { if (e instanceof IContainerSuspendedDMEvent) {
IContainerSuspendedDMEvent csEvent = (IContainerSuspendedDMEvent)e; IContainerSuspendedDMEvent csEvent = (IContainerSuspendedDMEvent)e;
@ -464,4 +494,77 @@ public class StackFramesVMNode extends AbstractDMVMNode
); );
} }
private String produceFrameElementName( String viewName , IFrameDMContext frame ) {
/*
* We are addressing Bugzilla 211490 which wants the Register View to keep the same expanded
* state for registers for stack frames within the same thread. Different threads could have
* different register sets ( e.g. one thread may have floating point & another may not ). But
* within a thread we are enforcing the assumption that the register sets will be the same.
* So we make a more convenient work flow by keeping the same expansion when selecting amount
* stack frames within the same thread. We accomplish this by only differentiating by adding
* the level for the Expression/Variables view. Otherwise we do not delineate based on which
* view and this captures the Register View in its filter.
*/
if ( viewName.startsWith(IDebugUIConstants.ID_VARIABLE_VIEW) ||
viewName.startsWith(IDebugUIConstants.ID_EXPRESSION_VIEW) )
{
return "Frame." + frame.getLevel() + "." + frame.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
}
else {
return "Frame" + frame.getSessionId(); //$NON-NLS-1$
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
public void compareElements(IElementCompareRequest[] requests) {
for ( IElementCompareRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
String mementoName = memento.getString("STACK_FRAME_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IFrameDMContext) {
String elementName = produceFrameElementName( request.getPresentationContext().getId(), (IFrameDMContext) dmc );
request.setEqual( elementName.equals( mementoName ) );
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( IElementMementoRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IFrameDMContext) {
String elementName = produceFrameElementName( request.getPresentationContext().getId(), (IFrameDMContext) dmc );
memento.putString("STACK_FRAME_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
}
request.done();
}
}
} }

View file

@ -53,8 +53,11 @@ import org.eclipse.debug.internal.ui.DebugPluginImages;
import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@ -68,10 +71,11 @@ import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class RegisterBitFieldVMNode extends AbstractExpressionVMNode public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
implements IElementEditor, IElementLabelProvider implements IElementEditor, IElementLabelProvider, IElementMementoProvider
{ {
protected class BitFieldVMC extends DMVMContext protected class BitFieldVMC extends DMVMContext
implements IFormattedValueVMContext implements IFormattedValueVMContext
@ -796,4 +800,128 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
rm.done(); rm.done();
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
public void compareElements(IElementCompareRequest[] requests) {
for ( final IElementCompareRequest request : requests ) {
Object element = request.getElement();
final IMemento memento = request.getMemento();
final String mementoName = memento.getString("BITFIELD_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IBitFieldDMContext )
{
final IBitFieldDMContext bitFieldDmc = (IBitFieldDMContext) dmc;
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<IBitFieldDMData> dataDone = new DataRequestMonitor<IBitFieldDMData>(regService.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
String bitFieldName = "BitField." + getData().getName() + "." + bitFieldDmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
request.setEqual( bitFieldName.equals( mementoName ) );
}
request.done();
}
};
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
if ( regService != null ) {
regService.getBitFieldData( bitFieldDmc, dataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( final IElementMementoRequest request : requests ) {
Object element = request.getElement();
final IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IBitFieldDMContext )
{
final IBitFieldDMContext bitFieldDmc = (IBitFieldDMContext) dmc;
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<IBitFieldDMData> dataDone = new DataRequestMonitor<IBitFieldDMData>(regService.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
String bitFieldName = "BitField." + getData().getName() + "." + bitFieldDmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
memento.putString("BITFIELD_MEMENTO_NAME", bitFieldName); //$NON-NLS-1$
}
request.done();
}
};
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
if ( regService != null ) {
regService.getBitFieldData( bitFieldDmc, dataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
request.done();
}
}
} }

View file

@ -41,8 +41,11 @@ import org.eclipse.debug.core.model.IExpression;
import org.eclipse.debug.internal.ui.DebugPluginImages; import org.eclipse.debug.internal.ui.DebugPluginImages;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@ -54,10 +57,11 @@ import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class RegisterGroupVMNode extends AbstractExpressionVMNode public class RegisterGroupVMNode extends AbstractExpressionVMNode
implements IElementEditor, IElementLabelProvider implements IElementEditor, IElementLabelProvider, IElementMementoProvider
{ {
protected class RegisterGroupVMC extends DMVMContext protected class RegisterGroupVMC extends DMVMContext
{ {
@ -459,4 +463,129 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
public ICellModifier getCellModifier(IPresentationContext context, Object element) { public ICellModifier getCellModifier(IPresentationContext context, Object element) {
return fWatchExpressionCellModifier; return fWatchExpressionCellModifier;
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
public void compareElements(IElementCompareRequest[] requests) {
for ( final IElementCompareRequest request : requests ) {
Object element = request.getElement();
final IMemento memento = request.getMemento();
final String mementoName = memento.getString("GROUP_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IRegisterGroupDMContext )
{
final IRegisterGroupDMContext regDmc = (IRegisterGroupDMContext) dmc;
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<IRegisterGroupDMData> regGroupDataDone = new DataRequestMonitor<IRegisterGroupDMData>(regService.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
String grpName = "Group." + getData().getName() + "." + regDmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
request.setEqual( grpName.equals( mementoName ) );
}
request.done();
}
};
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
if ( regService != null ) {
regService.getRegisterGroupData( regDmc, regGroupDataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( final IElementMementoRequest request : requests ) {
Object element = request.getElement();
final IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IRegisterGroupDMContext )
{
final IRegisterGroupDMContext regDmc = (IRegisterGroupDMContext) dmc;
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<IRegisterGroupDMData> regGroupDataDone = new DataRequestMonitor<IRegisterGroupDMData>(regService.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
String grpName = "Group." + getData().getName() + "." + regDmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
memento.putString("GROUP_MEMENTO_NAME", grpName); //$NON-NLS-1$
}
request.done();
}
};
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
if ( regService != null ) {
regService.getRegisterGroupData( regDmc, regGroupDataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
request.done();
}
}
} }

View file

@ -48,8 +48,11 @@ import org.eclipse.debug.internal.ui.DebugPluginImages;
import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@ -62,10 +65,11 @@ import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class RegisterVMNode extends AbstractExpressionVMNode public class RegisterVMNode extends AbstractExpressionVMNode
implements IElementEditor, IElementLabelProvider implements IElementEditor, IElementLabelProvider, IElementMementoProvider
{ {
protected class RegisterVMC extends DMVMContext protected class RegisterVMC extends DMVMContext
implements IFormattedValueVMContext implements IFormattedValueVMContext
@ -740,4 +744,128 @@ public class RegisterVMNode extends AbstractExpressionVMNode
return new RegisterCellModifier( return new RegisterCellModifier(
getDMVMProvider(), fFormattedPrefStore, fSyncRegisterDataAccess ); getDMVMProvider(), fFormattedPrefStore, fSyncRegisterDataAccess );
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
public void compareElements(IElementCompareRequest[] requests) {
for ( final IElementCompareRequest request : requests ) {
Object element = request.getElement();
final IMemento memento = request.getMemento();
final String mementoName = memento.getString("REGISTER_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IRegisterDMContext )
{
final IRegisterDMContext regDmc = (IRegisterDMContext) dmc;
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<IRegisterDMData> dataDone = new DataRequestMonitor<IRegisterDMData>(regService.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
String regName = "Register." + getData().getName() + "." + regDmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
request.setEqual( regName.equals( mementoName ) );
}
request.done();
}
};
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
IRegisters regService = getServicesTracker().getService(IRegisters.class);
if ( regService != null ) {
regService.getRegisterData( regDmc, dataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( final IElementMementoRequest request : requests ) {
Object element = request.getElement();
final IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IRegisterDMContext )
{
final IRegisterDMContext regDmc = (IRegisterDMContext) dmc;
final IRegisters regService = getServicesTracker().getService(IRegisters.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<IRegisterDMData> dataDone = new DataRequestMonitor<IRegisterDMData>(regService.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
String regName = "Register." + getData().getName() + "." + regDmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
memento.putString("REGISTER_MEMENTO_NAME", regName);
}
request.done();
}
};
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
IRegisters regService = getServicesTracker().getService(IRegisters.class);
if ( regService != null ) {
regService.getRegisterData( regDmc, dataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
request.done();
}
}
} }

View file

@ -52,8 +52,11 @@ import org.eclipse.debug.core.model.IExpression;
import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@ -66,10 +69,11 @@ import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
@SuppressWarnings({"restriction", "nls"}) @SuppressWarnings({"restriction", "nls"})
public class VariableVMNode extends AbstractExpressionVMNode public class VariableVMNode extends AbstractExpressionVMNode
implements IElementEditor, IElementLabelProvider implements IElementEditor, IElementLabelProvider, IElementMementoProvider
{ {
//private final static int MAX_STRING_VALUE_LENGTH = 40; //private final static int MAX_STRING_VALUE_LENGTH = 40;
@ -711,4 +715,62 @@ public class VariableVMNode extends AbstractExpressionVMNode
stackFrameService.getLocals(frameDmc, rm); stackFrameService.getLocals(frameDmc, rm);
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
private String produceExpressionElementName( String viewName , IExpressionDMContext expression ) {
return "variable." + expression.getExpression() + "." + expression.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
}
public void compareElements(IElementCompareRequest[] requests) {
for ( IElementCompareRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
String mementoName = memento.getString("VARIABLE_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IExpressionDMContext) {
String elementName = produceExpressionElementName( request.getPresentationContext().getId(), (IExpressionDMContext) dmc );
request.setEqual( elementName.equals( mementoName ) );
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( IElementMementoRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IExpressionDMContext) {
String elementName = produceExpressionElementName( request.getPresentationContext().getId(), (IExpressionDMContext) dmc );
memento.putString("VARIABLE_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
}
request.done();
}
}
} }

View file

@ -18,6 +18,7 @@ import org.eclipse.dd.dsf.concurrent.ConfinedToDsfExecutor;
import org.eclipse.dd.dsf.concurrent.DsfRunnable; import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor; import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.datamodel.IDMEvent; import org.eclipse.dd.dsf.datamodel.IDMEvent;
import org.eclipse.dd.dsf.debug.service.IRunControl; import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext;
@ -31,6 +32,7 @@ import org.eclipse.dd.dsf.ui.viewmodel.IVMNode;
import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.VMDelta;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.IDMVMContext;
import org.eclipse.dd.examples.pda.PDAPlugin; import org.eclipse.dd.examples.pda.PDAPlugin;
import org.eclipse.dd.examples.pda.launch.PDALaunch; import org.eclipse.dd.examples.pda.launch.PDALaunch;
import org.eclipse.dd.examples.pda.service.PDACommandControl; import org.eclipse.dd.examples.pda.service.PDACommandControl;
@ -39,7 +41,10 @@ import org.eclipse.dd.examples.pda.service.PDAStartedEvent;
import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
@ -47,13 +52,14 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreePath;
import org.eclipse.ui.IMemento;
/** /**
* View Model node representing a PDA program. * View Model node representing a PDA program.
*/ */
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class PDAProgramVMNode extends AbstractDMVMNode public class PDAProgramVMNode extends AbstractDMVMNode
implements IElementLabelProvider implements IElementLabelProvider, IElementMementoProvider
{ {
// View model context representing a terminated PDA program. // View model context representing a terminated PDA program.
// It's purpose is to show a terminated program in the debug view // It's purpose is to show a terminated program in the debug view
@ -286,4 +292,62 @@ public class PDAProgramVMNode extends AbstractDMVMNode
} }
rm.done(); rm.done();
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
private String produceProgramElementName( String viewName , PDAProgramDMContext execCtx ) {
return "PDA." + execCtx.getProgram() + "." + execCtx.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
}
public void compareElements(IElementCompareRequest[] requests) {
for ( IElementCompareRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
String mementoName = memento.getString("PDAPROGRAM_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof PDAProgramDMContext) {
String elementName = produceProgramElementName( request.getPresentationContext().getId(), (PDAProgramDMContext) dmc );
request.setEqual( elementName.equals( mementoName ) );
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( IElementMementoRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof PDAProgramDMContext) {
String elementName = produceProgramElementName( request.getPresentationContext().getId(), (PDAProgramDMContext) dmc );
memento.putString("PDAPROGRAM_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
}
request.done();
}
}
} }

View file

@ -23,7 +23,6 @@ import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.debug.service.IRegisters; import org.eclipse.dd.dsf.debug.service.IRegisters;
import org.eclipse.dd.dsf.debug.service.IRunControl; import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.dd.dsf.service.AbstractDsfService; import org.eclipse.dd.dsf.service.AbstractDsfService;
import org.eclipse.dd.dsf.service.DsfServiceEventHandler; import org.eclipse.dd.dsf.service.DsfServiceEventHandler;
import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.DsfSession;
@ -102,15 +101,15 @@ public class PDARegisters extends AbstractDsfService implements IRegisters {
* @see org.eclipse.dd.dsf.debug.service.IRegisters#getRegisterGroups(org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext, org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext, org.eclipse.dd.dsf.concurrent.DataRequestMonitor) * @see org.eclipse.dd.dsf.debug.service.IRegisters#getRegisterGroups(org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext, org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext, org.eclipse.dd.dsf.concurrent.DataRequestMonitor)
*/ */
public void getRegisterGroups(IDMContext ctx, DataRequestMonitor<IRegisterGroupDMContext[]> rm ) { public void getRegisterGroups(IDMContext ctx, DataRequestMonitor<IRegisterGroupDMContext[]> rm ) {
PDAProgramDMContext frameDmc = DMContexts.getAncestorOfType(ctx, PDAProgramDMContext.class); PDAProgramDMContext execDmc = DMContexts.getAncestorOfType(ctx, PDAProgramDMContext.class);
if (frameDmc == null) { if (execDmc == null) {
rm.setStatus( new Status( IStatus.ERROR , PDAPlugin.PLUGIN_ID , INVALID_HANDLE , "Container context not found", null ) ) ; //$NON-NLS-1$ rm.setStatus( new Status( IStatus.ERROR , PDAPlugin.PLUGIN_ID , INVALID_HANDLE , "Container context not found", null ) ) ; //$NON-NLS-1$
rm.done(); rm.done();
return; return;
} }
MIRegisterGroupDMC generalGroupDMC = new MIRegisterGroupDMC( this , frameDmc, 0 , "General" ) ; //$NON-NLS-1$ MIRegisterGroupDMC generalGroupDMC = new MIRegisterGroupDMC( this , execDmc, 0 , "General" ) ; //$NON-NLS-1$
MIRegisterGroupDMC analysisGroupDMC = new MIRegisterGroupDMC( this , frameDmc, 0 , "Analysis" ) ; //$NON-NLS-1$ MIRegisterGroupDMC analysisGroupDMC = new MIRegisterGroupDMC( this , execDmc, 0 , "Analysis" ) ; //$NON-NLS-1$
rm.setData( new MIRegisterGroupDMC[] { generalGroupDMC, analysisGroupDMC } ) ; rm.setData( new MIRegisterGroupDMC[] { generalGroupDMC, analysisGroupDMC } ) ;
rm.done() ; rm.done() ;
@ -128,13 +127,6 @@ public class PDARegisters extends AbstractDsfService implements IRegisters {
return; return;
} }
final IFrameDMContext containerDmc = DMContexts.getAncestorOfType(dmc, IFrameDMContext.class);
if ( containerDmc == null ) {
rm.setStatus( new Status( IStatus.ERROR , PDAPlugin.PLUGIN_ID , INVALID_HANDLE , "Container context not found" , null ) ) ; //$NON-NLS-1$
rm.done();
return;
}
String[] names = null;; String[] names = null;;
if ( groupDmc.getName().equals( "General") ) { if ( groupDmc.getName().equals( "General") ) {

View file

@ -17,9 +17,11 @@ import java.util.concurrent.RejectedExecutionException;
import org.eclipse.dd.dsf.concurrent.DsfRunnable; import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.DMContexts; import org.eclipse.dd.dsf.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.datamodel.IDMEvent; import org.eclipse.dd.dsf.datamodel.IDMEvent;
import org.eclipse.dd.dsf.debug.service.IRunControl; import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext;
import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.dd.dsf.debug.service.IRunControl.IExitedDMEvent; import org.eclipse.dd.dsf.debug.service.IRunControl.IExitedDMEvent;
import org.eclipse.dd.dsf.debug.service.IRunControl.IStartedDMEvent; import org.eclipse.dd.dsf.debug.service.IRunControl.IStartedDMEvent;
import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.DsfSession;
@ -27,6 +29,7 @@ import org.eclipse.dd.dsf.ui.concurrent.ViewerDataRequestMonitor;
import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.VMDelta;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider;
import org.eclipse.dd.dsf.ui.viewmodel.datamodel.IDMVMContext;
import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl; import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl;
import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl.GDBProcessData; import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl.GDBProcessData;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl;
@ -36,16 +39,20 @@ import org.eclipse.dd.mi.service.command.MIInferiorProcess;
import org.eclipse.dd.mi.service.command.MIInferiorProcess.InferiorExitedDMEvent; import org.eclipse.dd.mi.service.command.MIInferiorProcess.InferiorExitedDMEvent;
import org.eclipse.dd.mi.service.command.MIInferiorProcess.InferiorStartedDMEvent; import org.eclipse.dd.mi.service.command.MIInferiorProcess.InferiorStartedDMEvent;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.ui.IMemento;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class ContainerVMNode extends AbstractDMVMNode public class ContainerVMNode extends AbstractDMVMNode
implements IElementLabelProvider implements IElementLabelProvider, IElementMementoProvider
{ {
@ -147,8 +154,7 @@ public class ContainerVMNode extends AbstractDMVMNode
} else if (e instanceof InferiorStartedDMEvent) { } else if (e instanceof InferiorStartedDMEvent) {
parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.EXPAND | IModelDelta.SELECT); parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.EXPAND | IModelDelta.SELECT);
} else if (e instanceof IStartedDMEvent || e instanceof IExitedDMEvent) { } else if (e instanceof IStartedDMEvent || e instanceof IExitedDMEvent) {
IContainerDMContext containerCtx = DMContexts.getAncestorOfType( IContainerDMContext containerCtx = DMContexts.getAncestorOfType(((IDMEvent<?>)e).getDMContext(), IContainerDMContext.class);
((IDMEvent<?>)e).getDMContext(), IContainerDMContext.class);
if (containerCtx != null) { if (containerCtx != null) {
parentDelta.addNode(createVMContext(containerCtx), IModelDelta.CONTENT); parentDelta.addNode(createVMContext(containerCtx), IModelDelta.CONTENT);
} }
@ -156,4 +162,62 @@ public class ContainerVMNode extends AbstractDMVMNode
requestMonitor.done(); requestMonitor.done();
} }
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
private String produceContainerElementName( String viewName , IExecutionDMContext execCtx ) {
return "Container." + execCtx.getSessionId(); //$NON-NLS-1$
}
public void compareElements(IElementCompareRequest[] requests) {
for ( IElementCompareRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
String mementoName = memento.getString("CONTAINER_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IExecutionDMContext) {
String elementName = produceContainerElementName( request.getPresentationContext().getId(), (IExecutionDMContext) dmc );
request.setEqual( elementName.equals( mementoName ) );
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( IElementMementoRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IExecutionDMContext) {
String elementName = produceContainerElementName( request.getPresentationContext().getId(), (IExecutionDMContext) dmc );
memento.putString("CONTAINER_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
}
request.done();
}
}
} }

View file

@ -21,6 +21,7 @@ import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants; import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.DMContexts; import org.eclipse.dd.dsf.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.datamodel.IDMEvent; import org.eclipse.dd.dsf.datamodel.IDMEvent;
import org.eclipse.dd.dsf.debug.service.IRunControl; import org.eclipse.dd.dsf.debug.service.IRunControl;
import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext;
@ -45,16 +46,20 @@ import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl;
import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl.GDBThreadData; import org.eclipse.dd.gdb.internal.provisional.service.GDBRunControl.GDBThreadData;
import org.eclipse.dd.mi.service.IMIExecutionDMContext; import org.eclipse.dd.mi.service.IMIExecutionDMContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.ui.IMemento;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class ThreadVMNode extends AbstractDMVMNode public class ThreadVMNode extends AbstractDMVMNode
implements IElementLabelProvider implements IElementLabelProvider, IElementMementoProvider
{ {
public ThreadVMNode(AbstractDMVMProvider provider, DsfSession session) { public ThreadVMNode(AbstractDMVMProvider provider, DsfSession session) {
super(provider, session, IExecutionDMContext.class); super(provider, session, IExecutionDMContext.class);
@ -317,6 +322,69 @@ public class ThreadVMNode extends AbstractDMVMNode
rm.done(); rm.done();
} }
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
public void compareElements(IElementCompareRequest[] requests) {
for ( IElementCompareRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
String mementoName = memento.getString("THREAD_MEMENTO_NAME"); //$NON-NLS-1$
if (mementoName != null) {
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IMIExecutionDMContext) {
String elementName = "Thread." + ((IMIExecutionDMContext) dmc).getThreadId() + "." + dmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
request.setEqual( elementName.equals( mementoName ) );
}
else if ( dmc instanceof IContainerDMContext) {
String elementName = "Thread." + dmc.getSessionId(); //$NON-NLS-1$
request.setEqual( elementName.equals( mementoName ) );
}
}
}
request.done();
}
}
/*
* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#encodeElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest[])
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( IElementMementoRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof IMIExecutionDMContext) {
String elementName = "Thread." + ((IMIExecutionDMContext) dmc).getThreadId() + "." + dmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
memento.putString("THREAD_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
else if ( dmc instanceof IContainerDMContext) {
String elementName = "Thread." + dmc.getSessionId(); //$NON-NLS-1$
memento.putString("THREAD_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
}
request.done();
}
} }
} }