mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-12 10:45:37 +02:00
bugzilla 202852
This commit is contained in:
parent
3052dbcd3c
commit
0a03668473
2 changed files with 98 additions and 35 deletions
|
@ -14,6 +14,7 @@ package org.eclipse.dd.gdb.internal.ui.viewmodel.launch;
|
||||||
|
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
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.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;
|
||||||
|
@ -21,7 +22,6 @@ 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;
|
||||||
|
@ -167,29 +167,61 @@ public class ContainerVMNode extends AbstractDMVMNode
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
|
* @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider#compareElements(org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest[])
|
||||||
*/
|
*/
|
||||||
|
private final String MEMENTO_NAME = "CONTAINER_MEMENTO_NAME"; //$NON-NLS-1$
|
||||||
private String produceContainerElementName( String viewName , IExecutionDMContext execCtx ) {
|
|
||||||
return "Container." + execCtx.getSessionId(); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
public void compareElements(IElementCompareRequest[] requests) {
|
public void compareElements(IElementCompareRequest[] requests) {
|
||||||
|
|
||||||
for ( IElementCompareRequest request : requests ) {
|
for ( final IElementCompareRequest request : requests ) {
|
||||||
|
|
||||||
Object element = request.getElement();
|
Object element = request.getElement();
|
||||||
IMemento memento = request.getMemento();
|
final IMemento memento = request.getMemento();
|
||||||
String mementoName = memento.getString("CONTAINER_MEMENTO_NAME"); //$NON-NLS-1$
|
final String mementoName = memento.getString(MEMENTO_NAME);
|
||||||
|
|
||||||
if (mementoName != null) {
|
if (mementoName != null) {
|
||||||
if (element instanceof IDMVMContext) {
|
if (element instanceof IDMVMContext) {
|
||||||
|
|
||||||
IDMContext dmc = ((IDMVMContext)element).getDMContext();
|
IDMContext dmc = ((IDMVMContext)element).getDMContext();
|
||||||
|
|
||||||
if ( dmc instanceof IExecutionDMContext) {
|
if ( dmc instanceof GDBControlDMContext )
|
||||||
|
{
|
||||||
String elementName = produceContainerElementName( request.getPresentationContext().getId(), (IExecutionDMContext) dmc );
|
final GDBControlDMContext procDmc = (GDBControlDMContext) dmc;
|
||||||
request.setEqual( elementName.equals( mementoName ) );
|
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();
|
request.done();
|
||||||
|
@ -202,20 +234,55 @@ public class ContainerVMNode extends AbstractDMVMNode
|
||||||
*/
|
*/
|
||||||
public void encodeElements(IElementMementoRequest[] requests) {
|
public void encodeElements(IElementMementoRequest[] requests) {
|
||||||
|
|
||||||
for ( IElementMementoRequest request : requests ) {
|
for ( final IElementMementoRequest request : requests ) {
|
||||||
|
|
||||||
Object element = request.getElement();
|
Object element = request.getElement();
|
||||||
IMemento memento = request.getMemento();
|
final IMemento memento = request.getMemento();
|
||||||
|
|
||||||
if (element instanceof IDMVMContext) {
|
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();
|
request.done();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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[])
|
* @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) {
|
public void compareElements(IElementCompareRequest[] requests) {
|
||||||
|
|
||||||
for ( IElementCompareRequest request : requests ) {
|
for ( IElementCompareRequest request : requests ) {
|
||||||
|
|
||||||
Object element = request.getElement();
|
Object element = request.getElement();
|
||||||
IMemento memento = request.getMemento();
|
IMemento memento = request.getMemento();
|
||||||
String mementoName = memento.getString("THREAD_MEMENTO_NAME"); //$NON-NLS-1$
|
String mementoName = memento.getString(MEMENTO_NAME);
|
||||||
|
|
||||||
if (mementoName != null) {
|
if (mementoName != null) {
|
||||||
if (element instanceof IDMVMContext) {
|
if (element instanceof IDMVMContext) {
|
||||||
|
@ -339,12 +345,7 @@ public class ThreadVMNode extends AbstractDMVMNode
|
||||||
|
|
||||||
if ( dmc instanceof IMIExecutionDMContext) {
|
if ( dmc instanceof IMIExecutionDMContext) {
|
||||||
|
|
||||||
String elementName = "Thread." + ((IMIExecutionDMContext) dmc).getThreadId() + "." + dmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
|
String elementName = produceThreadElementName( request.getPresentationContext().getId(), (IMIExecutionDMContext) dmc );
|
||||||
request.setEqual( elementName.equals( mementoName ) );
|
|
||||||
}
|
|
||||||
else if ( dmc instanceof IContainerDMContext) {
|
|
||||||
|
|
||||||
String elementName = "Thread." + dmc.getSessionId(); //$NON-NLS-1$
|
|
||||||
request.setEqual( elementName.equals( mementoName ) );
|
request.setEqual( elementName.equals( mementoName ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -370,13 +371,8 @@ public class ThreadVMNode extends AbstractDMVMNode
|
||||||
|
|
||||||
if ( dmc instanceof IMIExecutionDMContext) {
|
if ( dmc instanceof IMIExecutionDMContext) {
|
||||||
|
|
||||||
String elementName = "Thread." + ((IMIExecutionDMContext) dmc).getThreadId() + "." + dmc.getSessionId(); //$NON-NLS-1$ //$NON-NLS-2$
|
String elementName = produceThreadElementName( request.getPresentationContext().getId(), (IMIExecutionDMContext) dmc );
|
||||||
memento.putString("THREAD_MEMENTO_NAME", elementName); //$NON-NLS-1$
|
memento.putString(MEMENTO_NAME, elementName);
|
||||||
}
|
|
||||||
else if ( dmc instanceof IContainerDMContext) {
|
|
||||||
|
|
||||||
String elementName = "Thread." + dmc.getSessionId(); //$NON-NLS-1$
|
|
||||||
memento.putString("THREAD_MEMENTO_NAME", elementName); //$NON-NLS-1$
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
request.done();
|
request.done();
|
||||||
|
|
Loading…
Add table
Reference in a new issue