1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fixed update problem in Debug view and expression view (bug 186041).

This commit is contained in:
Pawel Piech 2007-05-08 21:46:40 +00:00
parent b5503f43ae
commit 3f0952d28b
2 changed files with 30 additions and 18 deletions

View file

@ -89,7 +89,7 @@ public abstract class AbstractExpressionLayoutNode<V extends IDMData> extends Ab
protected void getElementForExpressionPart(final IChildrenUpdate update, final String expressionPartText, final DataRequestMonitor<Object> rm) { protected void getElementForExpressionPart(final IChildrenUpdate update, final String expressionPartText, final DataRequestMonitor<Object> rm) {
updateElements(new VMElementsUpdate( updateElements(new VMElementsUpdate(
update, -1, -1, update, -1, -1,
new DataRequestMonitor<List<Object>>(getSession().getExecutor(), rm) { new DataRequestMonitor<List<Object>>(getExecutor(), rm) {
@Override @Override
protected void handleOK() { protected void handleOK() {
if (getData().size() == 0) { if (getData().size() == 0) {

View file

@ -161,34 +161,46 @@ abstract public class AbstractVMProvider implements IVMProvider
if (node.getChildLayoutNodes().length == 0) { if (node.getChildLayoutNodes().length == 0) {
for (IHasChildrenUpdate update : updates) { for (IHasChildrenUpdate update : updates) {
update.setHasChilren(false); update.setHasChilren(false);
update.done();
} }
return; return;
} }
// Create a matrix of element updates:
// The first dimension "i" is the list of children updates that came from the viewer.
// For each of these updates, there are "j" number of elment updates corresponding
// to the number of child layout nodes in this node.
// Each children update from the viewer is complete when all the child layout nodes
// fill in their elements update.
// Once the matrix is constructed, the child layout nodes are given the list of updates
// equal to the updates requested by the viewer.
VMHasElementsUpdate[][] elementsUpdates = VMHasElementsUpdate[][] elementsUpdates =
new VMHasElementsUpdate[node.getChildLayoutNodes().length][updates.length]; new VMHasElementsUpdate[node.getChildLayoutNodes().length][updates.length];
for (int i = 0; i < updates.length; i ++) for (int i = 0; i < updates.length; i ++)
{ {
final IHasChildrenUpdate update = updates[i]; final IHasChildrenUpdate update = updates[i];
final MultiRequestMonitor<DataRequestMonitor<Boolean>> hasChildrenMultiRequestMon =
new MultiRequestMonitor<DataRequestMonitor<Boolean>>(getExecutor(), null) {
@Override
protected void handleCompleted() {
// Status is OK, only if all request monitors are OK.
if (getStatus().isOK()) {
boolean isContainer = false;
for (DataRequestMonitor<Boolean> hasElementsDone : getRequestMonitors()) {
isContainer |= hasElementsDone.getStatus().isOK() &&
hasElementsDone.getData().booleanValue();
}
update.setHasChilren(isContainer);
} else {
update.setStatus(getStatus());
}
update.done();
}
};
for (int j = 0; j < node.getChildLayoutNodes().length; j++) for (int j = 0; j < node.getChildLayoutNodes().length; j++)
{ {
final MultiRequestMonitor<DataRequestMonitor<Boolean>> hasChildrenMultiRequestMon =
new MultiRequestMonitor<DataRequestMonitor<Boolean>>(getExecutor(), null) {
@Override
protected void handleCompleted() {
// Status is OK, only if all request monitors are OK.
if (getStatus().isOK()) {
boolean isContainer = false;
for (DataRequestMonitor<Boolean> hasElementsDone : getRequestMonitors()) {
isContainer |= hasElementsDone.getStatus().isOK() &&
hasElementsDone.getData().booleanValue();
}
update.setHasChilren(isContainer);
update.done();
}
}
};
elementsUpdates[j][i] = new VMHasElementsUpdate( elementsUpdates[j][i] = new VMHasElementsUpdate(
update, update,
hasChildrenMultiRequestMon.add( hasChildrenMultiRequestMon.add(