diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java index 97fc4579d65..c559cbd528c 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java @@ -26,7 +26,6 @@ import org.eclipse.cdt.dsf.concurrent.DsfExecutor; import org.eclipse.cdt.dsf.concurrent.DsfRunnable; import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants; import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor; -import org.eclipse.cdt.dsf.concurrent.MultiRequestMonitor; import org.eclipse.cdt.dsf.concurrent.RequestMonitor; import org.eclipse.cdt.dsf.datamodel.DMContexts; import org.eclipse.cdt.dsf.datamodel.IDMContext; @@ -891,36 +890,36 @@ public class VariableVMNode extends AbstractExpressionVMNode // Create the MultiRequestMonitor to handle completion of the set of getModelData() calls. - final MultiRequestMonitor> mrm = - new MultiRequestMonitor>(dsfExecutor, null) { - @Override - public void handleCompleted() { - // Now that all the calls to getModelData() are complete, we create an - // IExpressionDMContext object for each local variable name, saving them all - // in an array. + final CountingRequestMonitor crm = new CountingRequestMonitor(dsfExecutor, null) { + @Override + public void handleCompleted() { + // Now that all the calls to getModelData() are complete, we create an + // IExpressionDMContext object for each local variable name, saving them all + // in an array. - if (!isSuccess()) { - handleFailedUpdate(update); - return; - } - - IExpressionDMContext[] expressionDMCs = new IExpressionDMContext[localsDMData.size()]; - - int i = 0; - - for (IVariableDMData localDMData : localsDMData) { - expressionDMCs[i++] = expressionService.createExpression(frameDmc, localDMData.getName()); - } - - // Lastly, we fill the update from the array of view model context objects - // that reference the ExpressionDMC objects for the local variables. This is - // the last code to run for a given call to updateElementsInSessionThread(). - // We can now leave anonymous-inner-class hell. - - fillUpdateWithVMCs(update, expressionDMCs); - update.done(); + if (!isSuccess()) { + handleFailedUpdate(update); + return; } + + IExpressionDMContext[] expressionDMCs = new IExpressionDMContext[localsDMData.size()]; + + int i = 0; + + for (IVariableDMData localDMData : localsDMData) { + expressionDMCs[i++] = expressionService.createExpression(frameDmc, localDMData.getName()); + } + + // Lastly, we fill the update from the array of view model context objects + // that reference the ExpressionDMC objects for the local variables. This is + // the last code to run for a given call to updateElementsInSessionThread(). + // We can now leave anonymous-inner-class hell. + + fillUpdateWithVMCs(update, expressionDMCs); + update.done(); + } }; + int countRM = 0; // Perform a set of getModelData() calls, one for each local variable's data model // context object. In the handleCompleted() method of the DataRequestMonitor, add the @@ -932,14 +931,14 @@ public class VariableVMNode extends AbstractExpressionVMNode @Override public void handleCompleted() { localsDMData.add(getData()); - mrm.requestMonitorDone(this); + crm.done(); } }; - mrm.add(rm); - stackFrameService.getVariableData(localDMC, rm); + countRM++; } + crm.setDoneCount(countRM); } }; diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMContentProviderStrategy.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMContentProviderStrategy.java index 11da061e88f..6ef04489195 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMContentProviderStrategy.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMContentProviderStrategy.java @@ -19,7 +19,6 @@ import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.MultiRequestMonitor; -import org.eclipse.cdt.dsf.concurrent.RequestMonitor; import org.eclipse.cdt.dsf.ui.concurrent.ViewerCountingRequestMonitor; import org.eclipse.cdt.dsf.ui.concurrent.ViewerDataRequestMonitor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; @@ -261,30 +260,32 @@ public class DefaultVMContentProviderStrategy implements IElementContentProvider // Get the mapping of all the counts. final Integer[] counts = new Integer[childNodes.length]; - final MultiRequestMonitor childrenCountMultiReqMon = new MultiRequestMonitor( - getVMProvider().getExecutor(), rm) { + final CountingRequestMonitor crm = new CountingRequestMonitor(getVMProvider().getExecutor(), rm) { @Override protected void handleSuccess() { rm.setData(counts); rm.done(); } }; + int countRM = 0; for (int i = 0; i < childNodes.length; i++) { final int nodeIndex = i; getVMProvider().updateNode( childNodes[i], - new VMChildrenCountUpdate(update, childrenCountMultiReqMon.add(new ViewerDataRequestMonitor( + new VMChildrenCountUpdate(update, new ViewerDataRequestMonitor( getVMProvider().getExecutor(), update) { @Override protected void handleCompleted() { if (isSuccess()) { counts[nodeIndex] = getData(); } - childrenCountMultiReqMon.requestMonitorDone(this); + crm.done(); } - }))); + })); + countRM++; } + crm.setDoneCount(countRM); } /** diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java index 33be4cd23c3..9c3287f2a7a 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/DefaultVMModelProxyStrategy.java @@ -20,7 +20,6 @@ import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DsfRunnable; import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants; -import org.eclipse.cdt.dsf.concurrent.MultiRequestMonitor; import org.eclipse.cdt.dsf.concurrent.RequestMonitor; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.ListenerList; @@ -645,8 +644,7 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { if (calculdateOffsets) { final Integer[] counts = new Integer[childNodes.length]; - final MultiRequestMonitor childrenCountMultiRequestMon = - new MultiRequestMonitor(getVMProvider().getExecutor(), rm) { + final CountingRequestMonitor crm = new CountingRequestMonitor(getVMProvider().getExecutor(), rm) { @Override protected void handleSuccess() { Map data = new HashMap(); @@ -660,7 +658,8 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { rm.setData(data); rm.done(); } - }; + }; + int countRM = 0; for (int i = 0; i < childNodes.length; i++) { final int nodeIndex = i; @@ -668,17 +667,18 @@ public class DefaultVMModelProxyStrategy implements IVMModelProxy { childNodes[i], new VMChildrenCountUpdate( delta, getVMProvider().getPresentationContext(), - childrenCountMultiRequestMon.add( - new DataRequestMonitor(getVMProvider().getExecutor(), rm) { + new DataRequestMonitor(getVMProvider().getExecutor(), crm) { @Override protected void handleCompleted() { counts[nodeIndex] = getData(); - childrenCountMultiRequestMon.requestMonitorDone(this); + crm.done(); } - }) + } ) ); + countRM++; } + crm.setDoneCount(countRM); } else { Map data = new HashMap(); for (int i = 0; i < childNodes.length; i++) {