lib/core: remove ascii method on Int and 'b' prefix
[nit.git] / src / metrics / inheritance_metrics.nit
index 9bd6b16..527ece8 100644 (file)
@@ -38,28 +38,28 @@ private class InheritanceMetricsPhase
                out.mkdir
 
                var model = toolcontext.modelbuilder.model
                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
 
                print toolcontext.format_h1("\n# Inheritance metrics")
 
                var hmetrics = new MetricSet
-               hmetrics.register(new MDUI(mainmodule))
-               hmetrics.register(new MDUIC(mainmodule))
-               hmetrics.register(new MDUII(mainmodule))
-               hmetrics.register(new MIF(mainmodule))
-               hmetrics.register(new MIFC(mainmodule))
-               hmetrics.register(new MIFI(mainmodule))
+               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
 
                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]
 
                var mmodules = new HashSet[MModule]
                var mclasses = new HashSet[MClass]
@@ -112,9 +112,6 @@ class MDUI
        redef fun name do return "mdui"
        redef fun desc do return "proportion of mclass defined using inheritance (has other parent than Object)"
 
        redef fun name do return "mdui"
        redef fun desc do return "proportion of mclass defined using inheritance (has other parent than Object)"
 
-       var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
-
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
@@ -139,9 +136,6 @@ class MDUIC
        redef fun name do return "mduic"
        redef fun desc do return "proportion of class_kind defined using inheritance"
 
        redef fun name do return "mduic"
        redef fun desc do return "proportion of class_kind defined using inheritance"
 
-       var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
-
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
@@ -170,9 +164,6 @@ class MDUII
        redef fun name do return "mduii"
        redef fun desc do return "proportion of interface_kind defined using inheritance"
 
        redef fun name do return "mduii"
        redef fun desc do return "proportion of interface_kind defined using inheritance"
 
-       var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
-
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
@@ -201,9 +192,6 @@ class MIF
        redef fun name do return "mif"
        redef fun desc do return "proportion of mclass inherited from"
 
        redef fun name do return "mif"
        redef fun desc do return "proportion of mclass inherited from"
 
-       var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
-
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
@@ -228,9 +216,6 @@ class MIFC
        redef fun name do return "mifc"
        redef fun desc do return "proportion of class_kind inherited from"
 
        redef fun name do return "mifc"
        redef fun desc do return "proportion of class_kind inherited from"
 
-       var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
-
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
@@ -259,9 +244,6 @@ class MIFI
        redef fun name do return "mifi"
        redef fun desc do return "proportion of interface_kind inherited from"
 
        redef fun name do return "mifi"
        redef fun desc do return "proportion of interface_kind inherited from"
 
-       var mainmodule: MModule
-       init(mainmodule: MModule) do self.mainmodule = mainmodule
-
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
        redef fun collect(mmodules) do
                for mmodule in mmodules do
                        var count = 0
@@ -373,6 +355,29 @@ class CNODC
        end
 end
 
        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
 # MClass metric: Number of Interface Ancestors
 #
 # Count only interfaces
@@ -539,4 +544,3 @@ redef class MClass
                return min
        end
 end
                return min
        end
 end
-