1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 15:15:25 +02:00

bugzilla 202852

This commit is contained in:
Randy Rohrbach 2008-05-13 16:14:04 +00:00
parent 3052dbcd3c
commit 0a03668473
2 changed files with 98 additions and 35 deletions

View file

@ -14,6 +14,7 @@ package org.eclipse.dd.gdb.internal.ui.viewmodel.launch;
import java.util.concurrent.RejectedExecutionException;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.DMContexts;
@ -21,7 +22,6 @@ 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;
@ -167,29 +167,61 @@ public class ContainerVMNode extends AbstractDMVMNode
* (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$
}
private final String MEMENTO_NAME = "CONTAINER_MEMENTO_NAME"; //$NON-NLS-1$
public void compareElements(IElementCompareRequest[] requests) {
for ( IElementCompareRequest request : requests ) {
for ( final IElementCompareRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
String mementoName = memento.getString("CONTAINER_MEMENTO_NAME"); //$NON-NLS-1$
final IMemento memento = request.getMemento();
final String mementoName = memento.getString(MEMENTO_NAME);
if (mementoName != null) {
if (element instanceof IDMVMContext) {
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 ) );
}
if ( dmc instanceof GDBControlDMContext )
{
final GDBControlDMContext procDmc = (GDBControlDMContext) dmc;
final GDBRunControl runControl = getServicesTracker().getService(GDBRunControl.class);
/*
* Now make sure the register group is the one we want.
*/
final DataRequestMonitor<GDBProcessData> regGroupDataDone = new DataRequestMonitor<GDBProcessData>(runControl.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
request.setEqual( mementoName.equals( "Container." + getData().getName() ) ); //$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 GDBRunControl runControl = getServicesTracker().getService(GDBRunControl.class);
if ( runControl != null ) {
runControl.getProcessData( procDmc, regGroupDataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
}
request.done();
@ -202,20 +234,55 @@ public class ContainerVMNode extends AbstractDMVMNode
*/
public void encodeElements(IElementMementoRequest[] requests) {
for ( IElementMementoRequest request : requests ) {
for ( final IElementMementoRequest request : requests ) {
Object element = request.getElement();
IMemento memento = request.getMemento();
final IMemento memento = request.getMemento();
if (element instanceof IDMVMContext) {
IDMContext dmc = ((IDMVMContext)element).getDMContext();
if ( dmc instanceof GDBControlDMContext )
{
final GDBControlDMContext procDmc = (GDBControlDMContext) dmc;
final GDBRunControl runControl = getServicesTracker().getService(GDBRunControl.class);
IDMContext dmc = ((IDMVMContext)element).getDMContext();
/*
* Now make sure the register group is the one we want.
*/
if ( dmc instanceof IExecutionDMContext) {
final DataRequestMonitor<GDBProcessData> regGroupDataDone = new DataRequestMonitor<GDBProcessData>(runControl.getExecutor(), null) {
@Override
protected void handleCompleted() {
if ( getStatus().isOK() ) {
memento.putString(MEMENTO_NAME, "Container." + getData().getName()); //$NON-NLS-1$
}
request.done();
}
};
String elementName = produceContainerElementName( request.getPresentationContext().getId(), (IExecutionDMContext) dmc );
memento.putString("CONTAINER_MEMENTO_NAME", elementName); //$NON-NLS-1$
}
/*
* Now go get the model data for the single register group found.
*/
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
final GDBRunControl runControl = getServicesTracker().getService(GDBRunControl.class);
if ( runControl != null ) {
runControl.getProcessData( procDmc, regGroupDataDone );
}
else {
request.done();
}
}
});
} catch (RejectedExecutionException e) {
request.done();
}
continue;
}
}
request.done();
}

View file

@ -324,13 +324,19 @@ public class ThreadVMNode extends AbstractDMVMNode
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
*/
private String produceThreadElementName( String viewName , IMIExecutionDMContext execCtx ) {
return "Thread." + execCtx.getThreadId(); //$NON-NLS-1$
}
private final String MEMENTO_NAME = "THREAD_MEMENTO_NAME"; //$NON-NLS-1$
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$
String mementoName = memento.getString(MEMENTO_NAME);
if (mementoName != null) {
if (element instanceof IDMVMContext) {
@ -339,12 +345,7 @@ public class ThreadVMNode extends AbstractDMVMNode
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$
String elementName = produceThreadElementName( request.getPresentationContext().getId(), (IMIExecutionDMContext) dmc );
request.setEqual( elementName.equals( mementoName ) );
}
}
@ -370,13 +371,8 @@ public class ThreadVMNode extends AbstractDMVMNode
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$
String elementName = produceThreadElementName( request.getPresentationContext().getId(), (IMIExecutionDMContext) dmc );
memento.putString(MEMENTO_NAME, elementName);
}
}
request.done();