From a1242031aae9041b8a1c03fe32553456cf377f43 Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Fri, 15 Feb 2008 01:09:36 +0000 Subject: [PATCH] [208921] Fix to return arguments and locals for IStack.getLocals(). --- .../eclipse/dd/dsf/debug/service/IStack.java | 2 +- .../org/eclipse/dd/mi/service/MIStack.java | 31 +++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java index 9b88df3a679..24a8e5c39ee 100644 --- a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java +++ b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IStack.java @@ -99,7 +99,7 @@ public interface IStack extends IDMService { void getArguments(IFrameDMContext frameCtx, DataRequestMonitor rm); /** - * Retrieves variables local to the stack frame. + * Retrieves variables local to the stack frame, including arguments. */ void getLocals(IFrameDMContext frameCtx, DataRequestMonitor rm); diff --git a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java index f18f53765ac..59582892581 100644 --- a/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java +++ b/plugins/org.eclipse.dd.mi/src/org/eclipse/dd/mi/service/MIStack.java @@ -11,13 +11,17 @@ *******************************************************************************/ package org.eclipse.dd.mi.service; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Hashtable; +import java.util.List; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.Addr32; import org.eclipse.cdt.utils.Addr64; 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.RequestMonitor; import org.eclipse.dd.dsf.datamodel.AbstractDMContext; @@ -512,13 +516,36 @@ public class MIStack extends AbstractDsfService public void getLocals(final IFrameDMContext frameDmc, final DataRequestMonitor rm) { + + final List localsList = new ArrayList(); + + final CountingRequestMonitor countingRm = new CountingRequestMonitor(getExecutor(), rm) { + @Override + protected void handleOK() { + rm.setData( localsList.toArray(new IVariableDMContext[localsList.size()]) ); + rm.done(); + } + }; + countingRm.setDoneCount(2); + + getArguments( + frameDmc, + new DataRequestMonitor(getExecutor(), countingRm) { + @Override + protected void handleOK() { + localsList.addAll( Arrays.asList(getData()) ); + countingRm.done(); + } + }); + fRunControl.getCache().execute( new MIStackListLocals(frameDmc, true), new DataRequestMonitor(getExecutor(), rm) { @Override protected void handleOK() { - rm.setData(makeVariableDMCs(frameDmc, MIVariableDMC.Type.LOCAL, getData().getLocals().length)); - rm.done(); + localsList.addAll( Arrays.asList( + makeVariableDMCs(frameDmc, MIVariableDMC.Type.LOCAL, getData().getLocals().length)) ); + countingRm.done(); } }); }