mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[216803] Removed the getName() methos from Data Model contexts declared in IRegisters service interface.
This commit is contained in:
parent
5542247e15
commit
deabab9f21
6 changed files with 404 additions and 394 deletions
|
@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
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.IDsfStatusConstants;
|
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||||
|
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.DMContexts;
|
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||||
|
@ -32,7 +33,8 @@ import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMContext;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMData;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IMnemonic;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IMnemonic;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
||||||
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
|
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
|
||||||
|
@ -116,33 +118,23 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
||||||
}
|
}
|
||||||
|
|
||||||
public String createWatchExpression(Object element) throws CoreException {
|
public String createWatchExpression(Object element) throws CoreException {
|
||||||
BitFieldVMC bitFieldVmc = ((BitFieldVMC)element);
|
IRegisterGroupDMData groupData = fDataAccess.getRegisterGroupDMData(element);
|
||||||
|
IRegisterDMData registerData = fDataAccess.getRegisterDMData(element);
|
||||||
|
IBitFieldDMData bitFieldData = fDataAccess.getBitFieldDMData(element);
|
||||||
|
|
||||||
|
if (groupData != null && registerData != null && bitFieldData != null) {
|
||||||
StringBuffer exprBuf = new StringBuffer();
|
StringBuffer exprBuf = new StringBuffer();
|
||||||
IRegisterGroupDMContext groupDmc =
|
|
||||||
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IRegisterGroupDMContext.class);
|
|
||||||
if (groupDmc != null) {
|
|
||||||
exprBuf.append("$$\""); //$NON-NLS-1$
|
exprBuf.append("$$\""); //$NON-NLS-1$
|
||||||
exprBuf.append(groupDmc.getName());
|
exprBuf.append(groupData.getName());
|
||||||
exprBuf.append('"');
|
exprBuf.append('"');
|
||||||
}
|
|
||||||
|
|
||||||
IRegisterDMContext registerDmc =
|
|
||||||
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IRegisterDMContext.class);
|
|
||||||
if (registerDmc != null) {
|
|
||||||
exprBuf.append('$');
|
exprBuf.append('$');
|
||||||
exprBuf.append(registerDmc.getName());
|
exprBuf.append(registerData.getName());
|
||||||
}
|
|
||||||
|
|
||||||
IBitFieldDMContext bitFieldDmc =
|
|
||||||
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IBitFieldDMContext.class);
|
|
||||||
if (bitFieldDmc != null) {
|
|
||||||
exprBuf.append('.');
|
exprBuf.append('.');
|
||||||
exprBuf.append(bitFieldDmc.getName());
|
exprBuf.append(bitFieldData.getName());
|
||||||
}
|
|
||||||
|
|
||||||
return exprBuf.toString();
|
return exprBuf.toString();
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SyncRegisterDataAccess fDataAccess = null;
|
private SyncRegisterDataAccess fDataAccess = null;
|
||||||
|
@ -512,7 +504,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void testElementForExpression(Object element, IExpression expression, DataRequestMonitor<Boolean> rm) {
|
protected void testElementForExpression(Object element, IExpression expression, final DataRequestMonitor<Boolean> rm) {
|
||||||
if (!(element instanceof IDMVMContext)) {
|
if (!(element instanceof IDMVMContext)) {
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
||||||
rm.done();
|
rm.done();
|
||||||
|
@ -526,14 +518,32 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String bitFieldName = parseExpressionForBitFieldName(expression.getExpressionText());
|
final String bitFieldName = parseExpressionForBitFieldName(expression.getExpressionText());
|
||||||
if (dmc.getName().equals(bitFieldName)) {
|
try {
|
||||||
rm.setData(Boolean.TRUE);
|
getSession().getExecutor().execute(new DsfRunnable() {
|
||||||
} else {
|
public void run() {
|
||||||
rm.setData(Boolean.FALSE);
|
IRegisters registersService = getServicesTracker().getService(IRegisters.class);
|
||||||
}
|
if (registersService != null) {
|
||||||
|
registersService.getBitFieldData(
|
||||||
|
dmc,
|
||||||
|
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
|
@Override
|
||||||
|
protected void handleSuccess() {
|
||||||
|
rm.setData( getData().getName().equals(bitFieldName) );
|
||||||
rm.done();
|
rm.done();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Register service not available", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "DSF session shut down", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean canParseExpression(IExpression expression) {
|
public boolean canParseExpression(IExpression expression) {
|
||||||
return parseExpressionForBitFieldName(expression.getExpressionText()) != null;
|
return parseExpressionForBitFieldName(expression.getExpressionText()) != null;
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
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.IDsfStatusConstants;
|
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||||
|
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.DMContexts;
|
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||||
|
@ -102,13 +103,11 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
||||||
}
|
}
|
||||||
|
|
||||||
public String createWatchExpression(Object element) throws CoreException {
|
public String createWatchExpression(Object element) throws CoreException {
|
||||||
RegisterGroupVMC registerVmc = ((RegisterGroupVMC)element);
|
IRegisterGroupDMData groupData = fSyncRegisterDataAccess.getRegisterGroupDMData(element);
|
||||||
|
if (groupData != null) {
|
||||||
StringBuffer exprBuf = new StringBuffer();
|
StringBuffer exprBuf = new StringBuffer();
|
||||||
IRegisterGroupDMContext groupDmc = DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterGroupDMContext.class);
|
|
||||||
if (groupDmc != null) {
|
|
||||||
exprBuf.append("$$\""); //$NON-NLS-1$
|
exprBuf.append("$$\""); //$NON-NLS-1$
|
||||||
exprBuf.append(groupDmc.getName());
|
exprBuf.append(groupData.getName());
|
||||||
exprBuf.append('"');
|
exprBuf.append('"');
|
||||||
return exprBuf.toString();
|
return exprBuf.toString();
|
||||||
}
|
}
|
||||||
|
@ -328,7 +327,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void testElementForExpression(Object element, IExpression expression, DataRequestMonitor<Boolean> rm) {
|
protected void testElementForExpression(Object element, IExpression expression, final DataRequestMonitor<Boolean> rm) {
|
||||||
if (!(element instanceof IDMVMContext)) {
|
if (!(element instanceof IDMVMContext)) {
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
||||||
rm.done();
|
rm.done();
|
||||||
|
@ -341,14 +340,32 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String groupName = parseExpressionForGroupName(expression.getExpressionText());
|
final String groupName = parseExpressionForGroupName(expression.getExpressionText());
|
||||||
if (dmc.getName().equals(groupName)) {
|
try {
|
||||||
rm.setData(Boolean.TRUE);
|
getSession().getExecutor().execute(new DsfRunnable() {
|
||||||
} else {
|
public void run() {
|
||||||
rm.setData(Boolean.FALSE);
|
IRegisters registersService = getServicesTracker().getService(IRegisters.class);
|
||||||
}
|
if (registersService != null) {
|
||||||
|
registersService.getRegisterGroupData(
|
||||||
|
dmc,
|
||||||
|
new DataRequestMonitor<IRegisterGroupDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
|
@Override
|
||||||
|
protected void handleSuccess() {
|
||||||
|
rm.setData( getData().getName().equals(groupName) );
|
||||||
rm.done();
|
rm.done();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Register service not available", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "DSF session shut down", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void associateExpression(Object element, IExpression expression) {
|
protected void associateExpression(Object element, IExpression expression) {
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
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.IDsfStatusConstants;
|
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||||
|
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.DMContexts;
|
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||||
|
@ -30,7 +31,7 @@ import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterChangedDMEvent;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterChangedDMEvent;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.numberformat.IFormattedValuePreferenceStore;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.numberformat.IFormattedValuePreferenceStore;
|
||||||
|
@ -114,22 +115,15 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
||||||
}
|
}
|
||||||
|
|
||||||
public String createWatchExpression(Object element) throws CoreException {
|
public String createWatchExpression(Object element) throws CoreException {
|
||||||
RegisterVMC registerVmc = ((RegisterVMC)element);
|
IRegisterGroupDMData groupData = fSyncRegisterDataAccess.getRegisterGroupDMData(element);
|
||||||
|
IRegisterDMData registerData = fSyncRegisterDataAccess.getRegisterDMData(element);
|
||||||
|
if (groupData != null && registerData != null) {
|
||||||
StringBuffer exprBuf = new StringBuffer();
|
StringBuffer exprBuf = new StringBuffer();
|
||||||
IRegisterGroupDMContext groupDmc =
|
|
||||||
DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterGroupDMContext.class);
|
|
||||||
if (groupDmc != null) {
|
|
||||||
exprBuf.append("$$\""); //$NON-NLS-1$
|
exprBuf.append("$$\""); //$NON-NLS-1$
|
||||||
exprBuf.append(groupDmc.getName());
|
exprBuf.append(groupData.getName());
|
||||||
exprBuf.append('"');
|
exprBuf.append('"');
|
||||||
}
|
|
||||||
|
|
||||||
IRegisterDMContext registerDmc =
|
|
||||||
DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterDMContext.class);
|
|
||||||
if (registerDmc != null) {
|
|
||||||
exprBuf.append('$');
|
exprBuf.append('$');
|
||||||
exprBuf.append(registerDmc.getName());
|
exprBuf.append(registerData.getName());
|
||||||
return exprBuf.toString();
|
return exprBuf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -485,7 +479,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void testElementForExpression(Object element, IExpression expression, DataRequestMonitor<Boolean> rm) {
|
protected void testElementForExpression(Object element, IExpression expression, final DataRequestMonitor<Boolean> rm) {
|
||||||
if (!(element instanceof IDMVMContext)) {
|
if (!(element instanceof IDMVMContext)) {
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
||||||
rm.done();
|
rm.done();
|
||||||
|
@ -498,14 +492,32 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String regName = parseExpressionForRegisterName(expression.getExpressionText());
|
final String regName = parseExpressionForRegisterName(expression.getExpressionText());
|
||||||
if (dmc.getName().equals(regName)) {
|
try {
|
||||||
rm.setData(Boolean.TRUE);
|
getSession().getExecutor().execute(new DsfRunnable() {
|
||||||
} else {
|
public void run() {
|
||||||
rm.setData(Boolean.FALSE);
|
IRegisters registersService = getServicesTracker().getService(IRegisters.class);
|
||||||
}
|
if (registersService != null) {
|
||||||
|
registersService.getRegisterData(
|
||||||
|
dmc,
|
||||||
|
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
|
@Override
|
||||||
|
protected void handleSuccess() {
|
||||||
|
rm.setData( getData().getName().equals(regName) );
|
||||||
rm.done();
|
rm.done();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Register service not available", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (RejectedExecutionException e) {
|
||||||
|
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "DSF session shut down", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void associateExpression(Object element, IExpression expression) {
|
protected void associateExpression(Object element, IExpression expression) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||||
|
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||||
import org.eclipse.dd.dsf.concurrent.Query;
|
import org.eclipse.dd.dsf.concurrent.Query;
|
||||||
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
||||||
import org.eclipse.dd.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
|
import org.eclipse.dd.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
|
||||||
|
@ -43,6 +44,45 @@ import org.osgi.util.tracker.ServiceTracker;
|
||||||
@ThreadSafeAndProhibitedFromDsfExecutor("fSession#getExecutor")
|
@ThreadSafeAndProhibitedFromDsfExecutor("fSession#getExecutor")
|
||||||
public class SyncRegisterDataAccess {
|
public class SyncRegisterDataAccess {
|
||||||
|
|
||||||
|
abstract public class RegistersServiceQuery<V, K extends IDMContext> extends Query<V> {
|
||||||
|
|
||||||
|
final protected K fDmc;
|
||||||
|
|
||||||
|
public RegistersServiceQuery(K dmc) {
|
||||||
|
fDmc = dmc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void execute(final DataRequestMonitor<V> rm) {
|
||||||
|
/*
|
||||||
|
* We're in another dispatch, so we must guard against executor
|
||||||
|
* shutdown again.
|
||||||
|
*/
|
||||||
|
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||||
|
if (session == null) {
|
||||||
|
cancel(false);
|
||||||
|
rm.done();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Guard against a disposed service
|
||||||
|
*/
|
||||||
|
IRegisters service = getService();
|
||||||
|
if (service == null) {
|
||||||
|
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||||
|
"Service unavailable", null)); //$NON-NLS-1$
|
||||||
|
rm.done();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
doExecute(service, rm);
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract protected void doExecute(IRegisters registersService, DataRequestMonitor<V> rm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The session that this data access operates in.
|
* The session that this data access operates in.
|
||||||
*/
|
*/
|
||||||
|
@ -83,39 +123,17 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetBitFieldValueQuery extends Query<IBitFieldDMData> {
|
public class GetBitFieldValueQuery extends RegistersServiceQuery<IBitFieldDMData, IBitFieldDMContext> {
|
||||||
|
|
||||||
private IBitFieldDMContext fDmc;
|
|
||||||
|
|
||||||
public GetBitFieldValueQuery(IBitFieldDMContext dmc) {
|
public GetBitFieldValueQuery(IBitFieldDMContext dmc) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<IBitFieldDMData> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<IBitFieldDMData> rm) {
|
||||||
/*
|
service.getBitFieldData(
|
||||||
* Guard agains the session being disposed. If session is disposed
|
fDmc,
|
||||||
* it could mean that the executor is shut-down, which in turn could
|
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
* mean that we can't complete the RequestMonitor argument. in that
|
|
||||||
* case, cancel to notify waiting thread.
|
|
||||||
*/
|
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service not available", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
service.getBitFieldData(fDmc, new DataRequestMonitor<IBitFieldDMData>(session.getExecutor(), rm) {
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -171,50 +189,23 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SetBitFieldValueQuery extends Query<Object> {
|
public class SetBitFieldValueQuery extends RegistersServiceQuery<Object, IBitFieldDMContext> {
|
||||||
|
|
||||||
private IBitFieldDMContext fDmc;
|
|
||||||
|
|
||||||
private String fValue;
|
private String fValue;
|
||||||
|
|
||||||
private String fFormatId;
|
private String fFormatId;
|
||||||
|
|
||||||
public SetBitFieldValueQuery(IBitFieldDMContext dmc, String value, String formatId) {
|
public SetBitFieldValueQuery(IBitFieldDMContext dmc, String value, String formatId) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
fValue = value;
|
fValue = value;
|
||||||
fFormatId = formatId;
|
fFormatId = formatId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
|
||||||
/*
|
// Write the bit field using a string/format style.
|
||||||
* We're in another dispatch, so we must guard against executor
|
service.writeBitField(
|
||||||
* shutdown again.
|
fDmc, fValue, fFormatId,
|
||||||
*/
|
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guard against a disposed service
|
|
||||||
*/
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service unavailable", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Write the bit field using a string/format style.
|
|
||||||
*/
|
|
||||||
service.writeBitField(fDmc, fValue, fFormatId, new DataRequestMonitor<IBitFieldDMData>(session
|
|
||||||
.getExecutor(), rm) {
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -269,46 +260,20 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SetBitFieldValueMnemonicQuery extends Query<Object> {
|
public class SetBitFieldValueMnemonicQuery extends RegistersServiceQuery<Object, IBitFieldDMContext> {
|
||||||
|
|
||||||
IBitFieldDMContext fDmc;
|
|
||||||
|
|
||||||
IMnemonic fMnemonic;
|
IMnemonic fMnemonic;
|
||||||
|
|
||||||
public SetBitFieldValueMnemonicQuery(IBitFieldDMContext dmc, IMnemonic mnemonic) {
|
public SetBitFieldValueMnemonicQuery(IBitFieldDMContext dmc, IMnemonic mnemonic) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
fMnemonic = mnemonic;
|
fMnemonic = mnemonic;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
|
||||||
/*
|
// Write the bit field using the mnemonic style.
|
||||||
* We're in another dispatch, so we must guard against executor
|
service.writeBitField(
|
||||||
* shutdown again.
|
fDmc, fMnemonic,
|
||||||
*/
|
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guard against a disposed service
|
|
||||||
*/
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service unavailable", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Write the bit field using the mnemonic style.
|
|
||||||
*/
|
|
||||||
service.writeBitField(fDmc, fMnemonic, new DataRequestMonitor<IBitFieldDMData>(session.getExecutor(), rm) {
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -387,39 +352,16 @@ public class SyncRegisterDataAccess {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetRegisterGroupValueQuery extends Query<IRegisterGroupDMData> {
|
public class GetRegisterGroupValueQuery extends RegistersServiceQuery<IRegisterGroupDMData, IRegisterGroupDMContext> {
|
||||||
|
|
||||||
IRegisterGroupDMContext fDmc;
|
|
||||||
|
|
||||||
public GetRegisterGroupValueQuery(IRegisterGroupDMContext dmc) {
|
public GetRegisterGroupValueQuery(IRegisterGroupDMContext dmc) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<IRegisterGroupDMData> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||||
/*
|
service.getRegisterGroupData(
|
||||||
* Guard agains the session being disposed. If session is disposed
|
fDmc,
|
||||||
* it could mean that the executor is shut-down, which in turn could
|
new DataRequestMonitor<IRegisterGroupDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
* mean that we can't complete the RequestMonitor argument. in that
|
|
||||||
* case, cancel to notify waiting thread.
|
|
||||||
*/
|
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service not available", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
service.getRegisterGroupData(fDmc, new DataRequestMonitor<IRegisterGroupDMData>(session.getExecutor(), rm) {
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -467,39 +409,16 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetRegisterValueQuery extends Query<IRegisterDMData> {
|
public class GetRegisterValueQuery extends RegistersServiceQuery<IRegisterDMData, IRegisterDMContext> {
|
||||||
|
|
||||||
IRegisterDMContext fDmc;
|
|
||||||
|
|
||||||
public GetRegisterValueQuery(IRegisterDMContext dmc) {
|
public GetRegisterValueQuery(IRegisterDMContext dmc) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<IRegisterDMData> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterDMData> rm) {
|
||||||
/*
|
service.getRegisterData(
|
||||||
* Guard agains the session being disposed. If session is disposed
|
fDmc,
|
||||||
* it could mean that the executor is shut-down, which in turn could
|
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
* mean that we can't complete the RequestMonitor argument. in that
|
|
||||||
* case, cancel to notify waiting thread.
|
|
||||||
*/
|
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service not available", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
service.getRegisterData(fDmc, new DataRequestMonitor<IRegisterDMData>(session.getExecutor(), rm) {
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -547,54 +466,25 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SetRegisterValueQuery extends Query<Object> {
|
public class SetRegisterValueQuery extends RegistersServiceQuery<Object, IRegisterDMContext> {
|
||||||
|
|
||||||
private IRegisterDMContext fDmc;
|
|
||||||
|
|
||||||
private String fValue;
|
private String fValue;
|
||||||
|
|
||||||
private String fFormatId;
|
private String fFormatId;
|
||||||
|
|
||||||
public SetRegisterValueQuery(IRegisterDMContext dmc, String value, String formatId) {
|
public SetRegisterValueQuery(IRegisterDMContext dmc, String value, String formatId) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
fValue = value;
|
fValue = value;
|
||||||
fFormatId = formatId;
|
fFormatId = formatId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
|
||||||
/*
|
|
||||||
* We're in another dispatch, so we must guard against executor
|
|
||||||
* shutdown again.
|
|
||||||
*/
|
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guard against a disposed service
|
|
||||||
*/
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service unavailable", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The interface does not currently have a write function. It needs
|
|
||||||
* to and now would seem to be the time to add it.
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* Write the bit field using a string/format style.
|
* Write the bit field using a string/format style.
|
||||||
*/
|
*/
|
||||||
service.writeRegister(fDmc, fValue, fFormatId, new DataRequestMonitor<IBitFieldDMData>(session
|
service.writeRegister(
|
||||||
.getExecutor(), rm) {
|
fDmc, fValue, fFormatId,
|
||||||
|
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -648,52 +538,15 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetSupportFormatsValueQuery extends Query<Object> {
|
public class GetSupportFormatsValueQuery extends RegistersServiceQuery<String[], IFormattedDataDMContext> {
|
||||||
|
|
||||||
IFormattedDataDMContext fDmc;
|
|
||||||
|
|
||||||
public GetSupportFormatsValueQuery(IFormattedDataDMContext dmc) {
|
public GetSupportFormatsValueQuery(IFormattedDataDMContext dmc) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<String[]> rm) {
|
||||||
/*
|
service.getAvailableFormats(fDmc, rm);
|
||||||
* We're in another dispatch, so we must guard against executor
|
|
||||||
* shutdown again.
|
|
||||||
*/
|
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guard against a disposed service
|
|
||||||
*/
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service unavailable", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Write the bit field using a string/format style.
|
|
||||||
*/
|
|
||||||
service.getAvailableFormats(fDmc, new DataRequestMonitor<String[]>(session.getExecutor(), rm) {
|
|
||||||
@Override
|
|
||||||
protected void handleSuccess() {
|
|
||||||
/*
|
|
||||||
* All good set return value.
|
|
||||||
*/
|
|
||||||
rm.setData(new Object());
|
|
||||||
rm.done();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -730,7 +583,7 @@ public class SyncRegisterDataAccess {
|
||||||
* data.
|
* data.
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
return (String[]) query.get();
|
return query.get();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
assert false;
|
assert false;
|
||||||
return null;
|
return null;
|
||||||
|
@ -739,42 +592,17 @@ public class SyncRegisterDataAccess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetFormattedValueValueQuery extends Query<Object> {
|
public class GetFormattedValueValueQuery extends RegistersServiceQuery<String, IFormattedDataDMContext> {
|
||||||
|
|
||||||
private IFormattedDataDMContext fDmc;
|
|
||||||
|
|
||||||
private String fFormatId;
|
private String fFormatId;
|
||||||
|
|
||||||
public GetFormattedValueValueQuery(IFormattedDataDMContext dmc, String formatId) {
|
public GetFormattedValueValueQuery(IFormattedDataDMContext dmc, String formatId) {
|
||||||
super();
|
super(dmc);
|
||||||
fDmc = dmc;
|
|
||||||
fFormatId = formatId;
|
fFormatId = formatId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
protected void doExecute(IRegisters service, final DataRequestMonitor<String> rm) {
|
||||||
/*
|
|
||||||
* We're in another dispatch, so we must guard against executor
|
|
||||||
* shutdown again.
|
|
||||||
*/
|
|
||||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
|
||||||
if (session == null) {
|
|
||||||
cancel(false);
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Guard against a disposed service
|
|
||||||
*/
|
|
||||||
IRegisters service = getService();
|
|
||||||
if (service == null) {
|
|
||||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
|
||||||
"Service unavailable", null)); //$NON-NLS-1$
|
|
||||||
rm.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert to the proper formatting DMC then go get the formatted
|
* Convert to the proper formatting DMC then go get the formatted
|
||||||
* value.
|
* value.
|
||||||
|
@ -782,8 +610,9 @@ public class SyncRegisterDataAccess {
|
||||||
|
|
||||||
FormattedValueDMContext formDmc = service.getFormattedValueContext(fDmc, fFormatId);
|
FormattedValueDMContext formDmc = service.getFormattedValueContext(fDmc, fFormatId);
|
||||||
|
|
||||||
service.getFormattedExpressionValue(formDmc, new DataRequestMonitor<FormattedValueDMData>(session
|
service.getFormattedExpressionValue(
|
||||||
.getExecutor(), rm) {
|
formDmc,
|
||||||
|
new DataRequestMonitor<FormattedValueDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||||
@Override
|
@Override
|
||||||
protected void handleSuccess() {
|
protected void handleSuccess() {
|
||||||
/*
|
/*
|
||||||
|
@ -829,7 +658,7 @@ public class SyncRegisterDataAccess {
|
||||||
* data.
|
* data.
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
return (String) query.get();
|
return query.get();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
assert false;
|
assert false;
|
||||||
return null;
|
return null;
|
||||||
|
@ -871,7 +700,7 @@ public class SyncRegisterDataAccess {
|
||||||
* data.
|
* data.
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
return (String) query.get();
|
return query.get();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
assert false;
|
assert false;
|
||||||
return null;
|
return null;
|
||||||
|
@ -879,4 +708,106 @@ public class SyncRegisterDataAccess {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class GetRegisterGroupDataQuery extends RegistersServiceQuery<IRegisterGroupDMData, IRegisterGroupDMContext> {
|
||||||
|
|
||||||
|
public GetRegisterGroupDataQuery(IRegisterGroupDMContext dmc) {
|
||||||
|
super(dmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||||
|
service.getRegisterGroupData(fDmc, rm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegisterGroupDMData getRegisterGroupDMData(Object element) {
|
||||||
|
IRegisterGroupDMContext dmc = null;
|
||||||
|
if (element instanceof IDMVMContext) {
|
||||||
|
dmc = DMContexts.getAncestorOfType(
|
||||||
|
((IDMVMContext) element).getDMContext(),
|
||||||
|
IRegisterGroupDMContext.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
DsfSession session = DsfSession.getSession(dmc.getSessionId());
|
||||||
|
|
||||||
|
if (dmc != null && session != null) {
|
||||||
|
GetRegisterGroupDataQuery query = new GetRegisterGroupDataQuery(dmc);
|
||||||
|
session.getExecutor().execute(query);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return query.get();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class GetRegisterDataQuery extends RegistersServiceQuery<IRegisterDMData, IRegisterDMContext> {
|
||||||
|
|
||||||
|
public GetRegisterDataQuery(IRegisterDMContext dmc) {
|
||||||
|
super(dmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterDMData> rm) {
|
||||||
|
service.getRegisterData(fDmc, rm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegisterDMData getRegisterDMData(Object element) {
|
||||||
|
IRegisterDMContext dmc = null;
|
||||||
|
if (element instanceof IDMVMContext) {
|
||||||
|
dmc = DMContexts.getAncestorOfType( ((IDMVMContext) element).getDMContext(), IRegisterDMContext.class );
|
||||||
|
}
|
||||||
|
DsfSession session = DsfSession.getSession(dmc.getSessionId());
|
||||||
|
|
||||||
|
if (dmc != null && session != null) {
|
||||||
|
GetRegisterDataQuery query = new GetRegisterDataQuery(dmc);
|
||||||
|
session.getExecutor().execute(query);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return query.get();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetBitFieldQuery extends RegistersServiceQuery<IBitFieldDMData, IBitFieldDMContext> {
|
||||||
|
|
||||||
|
public GetBitFieldQuery(IBitFieldDMContext dmc) {
|
||||||
|
super(dmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doExecute(IRegisters service, final DataRequestMonitor<IBitFieldDMData> rm) {
|
||||||
|
service.getBitFieldData(fDmc, rm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBitFieldDMData getBitFieldDMData(Object element) {
|
||||||
|
IBitFieldDMContext dmc = null;
|
||||||
|
if (element instanceof IDMVMContext) {
|
||||||
|
dmc = DMContexts.getAncestorOfType( ((IDMVMContext) element).getDMContext(), IBitFieldDMContext.class );
|
||||||
|
}
|
||||||
|
DsfSession session = DsfSession.getSession(dmc.getSessionId());
|
||||||
|
|
||||||
|
if (dmc != null && session != null) {
|
||||||
|
GetBitFieldQuery query = new GetBitFieldQuery(dmc);
|
||||||
|
session.getExecutor().execute(query);
|
||||||
|
|
||||||
|
try {
|
||||||
|
return query.get();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
} catch (ExecutionException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ public interface IRegisters extends IFormattedValues {
|
||||||
|
|
||||||
/** Register group context */
|
/** Register group context */
|
||||||
public interface IRegisterGroupDMContext extends IFormattedDataDMContext {
|
public interface IRegisterGroupDMContext extends IFormattedDataDMContext {
|
||||||
public String getName();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event indicating values for the group have changed. */
|
/** Event indicating values for the group have changed. */
|
||||||
|
@ -52,7 +51,6 @@ public interface IRegisters extends IFormattedValues {
|
||||||
|
|
||||||
/** Register context */
|
/** Register context */
|
||||||
public interface IRegisterDMContext extends IFormattedDataDMContext {
|
public interface IRegisterDMContext extends IFormattedDataDMContext {
|
||||||
public String getName();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event indicating register value changed. */
|
/** Event indicating register value changed. */
|
||||||
|
@ -73,7 +71,6 @@ public interface IRegisters extends IFormattedValues {
|
||||||
|
|
||||||
/** Bit field context */
|
/** Bit field context */
|
||||||
public interface IBitFieldDMContext extends IFormattedDataDMContext {
|
public interface IBitFieldDMContext extends IFormattedDataDMContext {
|
||||||
public String getName();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Event indicating register value changed. */
|
/** Event indicating register value changed. */
|
||||||
|
|
|
@ -9,14 +9,19 @@ import java.util.List;
|
||||||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.dd.dsf.concurrent.CountingRequestMonitor;
|
||||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||||
|
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||||
|
import org.eclipse.dd.dsf.concurrent.Query;
|
||||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
||||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
|
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
|
||||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
|
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||||
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
||||||
|
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
|
||||||
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
|
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
|
||||||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||||
import org.eclipse.dd.dsf.service.DsfSession;
|
import org.eclipse.dd.dsf.service.DsfSession;
|
||||||
|
@ -189,9 +194,19 @@ public class MIRegistersTest extends BaseTestCase {
|
||||||
public void getRegisterGroups() throws Throwable {
|
public void getRegisterGroups() throws Throwable {
|
||||||
final IRegisterGroupDMContext regGroupsDMC = getRegisterGroup();
|
final IRegisterGroupDMContext regGroupsDMC = getRegisterGroup();
|
||||||
|
|
||||||
|
Query<IRegisterGroupDMData> query = new Query<IRegisterGroupDMData>() {
|
||||||
|
@Override
|
||||||
|
protected void execute(DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||||
|
fRegService.getRegisterGroupData(regGroupsDMC, rm);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
fSession.getExecutor().execute(query);
|
||||||
|
|
||||||
|
IRegisterGroupDMData data = query.get();
|
||||||
|
|
||||||
assertTrue("The name of the main group should be: General Registers instead of: " +
|
assertTrue("The name of the main group should be: General Registers instead of: " +
|
||||||
regGroupsDMC.getName(),
|
data.getName(),
|
||||||
regGroupsDMC.getName().equals("General Registers"));
|
data.getName().equals("General Registers"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -211,8 +226,36 @@ public class MIRegistersTest extends BaseTestCase {
|
||||||
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
|
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
|
||||||
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
|
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
|
||||||
List<String> regNames = Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7");
|
List<String> regNames = Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7");
|
||||||
for(IRegisterDMContext reg: regDMCs){
|
|
||||||
String regName = reg.getName();
|
Query<IRegisterDMData[]> query = new Query<IRegisterDMData[]>() {
|
||||||
|
@Override
|
||||||
|
protected void execute(DataRequestMonitor<IRegisterDMData[]> rm) {
|
||||||
|
final IRegisterDMData[] datas = new IRegisterDMData[regDMCs.length];
|
||||||
|
rm.setData(datas);
|
||||||
|
final CountingRequestMonitor countingRm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm);
|
||||||
|
countingRm.setDoneCount(regDMCs.length);
|
||||||
|
for (int i = 0; i < regDMCs.length; i++) {
|
||||||
|
final int index = i;
|
||||||
|
fRegService.getRegisterData(
|
||||||
|
regDMCs[index],
|
||||||
|
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), countingRm) {
|
||||||
|
@Override
|
||||||
|
protected void handleSuccess() {
|
||||||
|
datas[index] = getData();
|
||||||
|
countingRm.done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fSession.getExecutor().execute(query);
|
||||||
|
|
||||||
|
IRegisterDMData[] datas = query.get();
|
||||||
|
|
||||||
|
for(IRegisterDMData data: datas){
|
||||||
|
String regName = data.getName();
|
||||||
Assert.assertFalse("GDB does not support register name: " + regName, !regNames.contains(regName));
|
Assert.assertFalse("GDB does not support register name: " + regName, !regNames.contains(regName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue