X-Git-Url: http://nitlanguage.org diff --git a/src/metrics/inheritance_metrics.nit b/src/metrics/inheritance_metrics.nit index 9bd6b16..527ece8 100644 --- a/src/metrics/inheritance_metrics.nit +++ b/src/metrics/inheritance_metrics.nit @@ -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)) - 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 - 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] @@ -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)" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - 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" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - 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" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - 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" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - 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" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - 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" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mmodules) do for mmodule in mmodules do var count = 0 @@ -373,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 @@ -539,4 +544,3 @@ redef class MClass return min end end -