Introduced properties

Redefined properties

redef type SELF: RTAMetricsPhase

nitc $ RTAMetricsPhase :: SELF

Type of this instance, automatically specialized in every class
redef fun process_mainmodule(mainmodule: MModule, given_mmodules: SequenceRead[MModule])

nitc $ RTAMetricsPhase :: process_mainmodule

Specific action to execute on the whole program.

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
private var _depends: nullable Collection[Phase]

nitc :: Phase :: _depends

The explicit dependences, used to initialize in_importation
private var _disabled: Bool

nitc :: Phase :: _disabled

Is the phase globally disabled?
private var _in_hierarchy: POSetElement[Phase]

nitc :: Phase :: _in_hierarchy

The dependence relation of the phase with the other phases
private var _toolcontext: ToolContext

nitc :: Phase :: _toolcontext

The toolcontext instance attached to the phase
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
init defaultinit(toolcontext: ToolContext, depends: nullable Collection[Phase])

nitc :: Phase :: defaultinit

init defaultinit(toolcontext: ToolContext, depends: nullable Collection[Phase])

nitc :: RTAMetricsPhase :: defaultinit

fun depends: nullable Collection[Phase]

nitc :: Phase :: depends

The explicit dependences, used to initialize in_importation
protected fun depends=(depends: nullable Collection[Phase])

nitc :: Phase :: depends=

The explicit dependences, used to initialize in_importation
fun disabled: Bool

nitc :: Phase :: disabled

Is the phase globally disabled?
fun disabled=(disabled: Bool)

nitc :: Phase :: disabled=

Is the phase globally disabled?
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun in_hierarchy: POSetElement[Phase]

nitc :: Phase :: in_hierarchy

The dependence relation of the phase with the other phases
protected fun in_hierarchy=(in_hierarchy: POSetElement[Phase])

nitc :: Phase :: in_hierarchy=

The dependence relation of the phase with the other phases
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
private intern fun native_class_name: CString

core :: Object :: native_class_name

The class name of the object in CString format.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun process_annotated_node(node: ANode, nat: AAnnotation)

nitc :: Phase :: process_annotated_node

Specific actions to execute on annotated nodes
fun process_mainmodule(mainmodule: MModule, given_mmodules: SequenceRead[MModule])

nitc :: Phase :: process_mainmodule

Specific action to execute on the whole program.
fun process_nclassdef(nclassdef: AClassdef)

nitc :: Phase :: process_nclassdef

Specific actions to execute on the tree of a class definition
fun process_nmodule(nmodule: AModule)

nitc :: Phase :: process_nmodule

Specific actions to execute on the whole tree of a module
fun process_nmodule_after(nmodule: AModule)

nitc :: Phase :: process_nmodule_after

Specific actions to execute on the whole tree of a module
fun process_npropdef(npropdef: APropdef)

nitc :: Phase :: process_npropdef

Specific actions to execute on the tree of a property
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun toolcontext: ToolContext

nitc :: Phase :: toolcontext

The toolcontext instance attached to the phase
protected fun toolcontext=(toolcontext: ToolContext)

nitc :: Phase :: toolcontext=

The toolcontext instance attached to the phase
package_diagram nitc::rta_metrics::RTAMetricsPhase RTAMetricsPhase nitc::Phase Phase nitc::rta_metrics::RTAMetricsPhase->nitc::Phase core::Object Object nitc::Phase->core::Object ...core::Object ... ...core::Object->core::Object

Ancestors

interface Object

core :: Object

The root of the class hierarchy.

Parents

abstract class Phase

nitc :: Phase

Abstraction of steps in the analysis/processing of Nit programs

Class definitions

nitc $ RTAMetricsPhase
private class RTAMetricsPhase
	super Phase
	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
		var out = "{toolcontext.opt_dir.value or else "metrics"}/rta"
		out.mkdir

		var model = toolcontext.modelbuilder.model
		var filter = new ModelFilter(min_visibility = protected_visibility)

		print toolcontext.format_h1("\n# RTA metrics")

		print toolcontext.format_h2("\n ## Live instances by mainmodules")
		var mmetrics = new MetricSet
		mmetrics.register(new MNLC(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.register(new MNLT(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.register(new MNCT(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.register(new MNLI(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.register(new MNLM(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.register(new MNLMD(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.register(new MNLDD(model, mainmodule, filter, toolcontext.modelbuilder))
		mmetrics.collect(new HashSet[MModule].from([mainmodule]))
		mmetrics.to_console(1, not toolcontext.opt_nocolors.value)
		if csv then mmetrics.to_csv.write_to_file("{out}/{mainmodule}.csv")

		var mtypes = new HashSet[MType]
		var analysis = new MetricsRapidTypeAnalysis(toolcontext.modelbuilder, mainmodule)
		analysis.run_analysis
		mtypes.add_all(analysis.live_types)
		mtypes.add_all(analysis.live_cast_types)

		print toolcontext.format_h2("\n ## Total live instances by mclasses")
		var cmetrics = new MetricSet
		cmetrics.register(analysis.cnli)
		cmetrics.register(analysis.cnlc)
		cmetrics.to_console(1, not toolcontext.opt_nocolors.value)
		if csv then cmetrics.to_csv.write_to_file("{out}/mclasses.csv")

		print toolcontext.format_h2("\n ## Total live instances by mtypes")
		var tmetrics = new MetricSet
		tmetrics.register(analysis.tnli)
		tmetrics.register(analysis.tnlc)
		tmetrics.to_console(1, not toolcontext.opt_nocolors.value)
		if csv then tmetrics.to_csv.write_to_file("{out}/mtypes.csv")

		print toolcontext.format_h2("\n ## MType complexity")
		var gmetrics = new MetricSet
		gmetrics.register(new TAGS)
		gmetrics.register(new TDGS)
		gmetrics.collect(mtypes)
		gmetrics.to_console(1, not toolcontext.opt_nocolors.value)
		if csv then gmetrics.to_csv.write_to_file("{out}/complexity.csv")

		callsite_info(analysis)

		# dump type and method infos
		if csv then
			analysis.live_types_to_csv.write_to_file("{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
src/metrics/rta_metrics.nit:31,1--120,3