1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Bug 323683 - [disassembly][pda] NPE with PDA session

This commit is contained in:
Anton Leherbauer 2010-10-14 13:41:19 +00:00
parent 214b66c248
commit a92513f4fa

View file

@ -18,6 +18,7 @@ import static org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils
import java.math.BigInteger;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition;
@ -97,11 +98,43 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
DsfSession.removeSessionEndedListener(this);
}
public static boolean supportsDebugContext_(IAdaptable context) {
return context.getAdapter(IDMVMContext.class) != null;
}
/* (non-Javadoc)
public static boolean supportsDebugContext_(IAdaptable context) {
IDMVMContext dmvmContext = (IDMVMContext) context.getAdapter(IDMVMContext.class);
return dmvmContext != null && hasDisassemblyService(dmvmContext.getDMContext());
}
private static boolean hasDisassemblyService(final IDMContext dmContext) {
DsfSession session = DsfSession.getSession(dmContext.getSessionId());
if (session == null || !session.isActive()) {
return false;
}
if (session.getExecutor().isInExecutorThread()) {
DsfServicesTracker tracker = new DsfServicesTracker(DsfUIPlugin.getBundleContext(), session.getId());
IDisassembly disassSvc = tracker.getService(IDisassembly.class);
tracker.dispose();
return disassSvc != null;
}
Query<Boolean> query = new Query<Boolean>() {
@Override
protected void execute(DataRequestMonitor<Boolean> rm) {
try {
rm.setData(hasDisassemblyService(dmContext));
} finally {
rm.done();
}
}
};
try {
session.getExecutor().execute(query);
Boolean result = query.get(1, TimeUnit.SECONDS);
return result != null && result.booleanValue();
} catch (Exception exc) {
// ignored on purpose
}
return false;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#supportsDebugContext(org.eclipse.core.runtime.IAdaptable)
*/
public boolean supportsDebugContext(IAdaptable context) {