1
0
Fork 0
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:
Pawel Piech 2008-03-31 17:00:28 +00:00
parent 5542247e15
commit deabab9f21
6 changed files with 404 additions and 394 deletions

View file

@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
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.datamodel.DMContexts;
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.IMnemonic;
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.ui.viewmodel.IDebugVMConstants;
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
@ -116,32 +118,22 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
}
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);
StringBuffer exprBuf = new StringBuffer();
IRegisterGroupDMContext groupDmc =
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IRegisterGroupDMContext.class);
if (groupDmc != null) {
if (groupData != null && registerData != null && bitFieldData != null) {
StringBuffer exprBuf = new StringBuffer();
exprBuf.append("$$\""); //$NON-NLS-1$
exprBuf.append(groupDmc.getName());
exprBuf.append(groupData.getName());
exprBuf.append('"');
}
IRegisterDMContext registerDmc =
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IRegisterDMContext.class);
if (registerDmc != null) {
exprBuf.append('$');
exprBuf.append(registerDmc.getName());
}
IBitFieldDMContext bitFieldDmc =
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IBitFieldDMContext.class);
if (bitFieldDmc != null) {
exprBuf.append(registerData.getName());
exprBuf.append('.');
exprBuf.append(bitFieldDmc.getName());
exprBuf.append(bitFieldData.getName());
return exprBuf.toString();
}
return exprBuf.toString();
return null;
}
}
@ -512,7 +504,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
}
@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)) {
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
rm.done();
@ -526,13 +518,31 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
return;
}
String bitFieldName = parseExpressionForBitFieldName(expression.getExpressionText());
if (dmc.getName().equals(bitFieldName)) {
rm.setData(Boolean.TRUE);
} else {
rm.setData(Boolean.FALSE);
final String bitFieldName = parseExpressionForBitFieldName(expression.getExpressionText());
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
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();
}
});
} 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();
}
rm.done();
}
public boolean canParseExpression(IExpression expression) {

View file

@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
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.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext;
@ -102,13 +103,11 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
}
public String createWatchExpression(Object element) throws CoreException {
RegisterGroupVMC registerVmc = ((RegisterGroupVMC)element);
StringBuffer exprBuf = new StringBuffer();
IRegisterGroupDMContext groupDmc = DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterGroupDMContext.class);
if (groupDmc != null) {
IRegisterGroupDMData groupData = fSyncRegisterDataAccess.getRegisterGroupDMData(element);
if (groupData != null) {
StringBuffer exprBuf = new StringBuffer();
exprBuf.append("$$\""); //$NON-NLS-1$
exprBuf.append(groupDmc.getName());
exprBuf.append(groupData.getName());
exprBuf.append('"');
return exprBuf.toString();
}
@ -328,7 +327,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
}
@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)) {
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
rm.done();
@ -341,13 +340,31 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
return;
}
String groupName = parseExpressionForGroupName(expression.getExpressionText());
if (dmc.getName().equals(groupName)) {
rm.setData(Boolean.TRUE);
} else {
rm.setData(Boolean.FALSE);
final String groupName = parseExpressionForGroupName(expression.getExpressionText());
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
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();
}
});
} 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();
}
rm.done();
}
@Override

View file

@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
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.datamodel.DMContexts;
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.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.IRegisterGroupDMData;
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.numberformat.IFormattedValuePreferenceStore;
@ -114,22 +115,15 @@ public class RegisterVMNode extends AbstractExpressionVMNode
}
public String createWatchExpression(Object element) throws CoreException {
RegisterVMC registerVmc = ((RegisterVMC)element);
StringBuffer exprBuf = new StringBuffer();
IRegisterGroupDMContext groupDmc =
DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterGroupDMContext.class);
if (groupDmc != null) {
IRegisterGroupDMData groupData = fSyncRegisterDataAccess.getRegisterGroupDMData(element);
IRegisterDMData registerData = fSyncRegisterDataAccess.getRegisterDMData(element);
if (groupData != null && registerData != null) {
StringBuffer exprBuf = new StringBuffer();
exprBuf.append("$$\""); //$NON-NLS-1$
exprBuf.append(groupDmc.getName());
exprBuf.append(groupData.getName());
exprBuf.append('"');
}
IRegisterDMContext registerDmc =
DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterDMContext.class);
if (registerDmc != null) {
exprBuf.append('$');
exprBuf.append(registerDmc.getName());
exprBuf.append(registerData.getName());
return exprBuf.toString();
}
@ -485,7 +479,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode
}
@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)) {
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
rm.done();
@ -498,13 +492,31 @@ public class RegisterVMNode extends AbstractExpressionVMNode
return;
}
String regName = parseExpressionForRegisterName(expression.getExpressionText());
if (dmc.getName().equals(regName)) {
rm.setData(Boolean.TRUE);
} else {
rm.setData(Boolean.FALSE);
final String regName = parseExpressionForRegisterName(expression.getExpressionText());
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
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();
}
});
} 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();
}
rm.done();
}
@Override

View file

