Property definitions

nitc $ InheritanceMetricsPhase :: defaultinit
# 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