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
                                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
                                end
                        end
                end
@@ -69,12 +71,14 @@ private class MModulesMetricsPhase
 
                        metrics.collect(mmodules, mainmodule)
                        for name, metric in metrics.metrics do
 
                        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
                        end
                end
        end
@@ -98,7 +102,8 @@ end
 
 # An abstract Metric on MModules
 abstract class MModuleMetric
 
 # 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`
        # 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
 # 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"
 
        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
 # 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"
 
        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
 # 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"
 
        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
 # 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"
 
        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
 # 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"
 
        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
 # 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"
 
        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
 # 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
        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
                for mclassdef in mmodule.mclassdefs do
-                       if not mclassdef.is_intro then values.inc(mmodule)
+                       if not mclassdef.is_intro then value += 1
                end
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Concrete Class in module (intro + redef)
 class MNBCC
        super MModuleMetric
        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
        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
                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
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Abstract Class in module (intro + redef)
 class MNBAC
        super MModuleMetric
        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
        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
                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
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Interface in module (intro + redef)
 class MNBIC
        super MModuleMetric
        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
        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
                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
                end
+               values[mmodule] = value
        end
 end
 
 # Module Metric: Number of Enum in module (intro + redef)
 class MNBEC
        super MModuleMetric
        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
        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
                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
                end
+               values[mmodule] = value
        end
 end
 
        end
 end