nitmetrics: implements metrics as global phases
authorJean Privat <jean@pryen.org>
Sat, 20 Jul 2013 02:53:00 +0000 (22:53 -0400)
committerJean Privat <jean@pryen.org>
Sat, 20 Jul 2013 11:28:19 +0000 (07:28 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/metrics/generate_hierarchies.nit
src/metrics/inheritance_metrics.nit
src/metrics/model_hyperdoc.nit
src/metrics/nullables_metrics.nit
src/metrics/refinement_metrics.nit
src/metrics/rta_metrics.nit
src/metrics/self_metrics.nit
src/metrics/static_types_metrics.nit
src/metrics/tables_metrics.nit
src/nitmetrics.nit

index 8f6d894..4f172f4 100644 (file)
 module generate_hierarchies
 
 import model
-
 private import metrics_base
+import frontend
+
+redef class ToolContext
+       var generate_hierarchies_phase: Phase = new GenerateHierarchyPhase(self, null)
+end
+
+private class GenerateHierarchyPhase
+       super Phase
+
+       redef fun process_mainmodule(mainmodule)
+       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_classdef_hierarchy(toolcontext, model)
+               generate_class_hierarchy(toolcontext, mainmodule)
+       end
+end
 
 # Create a dot file representing the module hierarchy of a model.
 # Importation relation is represented with arrow
index 5251216..232a44a 100644 (file)
@@ -19,6 +19,21 @@ module inheritance_metrics
 
 import model
 private import metrics_base
+import phase
+import frontend
+
+redef class ToolContext
+       var inheritance_metrics_phase = new InheritanceMetricsPhase(self, null)
+end
+
+private class InheritanceMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_inheritance.value and not toolcontext.opt_all.value then return
+               compute_inheritance_metrics(toolcontext, toolcontext.modelbuilder.model)
+       end
+end
 
 redef class Model
        # Extract the subset of classes from a set of mclass
index 8d8a10e..0e66ba4 100644 (file)
@@ -19,6 +19,21 @@ module model_hyperdoc
 
 import model
 import metrics_base
+import phase
+import frontend
+
+redef class ToolContext
+       var model_hyperdoc_phase = new ModelHyperdocPhase(self, null)
+end
+
+private class ModelHyperdocPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_generate_hyperdoc.value and not toolcontext.opt_all.value then return
+               generate_model_hyperdoc(toolcontext, toolcontext.modelbuilder.model)
+       end
+end
 
 # Genetate a HTML file for the model.
 # The generated file contains the description of each entity of the model
index ff85b2a..70b709f 100644 (file)
@@ -20,6 +20,20 @@ module nullables_metrics
 import modelbuilder
 private import typing
 private import metrics_base
+import frontend
+
+redef class ToolContext
+       var nullables_metrics_phase = new NullablesMetricsPhase(self, null)
+end
+
+private class NullablesMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_nullables.value and not toolcontext.opt_all.value then return
+               compute_nullables_metrics(toolcontext.modelbuilder)
+       end
+end
 
 private class NullableSends
        super Visitor
index 549f661..eec9c28 100644 (file)
@@ -19,6 +19,20 @@ module refinement_metrics
 
 import model
 private import metrics_base
+import frontend
+
+redef class ToolContext
+       var refinement_metrics_phase = new RefinementMetricsPhase(self, null)
+end
+
+private class RefinementMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_refinement.value and not toolcontext.opt_all.value then return
+               compute_refinement_metrics(toolcontext.modelbuilder.model)
+       end
+end
 
 # Print refinement usage metrics
 fun compute_refinement_metrics(model: Model)
index 7ba1899..f494736 100644 (file)
@@ -20,6 +20,20 @@ module rta_metrics
 import modelbuilder
 private import rapid_type_analysis
 private import metrics_base
+import frontend
+
+redef class ToolContext
+       var rta_metrics_phase = new RTAMetricsPhase(self, null)
+end
+
+private class RTAMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_rta.value and not toolcontext.opt_all.value then return
+               compute_rta_metrics(toolcontext.modelbuilder, mainmodule)
+       end
+end
 
 redef class RapidTypeAnalysis
        redef fun add_type(mtype)
index 58aa69d..ad64c27 100644 (file)
 
 # Metrics about the usage of explicit and implicit self
 module self_metrics
-
 import modelbuilder
 private import metrics_base
+import frontend
+
+redef class ToolContext
+       var self_metrics_phase = new SelfMetricsPhase(self, null)
+end
+
+private class SelfMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_self.value and not toolcontext.opt_all.value then return
+               compute_self_metrics(toolcontext.modelbuilder)
+       end
+end
 
 private class ASelfVisitor
        super Visitor
index 24796c6..3f28cee 100644 (file)
@@ -20,6 +20,20 @@ module static_types_metrics
 private import metrics_base
 import modelbuilder
 import modelize_class
+import frontend
+
+redef class ToolContext
+       var static_types_metrics_phase = new StaticTypesMetricsPhase(self, null)
+end
+
+private class StaticTypesMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_static_types.value and not toolcontext.opt_all.value then return
+               compute_static_types_metrics(toolcontext.modelbuilder)
+       end
+end
 
 # The job of this visitor is to resolve all types found
 private class ATypeCounterVisitor
index dd1d8eb..41ce4d4 100644 (file)
@@ -19,6 +19,20 @@ module tables_metrics
 
 import model
 private import metrics_base
+import frontend
+
+redef class ToolContext
+       var tables_metrics_phase = new TablesMetricsPhase(self, null)
+end
+
+private class TablesMetricsPhase
+       super Phase
+       redef fun process_mainmodule(mainmodule)
+       do
+               if not toolcontext.opt_tables.value and not toolcontext.opt_all.value then return
+               compute_tables_metrics(mainmodule)
+       end
+end
 
 # Print class tables metrics for the classes of the program main
 fun compute_tables_metrics(main: MModule)
index 0f6f430..6b12f88 100644 (file)
@@ -55,55 +55,7 @@ end
 
 print "*** METRICS ***"
 
+toolcontext.run_global_phases(mainmodule)
+
 # All metrics computation ?
 var all = toolcontext.opt_all.value
-
-# Inheritance usage metrics
-if all or toolcontext.opt_inheritance.value then
-       print ""
-       compute_inheritance_metrics(toolcontext, model)
-end
-
-# Refinement usage metrics
-if all or toolcontext.opt_refinement.value then
-       print ""
-       compute_refinement_metrics(model)
-end
-
-# Self usage metrics
-if all or toolcontext.opt_self.value then
-       print ""
-       compute_self_metrics(modelbuilder)
-end
-
-# Nullables metrics
-if all or toolcontext.opt_nullables.value then
-       print ""
-       compute_nullables_metrics(modelbuilder)
-end
-
-# Static types metrics
-if all or toolcontext.opt_static_types.value then
-       print ""
-       compute_static_types_metrics(modelbuilder)
-end
-
-# Tables metrics
-if all or toolcontext.opt_tables.value then
-       print ""
-       compute_tables_metrics(mainmodule)
-end
-
-# RTA metrics
-if all or toolcontext.opt_rta.value then
-       print ""
-       compute_rta_metrics(modelbuilder, mainmodule)
-end
-
-# Generate Hyperdoc
-if toolcontext.opt_generate_hyperdoc.value then
-       generate_module_hierarchy(toolcontext, model)
-       generate_classdef_hierarchy(toolcontext, model)
-       generate_class_hierarchy(toolcontext, mainmodule)
-       generate_model_hyperdoc(toolcontext, model)
-end