diff options
author | eutarass | 2008-08-19 00:04:04 +0000 |
---|---|---|
committer | eutarass | 2008-08-19 00:04:04 +0000 |
commit | bdae14cb1f9f426b597f0f77046278c3022a8fc3 (patch) | |
tree | 766f113cf5375fe4c2c7373b02272ca196442ccf | |
parent | cd65d0372df40215f8ae726b3e7876a36faf2c38 (diff) | |
download | org.eclipse.tcf-bdae14cb1f9f426b597f0f77046278c3022a8fc3.tar.gz org.eclipse.tcf-bdae14cb1f9f426b597f0f77046278c3022a8fc3.tar.xz org.eclipse.tcf-bdae14cb1f9f426b597f0f77046278c3022a8fc3.zip |
TCF Agent: debug services now support and use application data types information (work in progress)
Multiple minor bug fixes
4 files changed, 51 insertions, 2 deletions
diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenExpressions.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenExpressions.java index 2b804e750..616fb2d4e 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenExpressions.java +++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenExpressions.java @@ -4,10 +4,13 @@ import java.util.HashMap; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IExpressionManager; +import org.eclipse.debug.core.IExpressionsListener; import org.eclipse.debug.core.model.IExpression; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.tm.internal.tcf.debug.ui.Activator; import org.eclipse.tm.tcf.protocol.IChannel; import org.eclipse.tm.tcf.protocol.IToken; +import org.eclipse.tm.tcf.protocol.Protocol; import org.eclipse.tm.tcf.services.IExpressions; public class TCFChildrenExpressions extends TCFChildren { @@ -15,14 +18,38 @@ public class TCFChildrenExpressions extends TCFChildren { private final TCFNodeStackFrame node; private final HashMap<IExpression,TCFNodeExpression> map = new HashMap<IExpression,TCFNodeExpression>(); + + private final IExpressionsListener listener = new IExpressionsListener() { + + public void expressionsAdded(IExpression[] expressions) { + expressionsRemoved(expressions); + } + + public void expressionsChanged(IExpression[] expressions) { + expressionsRemoved(expressions); + } + + public void expressionsRemoved(IExpression[] expressions) { + Protocol.invokeLater(new Runnable() { + public void run() { + reset(); + node.parent.addModelDelta(IModelDelta.CONTENT); + } + }); + } + }; TCFChildrenExpressions(TCFNodeStackFrame node) { super(node.model.getLaunch().getChannel(), 32); this.node = node; + IExpressionManager m = DebugPlugin.getDefault().getExpressionManager(); + m.addExpressionListener(listener); } @Override void dispose(String id) { + IExpressionManager m = DebugPlugin.getDefault().getExpressionManager(); + m.removeExpressionListener(listener); TCFNode n = node.model.getNode(id); super.dispose(id); if (n instanceof TCFNodeExpression) { diff --git a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestExpressions.java b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestExpressions.java index 31eb15494..d8c2960fb 100644 --- a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestExpressions.java +++ b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestExpressions.java @@ -22,7 +22,8 @@ import org.eclipse.tm.tcf.services.IExpressions; import org.eclipse.tm.tcf.services.IRunControl; import org.eclipse.tm.tcf.services.IStackTrace; -class TestExpressions implements ITCFTest, IRunControl.RunControlListener, IExpressions.ExpressionsListener { +class TestExpressions implements ITCFTest, + IRunControl.RunControlListener, IExpressions.ExpressionsListener, IBreakpoints.BreakpointsListener { private final TCFTestSuite test_suite; private final IDiagnostics diag; @@ -62,6 +63,7 @@ class TestExpressions implements ITCFTest, IRunControl.RunControlListener, IExpr else { expr.addListener(this); rc.addListener(this); + bp.addListener(this); diag.getTestList(new IDiagnostics.DoneGetTestList() { public void doneGetTestList(IToken token, Throwable error, String[] list) { assert test_suite.isActive(TestExpressions.this); @@ -279,6 +281,7 @@ class TestExpressions implements ITCFTest, IRunControl.RunControlListener, IExpr private void exit(Throwable x) { if (!test_suite.isActive(this)) return; expr.removeListener(this); + bp.removeListener(this); rc.removeListener(this); test_suite.done(this, x); } @@ -325,4 +328,19 @@ class TestExpressions implements ITCFTest, IRunControl.RunControlListener, IExpr public void valueChanged(String id) { } + + //--------------------------- Breakpoints listener ---------------------------// + + public void breakpointStatusChanged(String id, Map<String, Object> status) { + if (id.equals(bp_id)) { + String s = (String)status.get(IBreakpoints.STATUS_ERROR); + if (s != null) exit(new Exception(s)); + } + } + + public void contextAdded(Map<String, Object>[] bps) { + } + + public void contextChanged(Map<String, Object>[] bps) { + } } diff --git a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestFileSystem.java b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestFileSystem.java index c632c140b..cffd0c5dc 100644 --- a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestFileSystem.java +++ b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestFileSystem.java @@ -206,7 +206,7 @@ class TestFileSystem implements ITCFTest, IFileSystem.DoneStat, private void error(final Throwable x) { Protocol.invokeLater(new Runnable() { public void run() { - error(x); + exit(x); } }); } diff --git a/plugins/org.eclipse.tm.tcf/src/org/eclipse/tm/tcf/util/TCFDataCache.java b/plugins/org.eclipse.tm.tcf/src/org/eclipse/tm/tcf/util/TCFDataCache.java index 71f46beb9..e9cb43150 100644 --- a/plugins/org.eclipse.tm.tcf/src/org/eclipse/tm/tcf/util/TCFDataCache.java +++ b/plugins/org.eclipse.tm.tcf/src/org/eclipse/tm/tcf/util/TCFDataCache.java @@ -78,6 +78,7 @@ public abstract class TCFDataCache<V> implements Runnable { * It is responsibility of clients to check if the state change was one they are waiting for. */ public void run() { + assert Protocol.isDispatchThread(); if (waiting_list.isEmpty()) return; Runnable[] arr = waiting_list.toArray(new Runnable[waiting_list.size()]); waiting_list.clear(); @@ -138,6 +139,7 @@ public abstract class TCFDataCache<V> implements Runnable { * @param data - up-to-date data object */ public void reset(V data) { + assert Protocol.isDispatchThread(); if (command != null) { command.cancel(); command = null; @@ -152,6 +154,7 @@ public abstract class TCFDataCache<V> implements Runnable { * Invalidate the cache. If retrieval is in progress - let it continue. */ public void reset() { + assert Protocol.isDispatchThread(); error = null; valid = false; data = null; @@ -162,6 +165,7 @@ public abstract class TCFDataCache<V> implements Runnable { * Force cache to invalid state, cancel pending data retrieval if any. */ public void cancel() { + assert Protocol.isDispatchThread(); if (command != null) { command.cancel(); command = null; |