# Extract metrics about inheritance from model.
private class InheritanceMetricsPhase
super Phase
redef fun process_mainmodule(mainmodule, given_mmodules)
do
if not toolcontext.opt_inheritance.value and not toolcontext.opt_all.value then return
var csv = toolcontext.opt_csv.value
var out = "{toolcontext.opt_dir.value or else "metrics"}/inheritance"
out.mkdir
var model = toolcontext.modelbuilder.model
var filter = new ModelFilter(min_visibility = private_visibility)
print toolcontext.format_h1("\n# Inheritance metrics")
var hmetrics = new MetricSet
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(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]
for mpackage in model.mpackages do
print toolcontext.format_h2("\n ## package {mpackage}")
for mgroup in mpackage.mgroups do
if mgroup.mmodules.is_empty then continue
# Scalar metrics
print toolcontext.format_h3(" `- group {mgroup.full_name}")
var mod_mclasses = new HashSet[MClass]
for mmodule in mgroup.mmodules do mod_mclasses.add_all(mmodule.intro_mclasses)
if mod_mclasses.is_empty then continue
mmodules.add_all(mgroup.mmodules)
mclasses.add_all(mod_mclasses)
cmetrics.clear
cmetrics.collect(new HashSet[MClass].from(mod_mclasses))
cmetrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then cmetrics.to_csv.write_to_file("{out}/{mgroup}_classes.csv")
hmetrics.clear
hmetrics.collect(new HashSet[MModule].from(mgroup.mmodules))
hmetrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then hmetrics.to_csv.write_to_file("{out}/{mgroup}_inheritance.csv")
end
end
if not mclasses.is_empty then
# Global metrics
print toolcontext.format_h2("\n ## global metrics")
cmetrics.clear
cmetrics.collect(mclasses)
cmetrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then cmetrics.to_csv.write_to_file("{out}/summary_classes.csv")
hmetrics.clear
hmetrics.collect(mmodules)
hmetrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then hmetrics.to_csv.write_to_file("{out}/summary_inheritance.csv")
end
end
end
src/metrics/inheritance_metrics.nit:30,1--104,3