@ -17,6 +17,7 @@ import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
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.ThreadSafe;
import org.eclipse.dd.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
@ -43,6 +44,45 @@ import org.osgi.util.tracker.ServiceTracker;
@ThreadSafeAndProhibitedFromDsfExecutor("fSession#getExecutor")
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.
*/
@ -83,48 +123,26 @@ public class SyncRegisterDataAccess {
}
}
public class GetBitFieldValueQuery extends Query<IBitFieldDMData> {
private IBitFieldDMContext fDmc;
public class GetBitFieldValueQuery extends RegistersServiceQuery<IBitFieldDMData, IBitFieldDMContext> {
public GetBitFieldValueQuery(IBitFieldDMContext dmc) {
super();
fDmc = dmc;
super(dmc);
}
@Override
protected void execute(final DataRequestMonitor<IBitFieldDMData> rm) {
/*
* Guard agains the session being disposed. If session is disposed
* it could mean that the executor is shut-down, which in turn could
* 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
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData());
rm.done();
}
});
protected void doExecute(IRegisters service, final DataRequestMonitor<IBitFieldDMData> rm) {
service.getBitFieldData(
fDmc,
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData());
rm.done();
}
});
}
}
@ -171,59 +189,32 @@ public class SyncRegisterDataAccess {
}
}
public class SetBitFieldValueQuery extends Query<Object> {
private IBitFieldDMContext fDmc;
public class SetBitFieldValueQuery extends RegistersServiceQuery<Object, IBitFieldDMContext> {
private String fValue;
private String fFormatId;
public SetBitFieldValueQuery(IBitFieldDMContext dmc, String value, String formatId) {
super();
fDmc = dmc;
super(dmc);
fValue = value;
fFormatId = formatId;
}
@Override
protected void execute(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;
}
/*
* Write the bit field using a string/format style.
*/
service.writeBitField(fDmc, fValue, fFormatId, new DataRequestMonitor<IBitFieldDMData>(session
.getExecutor(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(new Object());
rm.done();
}
});
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
// Write the bit field using a string/format style.
service.writeBitField(
fDmc, fValue, fFormatId,
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(new Object());
rm.done();
}
});
}
}
@ -269,55 +260,29 @@ public class SyncRegisterDataAccess {
}
}
public class SetBitFieldValueMnemonicQuery extends Query<Object> {
IBitFieldDMContext fDmc;
public class SetBitFieldValueMnemonicQuery extends RegistersServiceQuery<Object, IBitFieldDMContext> {
IMnemonic fMnemonic;
public SetBitFieldValueMnemonicQuery(IBitFieldDMContext dmc, IMnemonic mnemonic) {
super();
fDmc = dmc;
super(dmc);
fMnemonic = mnemonic;
}
@Override
protected void execute(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;
}
/*
* Write the bit field using the mnemonic style.
*/
service.writeBitField(fDmc, fMnemonic, new DataRequestMonitor<IBitFieldDMData>(session.getExecutor(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(new Object());
rm.done();
}
});
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
// Write the bit field using the mnemonic style.
service.writeBitField(
fDmc, fMnemonic,
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(new Object());
rm.done();
}
});
}
}
@ -387,48 +352,25 @@ public class SyncRegisterDataAccess {
return null;
}
public class GetRegisterGroupValueQuery extends Query<IRegisterGroupDMData> {
IRegisterGroupDMContext fDmc;
public class GetRegisterGroupValueQuery extends RegistersServiceQuery<IRegisterGroupDMData, IRegisterGroupDMContext> {
public GetRegisterGroupValueQuery(IRegisterGroupDMContext dmc) {
super();
fDmc = dmc;
super(dmc);
}
@Override
protected void execute(final DataRequestMonitor<IRegisterGroupDMData> rm) {
/*
* Guard agains the session being disposed. If session is disposed
* it could mean that the executor is shut-down, which in turn could
* 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
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData());
rm.done();
}
});
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterGroupDMData> rm) {
service.getRegisterGroupData(
fDmc,
new DataRequestMonitor<IRegisterGroupDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData());
rm.done();
}
});
}
}
@ -467,48 +409,25 @@ public class SyncRegisterDataAccess {
}
}
public class GetRegisterValueQuery extends Query<IRegisterDMData> {
IRegisterDMContext fDmc;
public class GetRegisterValueQuery extends RegistersServiceQuery<IRegisterDMData, IRegisterDMContext> {
public GetRegisterValueQuery(IRegisterDMContext dmc) {
super();
fDmc = dmc;
super(dmc);
}
@Override
protected void execute(final DataRequestMonitor<IRegisterDMData> rm) {
/*
* Guard agains the session being disposed. If session is disposed
* it could mean that the executor is shut-down, which in turn could
* 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
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData());
rm.done();
}
});
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterDMData> rm) {
service.getRegisterData(
fDmc,
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData());
rm.done();
}
});
}
}
@ -547,63 +466,34 @@ public class SyncRegisterDataAccess {
}
}
public class SetRegisterValueQuery extends Query<Object> {
private IRegisterDMContext fDmc;
public class SetRegisterValueQuery extends RegistersServiceQuery<Object, IRegisterDMContext> {
private String fValue;
private String fFormatId;
public SetRegisterValueQuery(IRegisterDMContext dmc, String value, String formatId) {
super();
fDmc = dmc;
super(dmc);
fValue = value;
fFormatId = formatId;
}
@Override
protected void execute(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.
*/
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
/*
* Write the bit field using a string/format style.
*/
service.writeRegister(fDmc, fValue, fFormatId, new DataRequestMonitor<IBitFieldDMData>(session
.getExecutor(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(new Object());
rm.done();
}
});
service.writeRegister(
fDmc, fValue, fFormatId,
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(new Object());
rm.done();
}
});
}
}
@ -648,52 +538,15 @@ public class SyncRegisterDataAccess {
}
}
public class GetSupportFormatsValueQuery extends Query<Object> {
IFormattedDataDMContext fDmc;
public class GetSupportFormatsValueQuery extends RegistersServiceQuery<String[], IFormattedDataDMContext> {
public GetSupportFormatsValueQuery(IFormattedDataDMContext dmc) {
super();
fDmc = dmc;
super(dmc);
}
@Override
protected void execute(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;
}
/*
* 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();
}
});
protected void doExecute(IRegisters service, final DataRequestMonitor<String[]> rm) {
service.getAvailableFormats(fDmc, rm);
}
}
@ -730,7 +583,7 @@ public class SyncRegisterDataAccess {
* data.
*/
try {
return (String[]) query.get();
return query.get();
} catch (InterruptedException e) {
assert false;
return null;
@ -739,42 +592,17 @@ public class SyncRegisterDataAccess {
}
}
public class GetFormattedValueValueQuery extends Query<Object> {
private IFormattedDataDMContext fDmc;
public class GetFormattedValueValueQuery extends RegistersServiceQuery<String, IFormattedDataDMContext> {
private String fFormatId;
public GetFormattedValueValueQuery(IFormattedDataDMContext dmc, String formatId) {
super();
fDmc = dmc;
super(dmc);
fFormatId = formatId;
}
@Override
protected void execute(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;
}
protected void doExecute(IRegisters service, final DataRequestMonitor<String> rm) {
/*
* Convert to the proper formatting DMC then go get the formatted
* value.
@ -782,17 +610,18 @@ public class SyncRegisterDataAccess {
FormattedValueDMContext formDmc = service.getFormattedValueContext(fDmc, fFormatId);
service.getFormattedExpressionValue(formDmc, new DataRequestMonitor<FormattedValueDMData>(session
.getExecutor(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData().getFormattedValue());
rm.done();
}
});
service.getFormattedExpressionValue(
formDmc,
new DataRequestMonitor<FormattedValueDMData>(ImmediateExecutor.getInstance(), rm) {
@Override
protected void handleSuccess() {
/*
* All good set return value.
*/
rm.setData(getData().getFormattedValue());
rm.done();
}
});
}
}
@ -829,7 +658,7 @@ public class SyncRegisterDataAccess {
* data.
*/
try {
return (String) query.get();
return query.get();
} catch (InterruptedException e) {
assert false;
return null;
@ -871,7 +700,7 @@ public class SyncRegisterDataAccess {
* data.
*/
try {
return (String) query.get();
return query.get();
} catch (InterruptedException e) {
assert false;
return null;
@ -879,4 +708,106 @@ public class SyncRegisterDataAccess {
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;
}
}

View file

@ -32,7 +32,6 @@ public interface IRegisters extends IFormattedValues {
/** Register group context */
public interface IRegisterGroupDMContext extends IFormattedDataDMContext {
public String getName();
}
/** Event indicating values for the group have changed. */
@ -52,7 +51,6 @@ public interface IRegisters extends IFormattedValues {
/** Register context */
public interface IRegisterDMContext extends IFormattedDataDMContext {
public String getName();
}
/** Event indicating register value changed. */
@ -73,7 +71,6 @@ public interface IRegisters extends IFormattedValues {
/** Bit field context */
public interface IBitFieldDMContext extends IFormattedDataDMContext {
public String getName();
}
/** Event indicating register value changed. */

View file

@ -9,14 +9,19 @@ import java.util.List;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.core.runtime.IStatus;
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.ImmediateExecutor;
import org.eclipse.dd.dsf.concurrent.Query;
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
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.FormattedValueDMData;
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.IRegisterGroupDMData;
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.dd.dsf.service.DsfServicesTracker;
import org.eclipse.dd.dsf.service.DsfSession;
@ -189,9 +194,19 @@ public class MIRegistersTest extends BaseTestCase {
public void getRegisterGroups() throws Throwable {
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: " +
regGroupsDMC.getName(),
regGroupsDMC.getName().equals("General Registers"));
data.getName(),
data.getName().equals("General Registers"));
}
@Test
@ -211,8 +226,36 @@ public class MIRegistersTest extends BaseTestCase {
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
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");
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));
}
}