X-Git-Url: http://nitlanguage.org diff --git a/src/metrics/generate_hierarchies.nit b/src/metrics/generate_hierarchies.nit index e1fdda3..ecbba30 100644 --- a/src/metrics/generate_hierarchies.nit +++ b/src/metrics/generate_hierarchies.nit @@ -18,10 +18,8 @@ # See graphviz http://www.graphviz.org/ module generate_hierarchies -import model -private import metrics_base -import frontend -import model_viz +import metrics_base +import model::model_viz redef class ToolContext var generate_hierarchies_phase: Phase = new GenerateHierarchyPhase(self, null) @@ -34,7 +32,7 @@ private class GenerateHierarchyPhase do if not toolcontext.opt_generate_hyperdoc.value and not toolcontext.opt_all.value then return var model = toolcontext.modelbuilder.model - generate_module_hierarchy(toolcontext, model) + generate_module_hierarchy(toolcontext, given_mmodules) generate_classdef_hierarchy(toolcontext, model) generate_class_hierarchy(toolcontext, mainmodule) end @@ -43,25 +41,31 @@ end # Create a dot file representing the module hierarchy of a model. # Importation relation is represented with arrow # Nesting relation is represented with nested boxes -fun generate_module_hierarchy(toolcontext: ToolContext, model: Model) +fun generate_module_hierarchy(toolcontext: ToolContext, given_mmodules: Collection[MModule]) do - var dot = new MProjectDot(model) + var model = given_mmodules.first.model + var dot = new MPackageDot(model) - var projectpath = toolcontext.output_dir.join_path("project_hierarchy.dot") - dot.mprojects.add(model.mprojects.first) - print "generating {projectpath}" - dot.write_to_file(projectpath) + # Collect requested packages + for m in given_mmodules do + var g = m.mgroup + if g == null then continue + dot.mpackages.add(g.mpackage) + end + var packagepath = toolcontext.output_dir.join_path("package_hierarchy.dot") + print "generating package_hierarchy.dot" + dot.write_to_file(packagepath) var modulepath = toolcontext.output_dir.join_path("module_hierarchy.dot") - dot.mprojects.add_all(model.mprojects) - print "generating {modulepath}" + dot.mpackages.add_all(model.mpackages) + print "generating module_hierarchy.dot" dot.write_to_file(modulepath) end # Create a dot file representing the class hierarchy of a model. fun generate_class_hierarchy(toolcontext: ToolContext, mmodule: MModule) do - var buf = new Buffer + var buf = new FlatBuffer buf.append("digraph \{\n") buf.append("node [shape=box];\n") buf.append("rankdir=BT;\n") @@ -73,7 +77,7 @@ do end end buf.append("\}\n") - var f = new OFStream.open(toolcontext.output_dir.join_path("class_hierarchy.dot")) + var f = new FileWriter.open(toolcontext.output_dir.join_path("class_hierarchy.dot")) f.write(buf.to_s) f.close end @@ -82,7 +86,7 @@ end # For a simple user of the model, the classdef hierarchy is not really usefull, it is more an internal thing. fun generate_classdef_hierarchy(toolcontext: ToolContext, model: Model) do - var buf = new Buffer + var buf = new FlatBuffer buf.append("digraph \{\n") buf.append("node [shape=box];\n") buf.append("rankdir=BT;\n") @@ -95,7 +99,7 @@ do end end buf.append("\}\n") - var f = new OFStream.open(toolcontext.output_dir.join_path("classdef_hierarchy.dot")) + var f = new FileWriter.open(toolcontext.output_dir.join_path("classdef_hierarchy.dot")) f.write(buf.to_s) f.close end