clarified signature;
authorwenzelm
Sat, 18 Aug 2018 14:35:48 +0200
changeset 68763 3c5857c6bc5b
parent 68762 8750edd967ce
child 68764 b523e903d6e4
clarified signature;
src/Pure/PIDE/document_status.scala
src/Tools/jEdit/src/theories_dockable.scala
--- a/src/Pure/PIDE/document_status.scala	Sat Aug 18 14:16:24 2018 +0200
+++ b/src/Pure/PIDE/document_status.scala	Sat Aug 18 14:35:48 2018 +0200
@@ -182,11 +182,28 @@
         case _ => Overall_Node_Status.pending
       }
 
-    def + (entry: (Document.Node.Name, Node_Status)): Nodes_Status =
-      new Nodes_Status(rep + entry)
-
-    def restrict(domain: Set[Document.Node.Name]): Nodes_Status =
-      new Nodes_Status(rep -- rep.keysIterator.filterNot(domain))
+    def update(
+      session_base: Sessions.Base,
+      state: Document.State,
+      version: Document.Version,
+      restriction: Option[Set[Document.Node.Name]],
+      trim: Boolean): Nodes_Status =
+    {
+      val nodes = version.nodes
+      val update_iterator =
+        for {
+          name <- restriction.getOrElse(nodes.domain).iterator
+          if !Sessions.is_hidden(name) &&
+              !session_base.loaded_theory(name) &&
+              !nodes.is_suppressed(name) &&
+              !nodes(name).is_empty
+          st = Document_Status.Node_Status.make(state, version, name)
+          if !rep.isDefinedAt(name) || rep(name) != st
+        } yield (name -> st)
+      val rep1 = rep ++ update_iterator
+      val rep2 = if (trim) rep1 -- rep1.keysIterator.filterNot(nodes.domain) else rep1
+      new Nodes_Status(rep2)
+    }
 
     override def hashCode: Int = rep.hashCode
     override def equals(that: Any): Boolean =
--- a/src/Tools/jEdit/src/theories_dockable.scala	Sat Aug 18 14:16:24 2018 +0200
+++ b/src/Tools/jEdit/src/theories_dockable.scala	Sat Aug 18 14:35:48 2018 +0200
@@ -217,27 +217,14 @@
     GUI_Thread.require {}
 
     val snapshot = PIDE.session.snapshot()
-    val nodes = snapshot.version.nodes
 
     val nodes_status1 =
-      (nodes_status /: (restriction.getOrElse(nodes.domain).iterator))(
-        { case (status, name) =>
-            if (Sessions.is_hidden(name) ||
-                PIDE.resources.session_base.loaded_theory(name) ||
-                nodes.is_suppressed(name) ||
-                nodes(name).is_empty) status
-            else {
-              val st = Document_Status.Node_Status.make(snapshot.state, snapshot.version, name)
-              status + (name -> st)
-            }
-        })
+      nodes_status.update(
+        PIDE.resources.session_base, snapshot.state, snapshot.version, restriction, trim)
 
-    val nodes_status2 =
-      if (trim) nodes_status1.restrict(nodes.domain) else nodes_status1
-
-    if (nodes_status != nodes_status2) {
-      nodes_status = nodes_status2
-      status.listData = nodes.topological_order.filter(nodes_status.defined(_))
+    if (nodes_status != nodes_status1) {
+      nodes_status = nodes_status1
+      status.listData = snapshot.version.nodes.topological_order.filter(nodes_status.defined(_))
     }
   }