metrics: use model_viz in generate_hierarchies
authorJean Privat <jean@pryen.org>
Mon, 3 Feb 2014 15:36:32 +0000 (10:36 -0500)
committerJean Privat <jean@pryen.org>
Wed, 5 Feb 2014 19:57:31 +0000 (14:57 -0500)
Change-Id: I5ec1b302fe27c6b971d61b38cf08a25d4fb5ce76
Signed-off-by: Jean Privat <jean@pryen.org>

src/metrics/generate_hierarchies.nit
tests/sav/nitmetrics_args1.res

index 9765a2e..448bada 100644 (file)
@@ -21,6 +21,7 @@ module generate_hierarchies
 import model
 private import metrics_base
 import frontend
+import model_viz
 
 redef class ToolContext
        var generate_hierarchies_phase: Phase = new GenerateHierarchyPhase(self, null)
@@ -44,40 +45,15 @@ end
 # Nesting relation is represented with nested boxes
 fun generate_module_hierarchy(toolcontext: ToolContext, model: Model)
 do
-       var buf = new Buffer
-       buf.append("digraph \{\n")
-       buf.append("node [shape=box];\n")
-       buf.append("rankdir=BT;\n")
-       for mmodule in model.mmodules do
-               if mmodule.direct_owner == null then
-                       generate_module_hierarchy_for(mmodule, buf)
-               end
-       end
-       for mmodule in model.mmodules do
-               for s in mmodule.in_importation.direct_greaters do
-                       buf.append("\"{mmodule}\" -> \"{s}\";\n")
-               end
-       end
-       buf.append("\}\n")
-       var f = new OFStream.open(toolcontext.output_dir.join_path("module_hierarchy.dot"))
-       f.write(buf.to_s)
-       f.close
-end
+       var dot = new MProjectDot(model)
 
-# Helper function for `generate_module_hierarchy`.
-# Create graphviz nodes for the module and recusrively for its nested modules
-private fun generate_module_hierarchy_for(mmodule: MModule, buf: Buffer)
-do
-       if mmodule.in_nesting.direct_greaters.is_empty then
-               buf.append("\"{mmodule.name}\";\n")
-       else
-               buf.append("subgraph \"cluster_{mmodule.name}\" \{label=\"\"\n")
-               buf.append("\"{mmodule.name}\";\n")
-               for s in mmodule.in_nesting.direct_greaters do
-                       generate_module_hierarchy_for(s, buf)
-               end
-               buf.append("\}\n")
-       end
+       var projectpath = toolcontext.output_dir.join_path("project_hierarchy.dot")
+       dot.mprojects.add(model.mprojects.first)
+       dot.render(projectpath)
+
+       var modulepath = toolcontext.output_dir.join_path("module_hierarchy.dot")
+       dot.mprojects.add_all(model.mprojects)
+       dot.render(modulepath)
 end
 
 # Create a dot file representing the class hierarchy of a model.
index a773cd8..9fd29c1 100644 (file)
@@ -362,7 +362,10 @@ Number of live method definitions: 14
 Number of live runtime cast types (ie used in as and isa): 0
        
 Number of dead method definitions of live methods: 0
+generating out/nitmetrics_args1.write/project_hierarchy.dot
+generating out/nitmetrics_args1.write/module_hierarchy.dot
 class_hierarchy.dot
 classdef_hierarchy.dot
 model.html
 module_hierarchy.dot
+project_hierarchy.dot