pep8analysis: intro a feature to clear the list of errors/notes
[nit.git] / src / metrics / rta_metrics.nit
index 9c70740..40408f3 100644 (file)
@@ -25,7 +25,7 @@ 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
@@ -80,12 +80,40 @@ private class RTAMetricsPhase
                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
 
 # Summary metrics