metrics: factorize `mainmodule` and `model_view` for all MModule metrics
[nit.git] / src / metrics / rta_metrics.nit
index d68860b..a4c3e28 100644 (file)
@@ -23,6 +23,8 @@ import mmodules_metrics
 import mclasses_metrics
 
 redef class ToolContext
+
+       # RTA related metrics phase
        var rta_metrics_phase: Phase = new RTAMetricsPhase(self, null)
 end
 
@@ -35,17 +37,20 @@ private class RTAMetricsPhase
                var out = "{toolcontext.opt_dir.value or else "metrics"}/rta"
                out.mkdir
 
+               var model = toolcontext.modelbuilder.model
+               var model_view = model.protected_view
+
                print toolcontext.format_h1("\n# RTA metrics")
 
                print toolcontext.format_h2("\n ## Live instances by mainmodules")
                var mmetrics = new MetricSet
-               mmetrics.register(new MNLC(toolcontext.modelbuilder))
-               mmetrics.register(new MNLT(toolcontext.modelbuilder))
-               mmetrics.register(new MNCT(toolcontext.modelbuilder))
-               mmetrics.register(new MNLI(toolcontext.modelbuilder))
-               mmetrics.register(new MNLM(toolcontext.modelbuilder))
-               mmetrics.register(new MNLMD(toolcontext.modelbuilder))
-               mmetrics.register(new MNLDD(toolcontext.modelbuilder))
+               mmetrics.register(new MNLC(mainmodule, model_view, toolcontext.modelbuilder))
+               mmetrics.register(new MNLT(mainmodule, model_view, toolcontext.modelbuilder))
+               mmetrics.register(new MNCT(mainmodule, model_view, toolcontext.modelbuilder))
+               mmetrics.register(new MNLI(mainmodule, model_view, toolcontext.modelbuilder))
+               mmetrics.register(new MNLM(mainmodule, model_view, toolcontext.modelbuilder))
+               mmetrics.register(new MNLMD(mainmodule, model_view, toolcontext.modelbuilder))
+               mmetrics.register(new MNLDD(mainmodule, model_view, toolcontext.modelbuilder))
                mmetrics.collect(new HashSet[MModule].from([mainmodule]))
                mmetrics.to_console(1, not toolcontext.opt_nocolors.value)
                if csv then mmetrics.to_csv.write_to_file("{out}/{mainmodule}.csv")
@@ -116,15 +121,21 @@ end
 
 # Summary metrics
 
+# RTA related metric that needs a `modelbuilder`
+class RTAMetric
+       super MModuleMetric
+
+       # Modelbuilder used to access AST
+       var modelbuilder: ModelBuilder
+end
+
 # MModule Metric: Number of Live Types
 class MNLI
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnli"
        redef fun desc do return "number of live instances in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
 
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
@@ -137,14 +148,11 @@ end
 
 # MModule Metric: Number of Live Types
 class MNLT
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnlt"
        redef fun desc do return "number of live mtypes in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
-
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
                        var analysis = new RapidTypeAnalysis(modelbuilder, mainmodule)
@@ -156,14 +164,11 @@ end
 
 # MModule Metric: Number of Live Cast Types
 class MNCT
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnct"
        redef fun desc do return "number of live cast mtypes in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
-
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
                        var analysis = new RapidTypeAnalysis(modelbuilder, mainmodule)
@@ -175,14 +180,11 @@ end
 
 # MModule Metric: Number of Live Classes
 class MNLC
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnlc"
        redef fun desc do return "number of live mclasses in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
-
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
                        var live = new HashSet[MClass]
@@ -198,14 +200,11 @@ end
 
 # MModule Metric: Number of Live Methods
 class MNLM
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnlm"
        redef fun desc do return "number of live methods in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
-
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
                        var analysis = new RapidTypeAnalysis(modelbuilder, mainmodule)
@@ -217,14 +216,11 @@ end
 
 # MModule Metric: Number of Live MethodDefs
 class MNLMD
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnlmd"
        redef fun desc do return "number of live method definitions in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
-
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
                        var analysis = new RapidTypeAnalysis(modelbuilder, mainmodule)
@@ -236,14 +232,11 @@ end
 
 # MModule Metric: Number of Dead MethodDefs
 class MNLDD
-       super MModuleMetric
+       super RTAMetric
        super IntMetric
        redef fun name do return "mnldd"
        redef fun desc do return "number of dead method definitions in a mmodule"
 
-       var modelbuilder: ModelBuilder
-       init(modelbuilder: ModelBuilder) do self.modelbuilder = modelbuilder
-
        redef fun collect(mainmodules) do
                for mainmodule in mainmodules do
                        var dead = 0