clarified signature: more specific types;
authorwenzelm
Thu, 10 Dec 2020 16:35:56 +0100
changeset 72869 015a61936c13
parent 72868 90e28f005be9
child 72870 8c468d602db1
clarified signature: more specific types;
src/Pure/PIDE/command.scala
src/Pure/PIDE/document.scala
src/Pure/PIDE/rendering.scala
src/Pure/Tools/build_job.scala
src/Pure/Tools/dump.scala
--- a/src/Pure/PIDE/command.scala	Thu Dec 10 15:27:41 2020 +0100
+++ b/src/Pure/PIDE/command.scala	Thu Dec 10 16:35:56 2020 +0100
@@ -54,17 +54,17 @@
 
   object Results
   {
-    type Entry = (Long, XML.Tree)
+    type Entry = (Long, XML.Elem)
     val empty: Results = new Results(SortedMap.empty)
     def make(args: TraversableOnce[Results.Entry]): Results = (empty /: args)(_ + _)
     def merge(args: TraversableOnce[Results]): Results = (empty /: args)(_ ++ _)
   }
 
-  final class Results private(private val rep: SortedMap[Long, XML.Tree])
+  final class Results private(private val rep: SortedMap[Long, XML.Elem])
   {
     def is_empty: Boolean = rep.isEmpty
     def defined(serial: Long): Boolean = rep.isDefinedAt(serial)
-    def get(serial: Long): Option[XML.Tree] = rep.get(serial)
+    def get(serial: Long): Option[XML.Elem] = rep.get(serial)
     def iterator: Iterator[Results.Entry] = rep.iterator
 
     def + (entry: Results.Entry): Results =
@@ -187,15 +187,15 @@
 
   object State
   {
-    def get_result(states: List[State], serial: Long): Option[XML.Tree] =
+    def get_result(states: List[State], serial: Long): Option[XML.Elem] =
       states.find(st => st.results.defined(serial)).map(st => st.results.get(serial).get)
 
     def get_result_proper(states: List[State], props: Properties.T): Option[Results.Entry] =
       for {
         serial <- Markup.Serial.unapply(props)
-        tree @ XML.Elem(_, body) <- get_result(states, serial)
-        if body.nonEmpty
-      } yield (serial -> tree)
+        elem <- get_result(states, serial)
+        if elem.body.nonEmpty
+      } yield serial -> elem
 
     def merge_results(states: List[State]): Results =
       Results.merge(states.map(_.results))
--- a/src/Pure/PIDE/document.scala	Thu Dec 10 15:27:41 2020 +0100
+++ b/src/Pure/PIDE/document.scala	Thu Dec 10 16:35:56 2020 +0100
@@ -637,14 +637,14 @@
 
     /* messages */
 
-    lazy val messages: List[(XML.Tree, Position.T)] =
+    lazy val messages: List[(XML.Elem, Position.T)] =
       (for {
         (command, start) <-
           Document.Node.Commands.starts_pos(
             node.commands.iterator, Token.Pos.file(node_name.node))
         pos = command.span.keyword_pos(start).position(command.span.name)
-        (_, tree) <- state.command_results(version, command).iterator
-       } yield (tree, pos)).toList
+        (_, elem) <- state.command_results(version, command).iterator
+       } yield (elem, pos)).toList
 
 
     /* exports */
--- a/src/Pure/PIDE/rendering.scala	Thu Dec 10 15:27:41 2020 +0100
+++ b/src/Pure/PIDE/rendering.scala	Thu Dec 10 16:35:56 2020 +0100
@@ -11,6 +11,9 @@
 import java.io.{File => JFile}
 import java.nio.file.FileSystems
 
+import scala.collection.immutable.SortedMap
+
+
 
 object Rendering
 {
@@ -94,7 +97,7 @@
     legacy_pri -> Color.legacy_message,
     error_pri -> Color.error_message)
 
