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:
parent
7e61e9f632
commit
6290d55275
9 changed files with 763 additions and 25 deletions
|
@ -18,6 +18,7 @@ import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
|||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
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.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.IDMVMContext;
|
||||
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.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.ILabelUpdate;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
|
||||
import org.eclipse.debug.ui.DebugUITools;
|
||||
import org.eclipse.debug.ui.IDebugUIConstants;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class StackFramesVMNode extends AbstractDMVMNode
|
||||
implements IElementLabelProvider
|
||||
implements IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
|
||||
public IVMContext[] fCachedOldFrameVMCs;
|
||||
|
@ -57,6 +62,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
|
|||
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
|
||||
protected void updateHasElementsInSessionThread(IHasChildrenUpdate update) {
|
||||
IRunControl runControl = getServicesTracker().getService(IRunControl.class);
|
||||
|
@ -70,6 +79,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
|
|||
update.done();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMNode#updateElementsInSessionThread(org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate)
|
||||
*/
|
||||
@Override
|
||||
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) {
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
|
@ -180,7 +196,6 @@ public class StackFramesVMNode extends AbstractDMVMNode
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
protected void updateLabelInSessionThread(ILabelUpdate[] updates) {
|
||||
for (final ILabelUpdate update : updates) {
|
||||
final IFrameDMContext dmc = findDmcInPath(update.getViewerInput(), update.getElementPath(), IFrameDMContext.class);
|
||||
|
@ -291,6 +306,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
|
|||
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
|
||||
protected void handleFailedUpdate(IViewerUpdate update) {
|
||||
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
|
||||
public void getContextsForEvent(final VMDelta parentDelta, Object e, final DataRequestMonitor<IVMContext[]> rm) {
|
||||
if (e instanceof ModelProxyInstalledEvent) {
|
||||
|
@ -328,6 +350,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
|
|||
super.getContextsForEvent(parentDelta, e, rm);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.eclipse.dd.dsf.ui.viewmodel.IVMNode#getDeltaFlags(java.lang.Object)
|
||||
*/
|
||||
public int getDeltaFlags(Object e) {
|
||||
// This node generates delta if the timers have changed, or if the
|
||||
// label has changed.
|
||||
|
@ -348,6 +374,10 @@ public class StackFramesVMNode extends AbstractDMVMNode
|
|||
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) {
|
||||
if (e instanceof IContainerSuspendedDMEvent) {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,8 +53,11 @@ import org.eclipse.debug.internal.ui.DebugPluginImages;
|
|||
import org.eclipse.debug.internal.ui.DebugUIPlugin;
|
||||
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.IElementCompareRequest;
|
||||
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.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.IModelDelta;
|
||||
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.TreePath;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
||||
implements IElementEditor, IElementLabelProvider
|
||||
implements IElementEditor, IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
protected class BitFieldVMC extends DMVMContext
|
||||
implements IFormattedValueVMContext
|
||||
|
@ -796,4 +800,128 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
|||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,8 +41,11 @@ import org.eclipse.debug.core.model.IExpression;
|
|||
import org.eclipse.debug.internal.ui.DebugPluginImages;
|
||||
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.IElementCompareRequest;
|
||||
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.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.IModelDelta;
|
||||
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.TreePath;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
||||
implements IElementEditor, IElementLabelProvider
|
||||
implements IElementEditor, IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
protected class RegisterGroupVMC extends DMVMContext
|
||||
{
|
||||
|
@ -459,4 +463,129 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
|||
public ICellModifier getCellModifier(IPresentationContext context, Object element) {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -48,8 +48,11 @@ import org.eclipse.debug.internal.ui.DebugPluginImages;
|
|||
import org.eclipse.debug.internal.ui.DebugUIPlugin;
|
||||
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.IElementCompareRequest;
|
||||
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.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.IModelDelta;
|
||||
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.TreePath;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class RegisterVMNode extends AbstractExpressionVMNode
|
||||
implements IElementEditor, IElementLabelProvider
|
||||
implements IElementEditor, IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
protected class RegisterVMC extends DMVMContext
|
||||
implements IFormattedValueVMContext
|
||||
|
@ -740,4 +744,128 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
|||
return new RegisterCellModifier(
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,8 +52,11 @@ import org.eclipse.debug.core.model.IExpression;
|
|||
import org.eclipse.debug.internal.ui.DebugUIPlugin;
|
||||
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.IElementCompareRequest;
|
||||
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.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.IModelDelta;
|
||||
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.TreePath;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
@SuppressWarnings({"restriction", "nls"})
|
||||
public class VariableVMNode extends AbstractExpressionVMNode
|
||||
implements IElementEditor, IElementLabelProvider
|
||||
implements IElementEditor, IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
|
||||
//private final static int MAX_STRING_VALUE_LENGTH = 40;
|
||||
|
@ -711,4 +715,62 @@ public class VariableVMNode extends AbstractExpressionVMNode
|
|||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.dd.dsf.concurrent.ConfinedToDsfExecutor;
|
|||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||
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.debug.service.IRunControl;
|
||||
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.datamodel.AbstractDMVMNode;
|
||||
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.launch.PDALaunch;
|
||||
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.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.IElementCompareRequest;
|
||||
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.ILabelUpdate;
|
||||
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.IDebugUIConstants;
|
||||
import org.eclipse.jface.viewers.TreePath;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
/**
|
||||
* View Model node representing a PDA program.
|
||||
*/
|
||||
@SuppressWarnings("restriction")
|
||||
public class PDAProgramVMNode extends AbstractDMVMNode
|
||||
implements IElementLabelProvider
|
||||
implements IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
// View model context representing a terminated PDA program.
|
||||
// It's purpose is to show a terminated program in the debug view
|
||||
|
@ -286,4 +292,62 @@ public class PDAProgramVMNode extends AbstractDMVMNode
|
|||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.IRunControl;
|
||||
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.DsfServiceEventHandler;
|
||||
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)
|
||||
*/
|
||||
public void getRegisterGroups(IDMContext ctx, DataRequestMonitor<IRegisterGroupDMContext[]> rm ) {
|
||||
PDAProgramDMContext frameDmc = DMContexts.getAncestorOfType(ctx, PDAProgramDMContext.class);
|
||||
if (frameDmc == null) {
|
||||
PDAProgramDMContext execDmc = DMContexts.getAncestorOfType(ctx, PDAProgramDMContext.class);
|
||||
if (execDmc == null) {
|
||||
rm.setStatus( new Status( IStatus.ERROR , PDAPlugin.PLUGIN_ID , INVALID_HANDLE , "Container context not found", null ) ) ; //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
MIRegisterGroupDMC generalGroupDMC = new MIRegisterGroupDMC( this , frameDmc, 0 , "General" ) ; //$NON-NLS-1$
|
||||
MIRegisterGroupDMC analysisGroupDMC = new MIRegisterGroupDMC( this , frameDmc, 0 , "Analysis" ) ; //$NON-NLS-1$
|
||||
MIRegisterGroupDMC generalGroupDMC = new MIRegisterGroupDMC( this , execDmc, 0 , "General" ) ; //$NON-NLS-1$
|
||||
MIRegisterGroupDMC analysisGroupDMC = new MIRegisterGroupDMC( this , execDmc, 0 , "Analysis" ) ; //$NON-NLS-1$
|
||||
|
||||
rm.setData( new MIRegisterGroupDMC[] { generalGroupDMC, analysisGroupDMC } ) ;
|
||||
rm.done() ;
|
||||
|
@ -128,13 +127,6 @@ public class PDARegisters extends AbstractDsfService implements IRegisters {
|
|||
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;;
|
||||
|
||||
if ( groupDmc.getName().equals( "General") ) {
|
||||
|
|
|
@ -17,9 +17,11 @@ import java.util.concurrent.RejectedExecutionException;
|
|||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
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.debug.service.IRunControl;
|
||||
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.IStartedDMEvent;
|
||||
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.datamodel.AbstractDMVMNode;
|
||||
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.GDBProcessData;
|
||||
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.InferiorStartedDMEvent;
|
||||
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.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.IModelDelta;
|
||||
import org.eclipse.debug.ui.DebugUITools;
|
||||
import org.eclipse.debug.ui.IDebugUIConstants;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class ContainerVMNode extends AbstractDMVMNode
|
||||
implements IElementLabelProvider
|
||||
implements IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
|
||||
|
||||
|
@ -147,8 +154,7 @@ public class ContainerVMNode extends AbstractDMVMNode
|
|||
} else if (e instanceof InferiorStartedDMEvent) {
|
||||
parentDelta.addNode(createVMContext(((IDMEvent<?>)e).getDMContext()), IModelDelta.EXPAND | IModelDelta.SELECT);
|
||||
} else if (e instanceof IStartedDMEvent || e instanceof IExitedDMEvent) {
|
||||
IContainerDMContext containerCtx = DMContexts.getAncestorOfType(
|
||||
((IDMEvent<?>)e).getDMContext(), IContainerDMContext.class);
|
||||
IContainerDMContext containerCtx = DMContexts.getAncestorOfType(((IDMEvent<?>)e).getDMContext(), IContainerDMContext.class);
|
||||
if (containerCtx != null) {
|
||||
parentDelta.addNode(createVMContext(containerCtx), IModelDelta.CONTENT);
|
||||
}
|
||||
|
@ -156,4 +162,62 @@ public class ContainerVMNode extends AbstractDMVMNode
|
|||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
|||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
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.debug.service.IRunControl;
|
||||
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.mi.service.IMIExecutionDMContext;
|
||||
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.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.IModelDelta;
|
||||
import org.eclipse.debug.ui.DebugUITools;
|
||||
import org.eclipse.debug.ui.IDebugUIConstants;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
public class ThreadVMNode extends AbstractDMVMNode
|
||||
implements IElementLabelProvider
|
||||
implements IElementLabelProvider, IElementMementoProvider
|
||||
{
|
||||
public ThreadVMNode(AbstractDMVMProvider provider, DsfSession session) {
|
||||
super(provider, session, IExecutionDMContext.class);
|
||||
|
@ -317,6 +322,69 @@ public class ThreadVMNode extends AbstractDMVMNode
|
|||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue