parser: regenerate with lambda
[nit.git] / src / metrics / inheritance_metrics.nit
index b00a40b..527ece8 100644 (file)
@@ -38,28 +38,28 @@ private class InheritanceMetricsPhase
                out.mkdir
 
                var model = toolcontext.modelbuilder.model
-               var model_view = model.private_view
+               var filter = new ModelFilter(min_visibility = private_visibility)
 
                print toolcontext.format_h1("\n# Inheritance metrics")
 
                var hmetrics = new MetricSet
-               hmetrics.register(new MDUI(mainmodule, model_view))
-               hmetrics.register(new MDUIC(mainmodule, model_view))
-               hmetrics.register(new MDUII(mainmodule, model_view))
-               hmetrics.register(new MIF(mainmodule, model_view))
-               hmetrics.register(new MIFC(mainmodule, model_view))
-               hmetrics.register(new MIFI(mainmodule, model_view))
+               hmetrics.register(new MDUI(model, mainmodule))
+               hmetrics.register(new MDUIC(model, mainmodule))
+               hmetrics.register(new MDUII(model, mainmodule))
+               hmetrics.register(new MIF(model, mainmodule))
+               hmetrics.register(new MIFC(model, mainmodule))
+               hmetrics.register(new MIFI(model, mainmodule))
 
                var cmetrics = new MetricSet
-               cmetrics.register(new CNOAC(mainmodule, model_view))
-               cmetrics.register(new CNOPC(mainmodule, model_view))
-               cmetrics.register(new CNOCC(mainmodule, model_view))
-               cmetrics.register(new CNODC(mainmodule, model_view))
-               cmetrics.register(new CNOPI(mainmodule, model_view))
-               cmetrics.register(new CNOCI(mainmodule, model_view))
-               cmetrics.register(new CNODI(mainmodule, model_view))
-               cmetrics.register(new CDITC(mainmodule, model_view))
-               cmetrics.register(new CDITI(mainmodule, model_view))
+               cmetrics.register(new CNOAC(model, mainmodule, filter))
+               cmetrics.register(new CNOPC(model, mainmodule, filter))
+               cmetrics.register(new CNOCC(model, mainmodule, filter))
+               cmetrics.register(new CNODC(model, mainmodule, filter))
+               cmetrics.register(new CNOPI(model, mainmodule, filter))
+               cmetrics.register(new CNOCI(model, mainmodule, filter))
+               cmetrics.register(new CNODI(model, mainmodule, filter))
+               cmetrics.register(new CDITC(model, mainmodule, filter))
+               cmetrics.register(new CDITI(model, mainmodule, filter))
 
                var mmodules = new HashSet[MModule]
                var mclasses = new HashSet[MClass]
@@ -355,6 +355,29 @@ class CNODC
        end
 end
 
+# MClass metric: Number of Abstract Class Ancestors
+#
+# Count only absrtract classes
+class CNOAA
+       super MClassMetric
+       super IntMetric
+       redef fun name do return "cnoaa"
+       redef fun desc do return "number of abstract class ancestors"
+
+       redef fun collect(mclasses) do
+               for mclass in mclasses do
+                       var count = 0
+                       for parent in mclass.in_hierarchy(mainmodule).greaters do
+                               if parent == mclass then continue
+                               if parent.kind == abstract_kind then
+                                       count += 1
+                               end
+                       end
+                       values[mclass] = count
+               end
+       end
+end
+
 # MClass metric: Number of Interface Ancestors
 #
 # Count only interfaces