From: Alexandre Terrasa Date: Mon, 4 Jul 2016 22:00:39 +0000 (-0400) Subject: metrics: factorize `mainmodule` and `model_view` attributes for all MClass metrics X-Git-Url: http://nitlanguage.org metrics: factorize `mainmodule` and `model_view` attributes for all MClass metrics Signed-off-by: Alexandre Terrasa --- diff --git a/src/metrics/inheritance_metrics.nit b/src/metrics/inheritance_metrics.nit index 7638758..9bd6b16 100644 --- a/src/metrics/inheritance_metrics.nit +++ b/src/metrics/inheritance_metrics.nit @@ -22,6 +22,8 @@ import mmodules_metrics import mclasses_metrics redef class ToolContext + + # Inheritance related metrics phase var inheritance_metrics_phase: Phase = new InheritanceMetricsPhase(self, null) end @@ -35,6 +37,9 @@ private class InheritanceMetricsPhase var out = "{toolcontext.opt_dir.value or else "metrics"}/inheritance" out.mkdir + var model = toolcontext.modelbuilder.model + var model_view = model.private_view + print toolcontext.format_h1("\n# Inheritance metrics") var hmetrics = new MetricSet @@ -46,17 +51,16 @@ private class InheritanceMetricsPhase hmetrics.register(new MIFI(mainmodule)) var cmetrics = new MetricSet - cmetrics.register(new CNOAC(mainmodule)) - cmetrics.register(new CNOPC(mainmodule)) - cmetrics.register(new CNOCC(mainmodule)) - cmetrics.register(new CNODC(mainmodule)) - cmetrics.register(new CNOPI(mainmodule)) - cmetrics.register(new CNOCI(mainmodule)) - cmetrics.register(new CNODI(mainmodule)) - cmetrics.register(new CDITC(mainmodule)) - cmetrics.register(new CDITI(mainmodule)) + 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)) - var model = toolcontext.modelbuilder.model var mmodules = new HashSet[MModule] var mclasses = new HashSet[MClass] for mpackage in model.mpackages do @@ -286,9 +290,6 @@ class CNOAC redef fun name do return "cnoac" redef fun desc do return "number of class_kind ancestor" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -312,9 +313,6 @@ class CNOPC redef fun name do return "cnopc" redef fun desc do return "number of class_kind parent" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -338,9 +336,6 @@ class CNOCC redef fun name do return "cnocc" redef fun desc do return "number of class_kind children" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -364,9 +359,6 @@ class CNODC redef fun name do return "cnodc" redef fun desc do return "number of class_kind descendants" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -390,9 +382,6 @@ class CNOAI redef fun name do return "cnoai" redef fun desc do return "number of interface_kind ancestor" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -416,9 +405,6 @@ class CNOPI redef fun name do return "cnopi" redef fun desc do return "number of interface_kind parent" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -442,9 +428,6 @@ class CNOCI redef fun name do return "cnoci" redef fun desc do return "number of interface_kind children" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -468,9 +451,6 @@ class CNODI redef fun name do return "cnodi" redef fun desc do return "number of interface_kind descendants" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do var count = 0 @@ -494,9 +474,6 @@ class CDITC redef fun name do return "cditc" redef fun desc do return "depth in class tree following only class, abstract, extern kind" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.ditc(mainmodule) @@ -513,9 +490,6 @@ class CDITI redef fun name do return "cditi" redef fun desc do return "depth in class tree following only interface_kind" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.diti(mainmodule) @@ -526,7 +500,7 @@ end # model redef redef class MClass - + # Class Depth in Inheritance Tree # # Following the longest path composed only of extends edges from self to Object diff --git a/src/metrics/mclasses_metrics.nit b/src/metrics/mclasses_metrics.nit index 0951d10..3c99e67 100644 --- a/src/metrics/mclasses_metrics.nit +++ b/src/metrics/mclasses_metrics.nit @@ -21,6 +21,8 @@ import metrics_base import model::model_collect redef class ToolContext + + # MClass related metrics phase var mclasses_metrics_phase: Phase = new MClassesMetricsPhase(self, null) end @@ -40,11 +42,11 @@ private class MClassesMetricsPhase print toolcontext.format_h1("\n# MClasses metrics") var metrics = new MetricSet - metrics.register(new CNOA(mainmodule)) - metrics.register(new CNOP(mainmodule)) - metrics.register(new CNOC(mainmodule)) - metrics.register(new CNOD(mainmodule)) - metrics.register(new CDIT(mainmodule)) + metrics.register(new CNOA(mainmodule, model_view)) + metrics.register(new CNOP(mainmodule, model_view)) + metrics.register(new CNOC(mainmodule, model_view)) + metrics.register(new CNOD(mainmodule, model_view)) + metrics.register(new CDIT(mainmodule, model_view)) metrics.register(new CNBP(mainmodule, model_view)) metrics.register(new CNBA(mainmodule, model_view)) metrics.register(new CNBIP(mainmodule, model_view)) @@ -86,9 +88,15 @@ private class MClassesMetricsPhase end # A metric about MClass -interface MClassMetric +abstract class MClassMetric super Metric redef type ELM: MClass + + # Main module used for class linearization + var mainmodule: MModule + + # Model view used to collect and filter entities + var model_view: ModelView end # Class Metric: Number of Ancestors @@ -98,9 +106,6 @@ class CNOA redef fun name do return "cnoa" redef fun desc do return "number of ancestor classes" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.in_hierarchy(mainmodule).greaters.length - 1 @@ -115,9 +120,6 @@ class CNOP redef fun name do return "cnop" redef fun desc do return "number of parent classes" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.in_hierarchy(mainmodule).direct_greaters.length @@ -132,9 +134,6 @@ class CNOC redef fun name do return "cnoc" redef fun desc do return "number of child classes" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.in_hierarchy(mainmodule).direct_smallers.length @@ -149,9 +148,6 @@ class CNOD redef fun name do return "cnod" redef fun desc do return "number of descendant classes" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.in_hierarchy(mainmodule).smallers.length - 1 @@ -166,9 +162,6 @@ class CDIT redef fun name do return "cdit" redef fun desc do return "depth in class tree" - var mainmodule: MModule - init(mainmodule: MModule) do self.mainmodule = mainmodule - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.in_hierarchy(mainmodule).depth @@ -183,14 +176,6 @@ class CNBP redef fun name do return "cnbp" redef fun desc do return "number of accessible properties (inherited + local)" - var mainmodule: MModule - var model_view: ModelView - - init(mainmodule: MModule, model_view: ModelView) do - self.mainmodule = mainmodule - self.model_view = model_view - end - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.collect_accessible_mproperties(model_view).length @@ -205,14 +190,6 @@ class CNBA redef fun name do return "cnba" redef fun desc do return "number of accessible attributes (inherited + local)" - var mainmodule: MModule - var model_view: ModelView - - init(mainmodule: MModule, model_view: ModelView) do - self.mainmodule = mainmodule - self.model_view = model_view - end - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.collect_accessible_mattributes(model_view).length @@ -227,14 +204,6 @@ class CNBIP redef fun name do return "cnbip" redef fun desc do return "number of introduced properties" - var mainmodule: MModule - var model_view: ModelView - - init(mainmodule: MModule, model_view: ModelView) do - self.mainmodule = mainmodule - self.model_view = model_view - end - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.collect_intro_mproperties(model_view).length @@ -249,14 +218,6 @@ class CNBRP redef fun name do return "cnbrp" redef fun desc do return "number of redefined properties" - var mainmodule: MModule - var model_view: ModelView - - init(mainmodule: MModule, model_view: ModelView) do - self.mainmodule = mainmodule - self.model_view = model_view - end - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.collect_redef_mproperties(model_view).length @@ -271,14 +232,6 @@ class CNBHP redef fun name do return "cnbhp" redef fun desc do return "number of inherited properties" - var mainmodule: MModule - var model_view: ModelView - - init(mainmodule: MModule, model_view: ModelView) do - self.mainmodule = mainmodule - self.model_view = model_view - end - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.collect_inherited_mproperties(model_view).length @@ -293,14 +246,6 @@ class CNBLP redef fun name do return "cnblp" redef fun desc do return "number of local properties (intro + redef)" - var mainmodule: MModule - var model_view: ModelView - - init(mainmodule: MModule, model_view: ModelView) do - self.mainmodule = mainmodule - self.model_view = model_view - end - redef fun collect(mclasses) do for mclass in mclasses do values[mclass] = mclass.collect_local_mproperties(model_view).length diff --git a/src/metrics/mendel_metrics.nit b/src/metrics/mendel_metrics.nit index 1c4b6f8..a6f3518 100644 --- a/src/metrics/mendel_metrics.nit +++ b/src/metrics/mendel_metrics.nit @@ -76,8 +76,8 @@ private class MendelMetricsPhase end var cnblp = new CNBLP(mainmodule, model_view) - var cnvi = new CNVI(mainmodule) - var cnvs = new CNVS(mainmodule) + var cnvi = new CNVI(mainmodule, model_view) + var cnvs = new CNVS(mainmodule, model_view) var metrics = new MetricSet metrics.register(cnblp, cnvi, cnvs) @@ -137,13 +137,9 @@ class CBMS redef fun name do return "cbms" redef fun desc do return "branch mean size, mean number of introduction available among ancestors" - # Mainmodule used to compute class hierarchy. - var mainmodule: MModule - private var protected_view: ModelView = mainmodule.model.protected_view is lateinit - redef fun collect(mclasses) do for mclass in mclasses do - var totc = mclass.collect_accessible_mproperties(protected_view).length + var totc = mclass.collect_accessible_mproperties(model_view).length var ditc = mclass.in_hierarchy(mainmodule).depth values[mclass] = totc.to_f / (ditc + 1).to_f end @@ -176,12 +172,8 @@ class CNVI redef fun name do return "cnvi" redef fun desc do return "class novelty index, contribution of the class to its branch in term of introductions" - # Mainmodule used to compute class hierarchy. - var mainmodule: MModule - private var protected_view: ModelView = mainmodule.model.protected_view is lateinit - redef fun collect(mclasses) do - var cbms = new CBMS(mainmodule) + var cbms = new CBMS(mainmodule, model_view) for mclass in mclasses do # compute branch mean size var parents = mclass.in_hierarchy(mainmodule).direct_greaters @@ -189,7 +181,7 @@ class CNVI cbms.clear cbms.collect(new HashSet[MClass].from(parents)) # compute class novelty index - var locc = mclass.collect_accessible_mproperties(protected_view).length + var locc = mclass.collect_accessible_mproperties(model_view).length values[mclass] = locc.to_f / cbms.avg else values[mclass] = 0.0 @@ -233,15 +225,11 @@ class CNVS redef fun name do return "cnvs" redef fun desc do return "class novelty score, importance of the contribution of the class to its branch" - # Mainmodule used to compute class hierarchy. - var mainmodule: MModule - private var protected_view: ModelView = mainmodule.model.protected_view is lateinit - redef fun collect(mclasses) do - var cnvi = new CNVI(mainmodule) + var cnvi = new CNVI(mainmodule, model_view) cnvi.collect(mclasses) for mclass in mclasses do - var locc = mclass.collect_local_mproperties(protected_view).length + var locc = mclass.collect_local_mproperties(model_view).length values[mclass] = cnvi.values[mclass] * locc.to_f end end diff --git a/src/metrics/rta_metrics.nit b/src/metrics/rta_metrics.nit index 46d319a..d68860b 100644 --- a/src/metrics/rta_metrics.nit +++ b/src/metrics/rta_metrics.nit @@ -359,9 +359,17 @@ end # rta redef redef class RapidTypeAnalysis - var cnli = new CNLI - var cnlc = new CNLC + + # Class Live Instances + var cnli: CNLI is lazy do return new CNLI(mainmodule, modelbuilder.model.protected_view) + + # Class Live Casts + var cnlc: CNLC is lazy do return new CNLC(mainmodule, modelbuilder.model.protected_view) + + # Type Live Instances var tnli = new TNLI + + # Rtpe Live Casts var tnlc = new TNLC redef fun add_new(recv, mtype) do @@ -396,4 +404,3 @@ redef class MType return depth + 1 end end -