Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarin Wright2008-03-14 03:01:34 +0000
committerDarin Wright2008-03-14 03:01:34 +0000
commitd19d118c40c8995be57e09cd706e303efe901d1a (patch)
tree3637665efeea132935b124378d8849d0df472c4d
parent78c7c767ef5fc220099ef032385a157637ea1208 (diff)
downloadeclipse.platform.debug-d19d118c40c8995be57e09cd706e303efe901d1a.tar.gz
eclipse.platform.debug-d19d118c40c8995be57e09cd706e303efe901d1a.tar.xz
eclipse.platform.debug-d19d118c40c8995be57e09cd706e303efe901d1a.zip
Bug 215489 - Stackframe shows as running when suspended
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ElementLabelProvider.java22
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java13
2 files changed, 30 insertions, 5 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ElementLabelProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ElementLabelProvider.java
index a8cec3825..74e747aa9 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ElementLabelProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ElementLabelProvider.java
@@ -17,6 +17,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
@@ -146,11 +147,19 @@ public abstract class ElementLabelProvider implements IElementLabelProvider {
*/
public void run() {
ILabelUpdate update = getNextUpdate();
- while (update != null) {
+ while (update != null) {
+ ISchedulingRule rule = getRule(update);
try {
+ if (rule != null) {
+ Job.getJobManager().beginRule(rule, null);
+ }
retrieveLabel(update);
} catch (CoreException e) {
update.setStatus(e.getStatus());
+ } finally {
+ if (rule != null) {
+ Job.getJobManager().endRule(rule);
+ }
}
update.done();
update = getNextUpdate();
@@ -297,5 +306,16 @@ public abstract class ElementLabelProvider implements IElementLabelProvider {
protected boolean requiresUIJob(ILabelUpdate[] updates) {
return false;
}
+
+ /**
+ * Returns the scheduling rule for the given update or <code>null</code>
+ * it none.
+ *
+ * @param update label update
+ * @return associated scheduling rule, or <code>null</code>
+ */
+ protected ISchedulingRule getRule(ILabelUpdate update) {
+ return null;
+ }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java
index 5395cfbde..952360bd0 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/update/ThreadEventHandler.java
@@ -155,7 +155,7 @@ public class ThreadEventHandler extends DebugEventHandler {
} catch (DebugException e) {
}
} else {
- fireDeltaUpdatingSelectedFrame(thread, IModelDelta.CONTENT | IModelDelta.EXPAND, resume);
+ fireDeltaUpdatingSelectedFrame(thread, IModelDelta.STATE | IModelDelta.EXPAND, suspend);
}
}
@@ -237,9 +237,14 @@ public class ThreadEventHandler extends DebugEventHandler {
node = node.addNode(thread, threadIndex, flags, childCount);
}
} else {
- if (prev == null && event.getDetail() == DebugEvent.STEP_END) {
- // see bug 166602 - expand the thread if this is a step end with no previous top frame
- flags = flags | IModelDelta.EXPAND;
+ if (event.getDetail() == DebugEvent.STEP_END) {
+ if (prev == null) {
+ // see bug 166602 - expand the thread if this is a step end with no previous top frame
+ flags = flags | IModelDelta.EXPAND;
+ } else if (frame == null) {
+ // there was a previous frame and current is null on a step: transient state
+ return;
+ }
}
node = node.addNode(thread, threadIndex, flags | IModelDelta.CONTENT, childCount);
}

Back to the top