-  def output_messages(results: Command.Results): List[XML.Tree] =
+  def output_messages(results: Command.Results): List[XML.Elem] =
   {
     val (states, other) =
       results.iterator.map(_._2).filterNot(Protocol.is_result).toList
@@ -537,10 +540,10 @@
     } yield Text.Info(r, color)
   }
 
-  def text_messages(range: Text.Range): List[Text.Info[XML.Tree]] =
+  def text_messages(range: Text.Range): List[Text.Info[XML.Elem]] =
   {
     val results =
-      snapshot.cumulate[Vector[XML.Tree]](range, Vector.empty, Rendering.message_elements,
+      snapshot.cumulate[Vector[XML.Elem]](range, Vector.empty, Rendering.message_elements,
         states =>
           {
             case (res, Text.Info(_, elem)) =>
@@ -557,17 +560,16 @@
           })
 
     var seen_serials = Set.empty[Long]
-    val seen: XML.Tree => Boolean =
-    {
-      case XML.Elem(Markup(_, Markup.Serial(i)), _) =>
-        val b = seen_serials(i); seen_serials += i; b
-      case _ => false
-    }
+    def seen(elem: XML.Elem): Boolean =
+      elem.markup.properties match {
+        case Markup.Serial(i) => val b = seen_serials(i); seen_serials += i; b
+        case _ => false
+      }
     for {
-      Text.Info(range, trees) <- results
-      tree <- trees
-      if !seen(tree)
-    } yield Text.Info(range, tree)
+      Text.Info(range, elems) <- results
+      elem <- elems
+      if !seen(elem)
+    } yield Text.Info(range, elem)
   }
 
 
@@ -578,7 +580,7 @@
   private sealed case class Tooltip_Info(
     range: Text.Range,
     timing: Timing = Timing.zero,
-    messages: List[Command.Results.Entry] = Nil,
+    messages: List[(Long, XML.Tree)] = Nil,
     rev_infos: List[(Boolean, XML.Tree)] = Nil)
   {
     def + (t: Timing): Tooltip_Info = copy(timing = timing + t)
@@ -688,7 +690,8 @@
     else {
       val r = Text.Range(results.head.range.start, results.last.range.stop)
       val all_tips =
-        Command.Results.make(results.flatMap(_.messages)).iterator.map(_._2).toList :::
+        (SortedMap.empty[Long, XML.Tree] /: results.flatMap(_.messages))(_ + _)
+          .iterator.map(_._2).toList :::
         results.flatMap(res => res.infos(true)) :::
         results.flatMap(res => res.infos(false)).lastOption.toList
       if (all_tips.isEmpty) None else Some(Text.Info(r, all_tips))
--- a/src/Pure/Tools/build_job.scala	Thu Dec 10 15:27:41 2020 +0100
+++ b/src/Pure/Tools/build_job.scala	Thu Dec 10 16:35:56 2020 +0100
@@ -36,9 +36,9 @@
         val results =
           Command.Results.make(
             for {
-              tree @ XML.Elem(markup, _) <- read_xml(Export.MESSAGES)
+              elem @ XML.Elem(markup, _) <- read_xml(Export.MESSAGES)
               i <- Markup.Serial.unapply(markup.properties)
-            } yield i -> tree)
+            } yield i -> elem)
 
         val blobs =
           blobs_files.map(file =>
--- a/src/Pure/Tools/dump.scala	Thu Dec 10 15:27:41 2020 +0100
+++ b/src/Pure/Tools/dump.scala	Thu Dec 10 16:35:56 2020 +0100
@@ -327,10 +327,10 @@
                 }
                 else {
                   val msgs =
-                    for ((tree, pos) <- snapshot.messages if Protocol.is_error(tree))
+                    for ((elem, pos) <- snapshot.messages if Protocol.is_error(elem))
                     yield {
                       "Error" + Position.here(pos) + ":\n" +
-                        XML.content(Pretty.formatted(List(tree)))
+                        XML.content(Pretty.formatted(List(elem)))
                     }
                   progress.echo("FAILED to process theory " + name)
                   msgs.foreach(progress.echo_error_message)