Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java')
-rw-r--r--org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java37
1 files changed, 36 insertions, 1 deletions
diff --git a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java
index 8b540b121..ff39eba06 100644
--- a/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java
+++ b/org.eclipse.debug.tests/src/org/eclipe/debug/tests/viewer/model/TestModelUpdatesListener.java
@@ -484,8 +484,12 @@ public class TestModelUpdatesListener
if (!fChildCountUpdatesScheduled.isEmpty()) return false;
}
if ( (flags & CHILDREN_UPDATES_STARTED) != 0) {
+ // Some children updates have already been started or completed.
if (fChildrenUpdatesRunning.isEmpty() && fChildrenUpdatesCompleted.isEmpty()) return false;
}
+ if ( (flags & CHILDREN_UPDATES_RUNNING) != 0) {
+ if (!isFinishedChildrenRunning()) return false;
+ }
if ( (flags & CHILDREN_UPDATES) != 0) {
if (!fChildrenUpdatesScheduled.isEmpty()) return false;
}
@@ -522,10 +526,41 @@ public class TestModelUpdatesListener
return false;
}
}
-
return true;
}
+
+ /**
+ * Returns true if all children updates that were scheduled are either currently
+ * running or have already completed.
+ *
+ * @see CHILDREN_UPDATES_RUNNING
+ * @return
+ */
+ private boolean isFinishedChildrenRunning() {
+ // All children updates that have been scheduled are either running or completed.
+ int scheduledCount = 0;
+ for (Iterator itr = fChildrenUpdatesScheduled.values().iterator(); itr.hasNext();) {
+ scheduledCount += ((Set)itr.next()).size();
+ }
+
+ int runningCount = 0;
+ for (Iterator itr = fChildrenUpdatesRunning.iterator(); itr.hasNext();) {
+ IChildrenUpdate update = ((IChildrenUpdate)itr.next());
+ Set set = (Set)fChildrenUpdatesScheduled.get( update.getElementPath() );
+ for (int i = update.getOffset(); set != null && i < update.getOffset() + update.getLength(); i++) {
+ if (set.contains(new Integer(i))) runningCount++;
+ }
+ }
+ for (Iterator itr = fChildrenUpdatesCompleted.iterator(); itr.hasNext();) {
+ IChildrenUpdate update = ((IChildrenUpdate)itr.next());
+ Set set = (Set)fChildrenUpdatesScheduled.get( update.getElementPath() );
+ for (int i = update.getOffset(); set != null && i < update.getOffset() + update.getLength(); i++) {
+ if (set.contains(new Integer(i))) runningCount++;
+ }
+ }
+ return scheduledCount == runningCount;
+ }
public void updateStarted(IViewerUpdate update) {
synchronized (this) {

Back to the top