metrics: move up values method in Metric interface
[nit.git] / src / metrics / mmodules_metrics.nit
index fc3a781..4075280 100644 (file)
@@ -54,12 +54,14 @@ private class MModulesMetricsPhase
                                mmodules.add_all(mgroup.mmodules)
                                metrics.collect(new HashSet[MModule].from(mgroup.mmodules), mainmodule)
                                for name, metric in metrics.metrics do
-                                       print toolcontext.format_h4("\t{name}: {metric.desc}")
-                                       print toolcontext.format_p("\t    avg: {metric.avg}")
-                                       var max = metric.max
-                                       print  toolcontext.format_p("\t    max: {max.first} ({max.second})")
-                                       var min = metric.min
-                                       print  toolcontext.format_p("\t    min: {min.first} ({min.second})")
+                                       if metric isa IntMetric then
+                                               print toolcontext.format_h4("\t{name}: {metric.desc}")
+                                               print toolcontext.format_p("\t    avg: {metric.avg}")
+                                               var max = metric.max
+                                               print  toolcontext.format_p("\t    max: {max.first} ({max.second})")
+                                               var min = metric.min
+                                               print  toolcontext.format_p("\t    min: {min.first} ({min.second})")
+                                       end
                                end
                        end
                end
@@ -69,12 +71,14 @@ private class MModulesMetricsPhase
 
                        metrics.collect(mmodules, mainmodule)
                        for name, metric in metrics.metrics do
-                               print toolcontext.format_h4( "\t{name}: {metric.desc}")
-                               print  toolcontext.format_p("\t    avg: {metric.avg}")
-                               var max = metric.max
-                               print  toolcontext.format_p("\t    max: {max.first} ({max.second})")
-                               var min = metric.min
-                               print  toolcontext.format_p("\t    min: {min.first} ({min.second})")
+                               if metric isa IntMetric then
+                                       print toolcontext.format_h4( "\t{name}: {metric.desc}")
+                                       print  toolcontext.format_p("\t    avg: {metric.avg}")
+                                       var max = metric.max
+                                               print  toolcontext.format_p("\t    max: {max.first} ({max.second})")
+                                       var min = metric.min
+                                       print  toolcontext.format_p("\t    min: {min.first} ({min.second})")
+                               end
                        end
                end
        end
@@ -98,7 +102,8 @@ end
 
 # An abstract Metric on MModules
 abstract class MModuleMetric
-       super IntMetric[MModule]
+       super Metric
+       redef type ELM: MModule
        # Collect the metric on the MModule
        #
        # Results are stored in the property `values`
@@ -108,6 +113,7 @@ end
 # Module Metric: Number of Ancestors
 class MNOA
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnoa"
        redef fun desc do return "number of ancestor modules"
 
@@ -119,6 +125,7 @@ end
 # Module Metric: Number of Parents
 class MNOP
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnop"
        redef fun desc do return "number of parent modules"
 
@@ -130,6 +137,7 @@ end
 # Module Metric: Number of Children
 class MNOC
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnoc"
        redef fun desc do return "number of child modules"
 
@@ -141,6 +149,7 @@ end
 # Module Metric: Number of Descendants
 class MNOD
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnod"
        redef fun desc do return "number of descendant modules"
 
@@ -152,6 +161,7 @@ end
 # Module Metric: Depth in Tree
 class MDIT
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mdit"
        redef fun desc do return "depth in module tree"
 
@@ -165,6 +175,7 @@ end
 # count all mclasses introduced by the module
 class MNBI
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnbi"
        redef fun desc do return "number of introduction in module"
 
@@ -178,70 +189,80 @@ end
 # count all mclasses refined in the module
 class MNBR
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnbr"
        redef fun desc do return "number of refinement in module"
 
        redef fun collect(mmodule, main) do
-               values[mmodule] = 0
+               var value = 0
                for mclassdef in mmodule.mclassdefs do
-                       if not mclassdef.is_intro then values.inc(mmodule)
+                       if not mclassdef.is_intro then value += 1
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Concrete Class in module (intro + redef)
 class MNBCC
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnbcc"
        redef fun desc do return "number of concrete class in module (intro + redef)"
 
        redef fun collect(mmodule, main) do
-               values[mmodule] = 0
+               var value = 0
                for mclassdef in mmodule.mclassdefs do
-                       if mclassdef.mclass.kind == concrete_kind then values.inc(mmodule)
+                       if mclassdef.mclass.kind == concrete_kind then value += 1
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Abstract Class in module (intro + redef)
 class MNBAC
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnbac"
        redef fun desc do return "number of abstract class in module (intro + redef)"
 
        redef fun collect(mmodule, main) do
-               values[mmodule] = 0
+               var value = 0
                for mclassdef in mmodule.mclassdefs do
-                       if mclassdef.mclass.kind == abstract_kind then values.inc(mmodule)
+                       if mclassdef.mclass.kind == abstract_kind then value += 1
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Interface in module (intro + redef)
 class MNBIC
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnbic"
        redef fun desc do return "number of interface in module (intro + redef)"
 
        redef fun collect(mmodule, main) do
-               values[mmodule] = 0
+               var value = 0
                for mclassdef in mmodule.mclassdefs do
-                       if mclassdef.mclass.kind == interface_kind then values.inc(mmodule)
+                       if mclassdef.mclass.kind == interface_kind then value += 1
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Enum in module (intro + redef)
 class MNBEC
        super MModuleMetric
+       super IntMetric
        redef fun name do return "mnbec"
        redef fun desc do return "number of enum in module (intro + redef)"
 
        redef fun collect(mmodule, main) do
-               values[mmodule] = 0
+               var value = 0
                for mclassdef in mmodule.mclassdefs do
-                       if mclassdef.mclass.kind == enum_kind then values.inc(mmodule)
+                       if mclassdef.mclass.kind == enum_kind then value += 1
                end
+               values[mmodule] = value
        end
 end