diff options
author | Darin Wright | 2008-03-14 03:01:34 +0000 |
---|---|---|
committer | Darin Wright | 2008-03-14 03:01:34 +0000 |
commit | d19d118c40c8995be57e09cd706e303efe901d1a (patch) | |
tree | 3637665efeea132935b124378d8849d0df472c4d | |
parent | 78c7c767ef5fc220099ef032385a157637ea1208 (diff) | |
download | eclipse.platform.debug-d19d118c40c8995be57e09cd706e303efe901d1a.tar.gz eclipse.platform.debug-d19d118c40c8995be57e09cd706e303efe901d1a.tar.xz eclipse.platform.debug-d19d118c40c8995be57e09cd706e303efe901d1a.zip |
Bug 215489 - Stackframe shows as running when suspended
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); } |