print toolcontext.format_h1("\n# Inheritance metrics")
var hmetrics = new InheritanceMetricSet
- hmetrics.register(new MDUI, new MDUIC, new MDUII, new MIF, new MIFC, new MIFI)
-
+ 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))
+
var cmetrics = new MClassMetricSet
- cmetrics.register(new CNOA, new CNOP, new CNOC, new CNODC)
- cmetrics.register(new CNOA, new CNOP, new CNOC, new CNODI)
- cmetrics.register(new CDIT, new CDITI)
+ 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))
var model = toolcontext.modelbuilder.model
var mmodules = new HashSet[MModule]
fun collect(mmodules: Set[MModule], mainmodule: MModule) do
clear
for metric in metrics.values do
- for mmodule in mmodules do
- metric.collect(mmodule, mainmodule)
- end
+ metric.collect(mmodules)
end
end
end
redef fun name do return "mdui"
redef fun desc do return "proportion of mclass defined using inheritance (has other parent than Object)"
- redef fun collect(mmodule, mainmodule) do
- var count = 0
- for mclass in mmodule.intro_mclasses do
- if mclass.in_hierarchy(mainmodule).greaters.length > 2 then count += 1
- end
- if mmodule.intro_mclasses.is_empty then
- values[mmodule] = 0.0
- else
- values[mmodule] = count.to_f / mmodule.intro_mclasses.length.to_f
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var count = 0
+ for mclass in mmodule.intro_mclasses do
+ if mclass.in_hierarchy(mainmodule).greaters.length > 2 then count += 1
+ end
+ if mmodule.intro_mclasses.is_empty then
+ values[mmodule] = 0.0
+ else
+ values[mmodule] = count.to_f / mmodule.intro_mclasses.length.to_f
+ end
end
end
end
redef fun name do return "mduic"
redef fun desc do return "proportion of class_kind defined using inheritance"
- redef fun collect(mmodule, mainmodule) do
- var count = 0
- var nb = 0
- for mclass in mmodule.intro_mclasses do
- if mclass.kind == abstract_kind or mclass.kind == concrete_kind or mclass.kind == extern_kind then
- if mclass.in_hierarchy(mainmodule).greaters.length > 2 then count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var count = 0
+ var nb = 0
+ for mclass in mmodule.intro_mclasses do
+ if mclass.kind == abstract_kind or mclass.kind == concrete_kind or mclass.kind == extern_kind then
+ if mclass.in_hierarchy(mainmodule).greaters.length > 2 then count += 1
+ end
+ nb += 1
+ end
+ if mmodule.intro_mclasses.is_empty then
+ values[mmodule] = 0.0
+ else
+ values[mmodule] = count.to_f / nb.to_f
end
- nb += 1
- end
- if mmodule.intro_mclasses.is_empty then
- values[mmodule] = 0.0
- else
- values[mmodule] = count.to_f / nb.to_f
end
end
end
redef fun name do return "mduii"
redef fun desc do return "proportion of interface_kind defined using inheritance"
- redef fun collect(mmodule, mainmodule) do
- var count = 0
- var nb = 0
- for mclass in mmodule.intro_mclasses do
- if mclass.kind == interface_kind then
- if mclass.in_hierarchy(mainmodule).greaters.length > 2 then count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var count = 0
+ var nb = 0
+ for mclass in mmodule.intro_mclasses do
+ if mclass.kind == interface_kind then
+ if mclass.in_hierarchy(mainmodule).greaters.length > 2 then count += 1
+ end
+ nb += 1
+ end
+ if mmodule.intro_mclasses.is_empty then
+ values[mmodule] = 0.0
+ else
+ values[mmodule] = count.to_f / nb.to_f
end
- nb += 1
- end
- if mmodule.intro_mclasses.is_empty then
- values[mmodule] = 0.0
- else
- values[mmodule] = count.to_f / nb.to_f
end
end
end
redef fun name do return "mif"
redef fun desc do return "proportion of mclass inherited from"
- redef fun collect(mmodule, mainmodule) do
- var count = 0
- for mclass in mmodule.intro_mclasses do
- if mclass.in_hierarchy(mainmodule).direct_smallers.length > 0 then count += 1
- end
- if mmodule.intro_mclasses.is_empty then
- values[mmodule] = 0.0
- else
- values[mmodule] = count.to_f / mmodule.intro_mclasses.length.to_f
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var count = 0
+ for mclass in mmodule.intro_mclasses do
+ if mclass.in_hierarchy(mainmodule).direct_smallers.length > 0 then count += 1
+ end
+ if mmodule.intro_mclasses.is_empty then
+ values[mmodule] = 0.0
+ else
+ values[mmodule] = count.to_f / mmodule.intro_mclasses.length.to_f
+ end
end
end
end
redef fun name do return "mifc"
redef fun desc do return "proportion of class_kind inherited from"
- redef fun collect(mmodule, mainmodule) do
- var count = 0
- var nb = 0
- for mclass in mmodule.intro_mclasses do
- if mclass.kind == abstract_kind or mclass.kind == concrete_kind or mclass.kind == extern_kind then
- if mclass.in_hierarchy(mainmodule).direct_smallers.length > 0 then count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var count = 0
+ var nb = 0
+ for mclass in mmodule.intro_mclasses do
+ if mclass.kind == abstract_kind or mclass.kind == concrete_kind or mclass.kind == extern_kind then
+ if mclass.in_hierarchy(mainmodule).direct_smallers.length > 0 then count += 1
+ end
+ nb += 1
+ end
+ if mmodule.intro_mclasses.is_empty then
+ values[mmodule] = 0.0
+ else
+ values[mmodule] = count.to_f / nb.to_f
end
- nb += 1
- end
- if mmodule.intro_mclasses.is_empty then
- values[mmodule] = 0.0
- else
- values[mmodule] = count.to_f / nb.to_f
end
end
end
redef fun name do return "mifi"
redef fun desc do return "proportion of interface_kind inherited from"
- redef fun collect(mmodule, mainmodule) do
- var count = 0
- var nb = 0
- for mclass in mmodule.intro_mclasses do
- if mclass.kind == interface_kind then
- if mclass.in_hierarchy(mainmodule).direct_smallers.length > 0 then count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var count = 0
+ var nb = 0
+ for mclass in mmodule.intro_mclasses do
+ if mclass.kind == interface_kind then
+ if mclass.in_hierarchy(mainmodule).direct_smallers.length > 0 then count += 1
+ end
+ nb += 1
+ end
+ if mmodule.intro_mclasses.is_empty then
+ values[mmodule] = 0.0
+ else
+ values[mmodule] = count.to_f / nb.to_f
end
- nb += 1
- end
- if mmodule.intro_mclasses.is_empty then
- values[mmodule] = 0.0
- else
- values[mmodule] = count.to_f / nb.to_f
end
end
end
redef fun name do return "cnoac"
redef fun desc do return "number of class_kind ancestor"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).greaters do
- if parent == mclass then continue
- if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ 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 or parent.kind == concrete_kind or parent.kind == extern_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnopc"
redef fun desc do return "number of class_kind parent"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).direct_greaters do
- if parent == mclass then continue
- if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ var count = 0
+ for parent in mclass.in_hierarchy(mainmodule).direct_greaters do
+ if parent == mclass then continue
+ if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnocc"
redef fun desc do return "number of class_kind children"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).direct_smallers do
- if parent == mclass then continue
- if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ var count = 0
+ for parent in mclass.in_hierarchy(mainmodule).direct_smallers do
+ if parent == mclass then continue
+ if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnodc"
redef fun desc do return "number of class_kind descendants"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).smallers do
- if parent == mclass then continue
- if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ var count = 0
+ for parent in mclass.in_hierarchy(mainmodule).smallers do
+ if parent == mclass then continue
+ if parent.kind == abstract_kind or parent.kind == concrete_kind or parent.kind == extern_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnoai"
redef fun desc do return "number of interface_kind ancestor"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).greaters do
- if parent == mclass then continue
- if parent.kind == interface_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ 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 == interface_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnopi"
redef fun desc do return "number of interface_kind parent"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).direct_greaters do
- if parent == mclass then continue
- if parent.kind == interface_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ var count = 0
+ for parent in mclass.in_hierarchy(mainmodule).direct_greaters do
+ if parent == mclass then continue
+ if parent.kind == interface_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnoci"
redef fun desc do return "number of interface_kind children"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).direct_smallers do
- if parent == mclass then continue
- if parent.kind == interface_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ var count = 0
+ for parent in mclass.in_hierarchy(mainmodule).direct_smallers do
+ if parent == mclass then continue
+ if parent.kind == interface_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cnodi"
redef fun desc do return "number of interface_kind descendants"
- redef fun collect(mclass, mainmodule) do
- var count = 0
- for parent in mclass.in_hierarchy(mainmodule).smallers do
- if parent == mclass then continue
- if parent.kind == interface_kind then
- count += 1
+ var mainmodule: MModule
+ init(mainmodule: MModule) do self.mainmodule = mainmodule
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ var count = 0
+ for parent in mclass.in_hierarchy(mainmodule).smallers do
+ if parent == mclass then continue
+ if parent.kind == interface_kind then
+ count += 1
+ end
end
+ values[mclass] = count
end
- values[mclass] = count
end
end
redef fun name do return "cditc"
redef fun desc do return "depth in class tree following only class, abstract, extern kind"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.ditc(mainmodule)
+ 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)
+ end
end
end
redef fun name do return "cditi"
redef fun desc do return "depth in class tree following only interface_kind"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.diti(mainmodule)
+ 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)
+ end
end
end
var metrics = new MClassMetricSet
var min_vis = private_visibility
- metrics.register(new CNOA, new CNOP, new CNOC, new CNOD, new CDIT)
- metrics.register(new CNBIP(min_vis), new CNBRP(min_vis), new CNBHP(min_vis))
+ 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 CNBIP(mainmodule, min_vis))
+ metrics.register(new CNBRP(mainmodule, min_vis))
+ metrics.register(new CNBHP(mainmodule, min_vis))
#TODO metrics.register(new CNBI) # nb init
#TODO metrics.register(new CNBA) # nb attrs
#TODO metrics.register(new CNBM) # nb methods
fun collect(mclasses: Set[MClass], mainmodule: MModule) do
clear
for metric in metrics.values do
- for mclass in mclasses do
- metric.collect(mclass, mainmodule)
- end
+ metric.collect(mclasses)
end
end
end
interface MClassMetric
super Metric
redef type ELM: MClass
-
- # Collect the metric value for this mclass
- fun collect(mclass: MClass, mainmodule: MModule) is abstract
end
# Class Metric: Number of Ancestors
redef fun name do return "cnoa"
redef fun desc do return "number of ancestor classes"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.in_hierarchy(mainmodule).greaters.length - 1
+ 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
+ end
end
end
redef fun name do return "cnop"
redef fun desc do return "number of parent classes"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.in_hierarchy(mainmodule).direct_greaters.length
+ 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
+ end
end
end
redef fun name do return "cnoc"
redef fun desc do return "number of child classes"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.in_hierarchy(mainmodule).direct_smallers.length
+ 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
+ end
end
end
redef fun name do return "cnod"
redef fun desc do return "number of descendant classes"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.in_hierarchy(mainmodule).smallers.length - 1
+ 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
+ end
end
end
redef fun name do return "cdit"
redef fun desc do return "depth in class tree"
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.in_hierarchy(mainmodule).depth
+ 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
+ end
end
end
redef fun name do return "cnbip"
redef fun desc do return "number of introduced properties"
+ var mainmodule: MModule
var min_visibility: MVisibility
- init(min_visibility: MVisibility) do self.min_visibility = min_visibility
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.intro_mproperties(min_visibility).length
+ init(mainmodule: MModule, min_visibility: MVisibility) do
+ self.mainmodule = mainmodule
+ self.min_visibility = min_visibility
+ end
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ values[mclass] = mclass.intro_mproperties(min_visibility).length
+ end
end
end
redef fun name do return "cnbrp"
redef fun desc do return "number of redefined properties"
+ var mainmodule: MModule
var min_visibility: MVisibility
- init(min_visibility: MVisibility) do self.min_visibility = min_visibility
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.redef_mproperties(min_visibility).length
+ init(mainmodule: MModule, min_visibility: MVisibility) do
+ self.mainmodule = mainmodule
+ self.min_visibility = min_visibility
+ end
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ values[mclass] = mclass.redef_mproperties(min_visibility).length
+ end
end
end
redef fun name do return "cnbhp"
redef fun desc do return "number of inherited properties"
+ var mainmodule: MModule
var min_visibility: MVisibility
- init(min_visibility: MVisibility) do self.min_visibility = min_visibility
- redef fun collect(mclass, mainmodule) do
- values[mclass] = mclass.inherited_mproperties(mainmodule, min_visibility).length
+ init(mainmodule: MModule, min_visibility: MVisibility) do
+ self.mainmodule = mainmodule
+ self.min_visibility = min_visibility
+ end
+
+ redef fun collect(mclasses) do
+ for mclass in mclasses do
+ values[mclass] = mclass.inherited_mproperties(mainmodule, min_visibility).length
+ end
end
end
fun collect(mmodules: Set[MModule], mainmodule: MModule) do
clear
for metric in metrics.values do
- for mmodule in mmodules do
- metric.collect(mmodule, mainmodule)
- end
+ metric.collect(mmodules)
end
end
end
abstract class MModuleMetric
super Metric
redef type ELM: MModule
- # Collect the metric on the MModule
- #
- # Results are stored in the property `values`
- fun collect(mmodule: MModule, mainmodule: MModule) is abstract
end
# Module Metric: Number of Ancestors
redef fun name do return "mnoa"
redef fun desc do return "number of ancestor modules"
- redef fun collect(mmodule, main) do
- values[mmodule] = mmodule.in_importation.greaters.length - 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ values[mmodule] = mmodule.in_importation.greaters.length - 1
+ end
end
end
redef fun name do return "mnop"
redef fun desc do return "number of parent modules"
- redef fun collect(mmodule, main) do
- values[mmodule] = mmodule.in_importation.direct_greaters.length
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ values[mmodule] = mmodule.in_importation.direct_greaters.length
+ end
end
end
redef fun name do return "mnoc"
redef fun desc do return "number of child modules"
- redef fun collect(mmodule, main) do
- values[mmodule] = mmodule.in_importation.direct_smallers.length
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ values[mmodule] = mmodule.in_importation.direct_smallers.length
+ end
end
end
redef fun name do return "mnod"
redef fun desc do return "number of descendant modules"
- redef fun collect(mmodule, main) do
- values[mmodule] = mmodule.in_importation.smallers.length - 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ values[mmodule] = mmodule.in_importation.smallers.length - 1
+ end
end
end
redef fun name do return "mdit"
redef fun desc do return "depth in module tree"
- redef fun collect(mmodule, main) do
- values[mmodule] = mmodule.in_importation.depth
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ values[mmodule] = mmodule.in_importation.depth
+ end
end
end
redef fun name do return "mnbi"
redef fun desc do return "number of introduction in module"
- redef fun collect(mmodule, main) do
- values[mmodule] = mmodule.intro_mclasses.length
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ values[mmodule] = mmodule.intro_mclasses.length
+ end
end
end
redef fun name do return "mnbr"
redef fun desc do return "number of refinement in module"
- redef fun collect(mmodule, main) do
- var value = 0
- for mclassdef in mmodule.mclassdefs do
- if not mclassdef.is_intro then value += 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var value = 0
+ for mclassdef in mmodule.mclassdefs do
+ if not mclassdef.is_intro then value += 1
+ end
+ values[mmodule] = value
end
- values[mmodule] = value
end
end
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
- var value = 0
- for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == concrete_kind then value += 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var value = 0
+ for mclassdef in mmodule.mclassdefs do
+ if mclassdef.mclass.kind == concrete_kind then value += 1
+ end
+ values[mmodule] = value
end
- values[mmodule] = value
end
end
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
- var value = 0
- for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == abstract_kind then value += 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var value = 0
+ for mclassdef in mmodule.mclassdefs do
+ if mclassdef.mclass.kind == abstract_kind then value += 1
+ end
+ values[mmodule] = value
end
- values[mmodule] = value
end
end
redef fun name do return "mnbic"
redef fun desc do return "number of interface in module (intro + redef)"
- redef fun collect(mmodule, main) do
- var value = 0
- for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == interface_kind then value += 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var value = 0
+ for mclassdef in mmodule.mclassdefs do
+ if mclassdef.mclass.kind == interface_kind then value += 1
+ end
+ values[mmodule] = value
end
- values[mmodule] = value
end
end
redef fun name do return "mnbec"
redef fun desc do return "number of enum in module (intro + redef)"
- redef fun collect(mmodule, main) do
- var value = 0
- for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == enum_kind then value += 1
+ redef fun collect(mmodules) do
+ for mmodule in mmodules do
+ var value = 0
+ for mclassdef in mmodule.mclassdefs do
+ if mclassdef.mclass.kind == enum_kind then value += 1
+ end
+ values[mmodule] = value
end
- values[mmodule] = value
end
end