Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java31
1 files changed, 22 insertions, 9 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
index e6b5e82d9..f37bfefbe 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java
@@ -399,7 +399,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
private class DelayedDoModelChangedJob extends WorkbenchJob {
// queue of submitted deltas to process
- private final List<DelayedDoModelChange> fQueue = new ArrayList<>();
+ private final List<Object> fQueue = new ArrayList<>();
private boolean shutdown;
public DelayedDoModelChangedJob() {
@@ -410,7 +410,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
@Override
public IStatus runInUIThread(IProgressMonitor monitor) {
- List<DelayedDoModelChange> currentBatch = new ArrayList<>();
+ List<Object> currentBatch = new ArrayList<>();
synchronized (fQueue) {
if (shutdown || fQueue.isEmpty()) {
return Status.OK_STATUS;
@@ -421,21 +421,26 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER) {
DebugUIPlugin.trace("Delayed batch size: " + currentBatch.size()); //$NON-NLS-1$
}
- for (Iterator<DelayedDoModelChange> iterator = currentBatch.iterator(); iterator.hasNext();) {
- DelayedDoModelChange change = iterator.next();
+ for (Iterator<?> iterator = currentBatch.iterator(); iterator.hasNext();) {
+ Object task = iterator.next();
if (monitor.isCanceled()) {
restoreQueue(currentBatch);
return Status.CANCEL_STATUS;
}
- if (!change.proxy.isDisposed()) {
- doModelChanged(change.delta, change.proxy);
+ if (task instanceof DelayedDoModelChange) {
+ DelayedDoModelChange change = (DelayedDoModelChange) task;
+ if (!change.proxy.isDisposed()) {
+ doModelChanged(change.delta, change.proxy);
+ }
+ } else {
+ ((Runnable) task).run();
}
iterator.remove();
}
return Status.OK_STATUS;
}
- private void restoreQueue(List<DelayedDoModelChange> currentBatch) {
+ private void restoreQueue(List<Object> currentBatch) {
synchronized (fQueue) {
currentBatch.addAll(fQueue);
fQueue.clear();
@@ -444,11 +449,19 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
}
public void runDelayed(final IModelDelta delta, final IModelProxy proxy) {
+ runDelayed(new DelayedDoModelChange(delta, proxy));
+ }
+
+ public void runDelayed(final Runnable uiTask) {
+ runDelayed((Object) uiTask);
+ }
+
+ private void runDelayed(final Object task) {
synchronized (fQueue) {
if (shutdown) {
return;
}
- fQueue.add(new DelayedDoModelChange(delta, proxy));
+ fQueue.add(task);
if (DebugUIPlugin.DEBUG_CONTENT_PROVIDER) {
DebugUIPlugin.trace("Delayed queue size: " + fQueue.size()); //$NON-NLS-1$
}
@@ -1779,7 +1792,7 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon
if (Thread.currentThread() == display.getThread()) {
performUpdates();
} else {
- display.asyncExec(updateJob);
+ fDelayedDoModelChangeJob.runDelayed(updateJob);
}
}
}

Back to the top