Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreutarass2008-08-19 00:04:04 +0000
committereutarass2008-08-19 00:04:04 +0000
commitbdae14cb1f9f426b597f0f77046278c3022a8fc3 (patch)
tree766f113cf5375fe4c2c7373b02272ca196442ccf
parentcd65d0372df40215f8ae726b3e7876a36faf2c38 (diff)
downloadorg.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
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenExpressions.java27
-rw-r--r--plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestExpressions.java20
-rw-r--r--plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestFileSystem.java2
-rw-r--r--plugins/org.eclipse.tm.tcf/src/org/eclipse/tm/tcf/util/TCFDataCache.java4
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;

Back to the top