mmodules.add_all(mgroup.mmodules)
metrics.collect(new HashSet[MModule].from(mgroup.mmodules), mainmodule)
for name, metric in metrics.metrics do
- print toolcontext.format_h4("\t{name}: {metric.desc}")
- print toolcontext.format_p("\t avg: {metric.avg}")
- var max = metric.max
- print toolcontext.format_p("\t max: {max.first} ({max.second})")
- var min = metric.min
- print toolcontext.format_p("\t min: {min.first} ({min.second})")
+ if metric isa IntMetric then
+ print toolcontext.format_h4("\t{name}: {metric.desc}")
+ print toolcontext.format_p("\t avg: {metric.avg}")
+ var max = metric.max
+ print toolcontext.format_p("\t max: {max.first} ({max.second})")
+ var min = metric.min
+ print toolcontext.format_p("\t min: {min.first} ({min.second})")
+ end
end
end
end
metrics.collect(mmodules, mainmodule)
for name, metric in metrics.metrics do
- print toolcontext.format_h4( "\t{name}: {metric.desc}")
- print toolcontext.format_p("\t avg: {metric.avg}")
- var max = metric.max
- print toolcontext.format_p("\t max: {max.first} ({max.second})")
- var min = metric.min
- print toolcontext.format_p("\t min: {min.first} ({min.second})")
+ if metric isa IntMetric then
+ print toolcontext.format_h4( "\t{name}: {metric.desc}")
+ print toolcontext.format_p("\t avg: {metric.avg}")
+ var max = metric.max
+ print toolcontext.format_p("\t max: {max.first} ({max.second})")
+ var min = metric.min
+ print toolcontext.format_p("\t min: {min.first} ({min.second})")
+ end
end
end
end
# An abstract Metric on MModules
abstract class MModuleMetric
- super IntMetric[MModule]
+ super Metric
+ redef type ELM: MModule
# Collect the metric on the MModule
#
# Results are stored in the property `values`
# Module Metric: Number of Ancestors
class MNOA
super MModuleMetric
+ super IntMetric
redef fun name do return "mnoa"
redef fun desc do return "number of ancestor modules"
# Module Metric: Number of Parents
class MNOP
super MModuleMetric
+ super IntMetric
redef fun name do return "mnop"
redef fun desc do return "number of parent modules"
# Module Metric: Number of Children
class MNOC
super MModuleMetric
+ super IntMetric
redef fun name do return "mnoc"
redef fun desc do return "number of child modules"
# Module Metric: Number of Descendants
class MNOD
super MModuleMetric
+ super IntMetric
redef fun name do return "mnod"
redef fun desc do return "number of descendant modules"
# Module Metric: Depth in Tree
class MDIT
super MModuleMetric
+ super IntMetric
redef fun name do return "mdit"
redef fun desc do return "depth in module tree"
# count all mclasses introduced by the module
class MNBI
super MModuleMetric
+ super IntMetric
redef fun name do return "mnbi"
redef fun desc do return "number of introduction in module"
# count all mclasses refined in the module
class MNBR
super MModuleMetric
+ super IntMetric
redef fun name do return "mnbr"
redef fun desc do return "number of refinement in module"
redef fun collect(mmodule, main) do
- values[mmodule] = 0
+ var value = 0
for mclassdef in mmodule.mclassdefs do
- if not mclassdef.is_intro then values.inc(mmodule)
+ if not mclassdef.is_intro then value += 1
end
+ values[mmodule] = value
end
end
# Module Metric: Number of Concrete Class in module (intro + redef)
class MNBCC
super MModuleMetric
+ super IntMetric
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
- values[mmodule] = 0
+ var value = 0
for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == concrete_kind then values.inc(mmodule)
+ if mclassdef.mclass.kind == concrete_kind then value += 1
end
+ values[mmodule] = value
end
end
# Module Metric: Number of Abstract Class in module (intro + redef)
class MNBAC
super MModuleMetric
+ super IntMetric
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
- values[mmodule] = 0
+ var value = 0
for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == abstract_kind then values.inc(mmodule)
+ if mclassdef.mclass.kind == abstract_kind then value += 1
end
+ values[mmodule] = value
end
end
# Module Metric: Number of Interface in module (intro + redef)
class MNBIC
super MModuleMetric
+ super IntMetric
redef fun name do return "mnbic"
redef fun desc do return "number of interface in module (intro + redef)"
redef fun collect(mmodule, main) do
- values[mmodule] = 0
+ var value = 0
for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == interface_kind then values.inc(mmodule)
+ if mclassdef.mclass.kind == interface_kind then value += 1
end
+ values[mmodule] = value
end
end
# Module Metric: Number of Enum in module (intro + redef)
class MNBEC
super MModuleMetric
+ super IntMetric
redef fun name do return "mnbec"
redef fun desc do return "number of enum in module (intro + redef)"
redef fun collect(mmodule, main) do
- values[mmodule] = 0
+ var value = 0
for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass.kind == enum_kind then values.inc(mmodule)
+ if mclassdef.mclass.kind == enum_kind then value += 1
end
+ values[mmodule] = value
end
end