src/Pure/Thy/sessions.scala
changeset 65507 decdb95bd007
parent 65500 a6644e0e8728
child 65517 1544e61e5314
equal deleted inserted replaced
65506:359fc6266a00 65507:decdb95bd007
   202               progress.echo(cat_lines(all_files.map(_.implode).sorted.map("  " + _)))
   202               progress.echo(cat_lines(all_files.map(_.implode).sorted.map("  " + _)))
   203 
   203 
   204             if (check_keywords.nonEmpty)
   204             if (check_keywords.nonEmpty)
   205               Check_Keywords.check_keywords(progress, syntax.keywords, check_keywords, theory_files)
   205               Check_Keywords.check_keywords(progress, syntax.keywords, check_keywords, theory_files)
   206 
   206 
       
   207             val session_graph: Graph_Display.Graph =
       
   208             {
       
   209               def session_node(name: String): Graph_Display.Node =
       
   210                 Graph_Display.Node("[" + name + "]", "session." + name)
       
   211 
       
   212               def node(name: Document.Node.Name): Graph_Display.Node =
       
   213               {
       
   214                 val session = resources.theory_qualifier(name)
       
   215                 if (session == session_name)
       
   216                   Graph_Display.Node(name.theory_base_name, "theory." + name.theory)
       
   217                 else session_node(session)
       
   218               }
       
   219 
       
   220               val imports_subgraph =
       
   221                 sessions.imports_graph.restrict(
       
   222                   sessions.imports_graph.all_preds(info.parent.toList ::: info.imports).toSet)
       
   223 
       
   224               val graph0 =
       
   225                 (Graph_Display.empty_graph /: imports_subgraph.topological_order)(
       
   226                   { case (g, session) =>
       
   227                       val a = session_node(session)
       
   228                       val bs = imports_subgraph.imm_preds(session).toList.map(session_node(_))
       
   229                       ((g /: (a :: bs))(_.default_node(_, Nil)) /: bs)(_.add_edge(_, a)) })
       
   230 
       
   231               (graph0 /: thy_deps.deps)(
       
   232                 { case (g, dep) =>
       
   233                     val a = node(dep.name)
       
   234                     val bs =
       
   235                       dep.header.imports.map({ case (name, _) => node(name) }).
       
   236                         filterNot(_ == a)
       
   237                     ((g /: (a :: bs))(_.default_node(_, Nil)) /: bs)(_.add_edge(_, a)) })
       
   238             }
       
   239 
   207             val base =
   240             val base =
   208               Base(global_theories = global_theories,
   241               Base(global_theories = global_theories,
   209                 loaded_theories = thy_deps.loaded_theories,
   242                 loaded_theories = thy_deps.loaded_theories,
   210                 known = Known.make(info.dir, List(imports_base), thy_deps.deps.map(_.name)),
   243                 known = Known.make(info.dir, List(imports_base), thy_deps.deps.map(_.name)),
   211                 keywords = thy_deps.keywords,
   244                 keywords = thy_deps.keywords,
   212                 syntax = syntax,
   245                 syntax = syntax,
   213                 sources = all_files.map(p => (p, SHA1.digest(p.file))),
   246                 sources = all_files.map(p => (p, SHA1.digest(p.file))),
   214                 session_graph = thy_deps.session_graph(info.parent getOrElse "", imports_base))
   247                 session_graph = session_graph)
   215 
   248 
   216             session_bases + (session_name -> base)
   249             session_bases + (session_name -> base)
   217           }
   250           }
   218           catch {
   251           catch {
   219             case ERROR(msg) =>
   252             case ERROR(msg) =>