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.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;

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.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) {

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.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) {

View file

@ -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;
}
} }

View file

@ -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. */

View file

@ -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));
} }
} }