# Metrics from RTA
module rta_metrics
-import modelbuilder
private import rapid_type_analysis
-private import metrics_base
+import metrics_base
import mmodules_metrics
import mclasses_metrics
-import frontend
redef class ToolContext
- var rta_metrics_phase = new RTAMetricsPhase(self, null)
+ var rta_metrics_phase: Phase = new RTAMetricsPhase(self, null)
end
private class RTAMetricsPhase
super Phase
- redef fun process_mainmodule(mainmodule)
+ redef fun process_mainmodule(mainmodule, given_mmodules)
do
if not toolcontext.opt_rta.value and not toolcontext.opt_all.value then return
var csv = toolcontext.opt_csv.value
gmetrics.collect(mtypes)
gmetrics.to_console(1, not toolcontext.opt_nocolors.value)
if csv then gmetrics.to_csv.save("{out}/complexity.csv")
+
+ callsite_info(analysis)
+
+ # dump type and method infos
+ if csv then
+ analysis.live_types_to_csv.save("{out}/rta_types.csv")
+ analysis.live_methods_to_tree.write_to_file("{out}/rta_methods.dat")
+ end
+ end
+
+ fun callsite_info(rta: RapidTypeAnalysis)
+ do
+ print toolcontext.format_h2("\n ## Callsites")
+ print "* {rta.live_callsites.length} live callsites"
+
+ var csep = new Counter[MPropDef]
+ var cglo = new Counter[MPropDef]
+ var morphisme = new Counter[Int]
+ for cs in rta.live_callsites do
+ csep.inc(cs.mpropdef)
+ var targets = rta.live_targets(cs)
+ for d in targets do
+ cglo.inc(d)
+ end
+ morphisme.inc(targets.length)
+ end
+
+ print toolcontext.format_h3("MMethodDef locally designated (by number of CallSites)")
+ csep.print_summary
+ csep.print_elements(5)
+
+ print toolcontext.format_h3("MMethodDef possibly invoked at runtime (by number of CallSites)")
+ cglo.print_summary
+ cglo.print_elements(5)
end
end
super
tnlc.values.inc(mtype)
- if mtype isa MNullableType then mtype = mtype.mtype
+ mtype = mtype.as_notnullable
if mtype isa MClassType then
cnlc.values.inc(mtype.mclass)
end
redef class MType
private fun signature_depth: Int do
- var mtype = self
- if mtype isa MNullableType then mtype = mtype.mtype
+ var mtype = self.as_notnullable
if not mtype isa MGenericType then return 0
var depth = 0