module generate_hierarchies
import model
-
private import metrics_base
+import frontend
+
+redef class ToolContext
+ var generate_hierarchies_phase: Phase = new GenerateHierarchyPhase(self, null)
+end
+
+private class GenerateHierarchyPhase
+ super Phase
+
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_generate_hyperdoc.value and not toolcontext.opt_all.value then return
+ var model = toolcontext.modelbuilder.model
+ generate_module_hierarchy(toolcontext, model)
+ generate_classdef_hierarchy(toolcontext, model)
+ generate_class_hierarchy(toolcontext, mainmodule)
+ end
+end
# Create a dot file representing the module hierarchy of a model.
# Importation relation is represented with arrow
import model
private import metrics_base
+import phase
+import frontend
+
+redef class ToolContext
+ var inheritance_metrics_phase = new InheritanceMetricsPhase(self, null)
+end
+
+private class InheritanceMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_inheritance.value and not toolcontext.opt_all.value then return
+ compute_inheritance_metrics(toolcontext, toolcontext.modelbuilder.model)
+ end
+end
redef class Model
# Extract the subset of classes from a set of mclass
import model
import metrics_base
+import phase
+import frontend
+
+redef class ToolContext
+ var model_hyperdoc_phase = new ModelHyperdocPhase(self, null)
+end
+
+private class ModelHyperdocPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_generate_hyperdoc.value and not toolcontext.opt_all.value then return
+ generate_model_hyperdoc(toolcontext, toolcontext.modelbuilder.model)
+ end
+end
# Genetate a HTML file for the model.
# The generated file contains the description of each entity of the model
import modelbuilder
private import typing
private import metrics_base
+import frontend
+
+redef class ToolContext
+ var nullables_metrics_phase = new NullablesMetricsPhase(self, null)
+end
+
+private class NullablesMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_nullables.value and not toolcontext.opt_all.value then return
+ compute_nullables_metrics(toolcontext.modelbuilder)
+ end
+end
private class NullableSends
super Visitor
import model
private import metrics_base
+import frontend
+
+redef class ToolContext
+ var refinement_metrics_phase = new RefinementMetricsPhase(self, null)
+end
+
+private class RefinementMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_refinement.value and not toolcontext.opt_all.value then return
+ compute_refinement_metrics(toolcontext.modelbuilder.model)
+ end
+end
# Print refinement usage metrics
fun compute_refinement_metrics(model: Model)
import modelbuilder
private import rapid_type_analysis
private import metrics_base
+import frontend
+
+redef class ToolContext
+ var rta_metrics_phase = new RTAMetricsPhase(self, null)
+end
+
+private class RTAMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_rta.value and not toolcontext.opt_all.value then return
+ compute_rta_metrics(toolcontext.modelbuilder, mainmodule)
+ end
+end
redef class RapidTypeAnalysis
redef fun add_type(mtype)
# Metrics about the usage of explicit and implicit self
module self_metrics
-
import modelbuilder
private import metrics_base
+import frontend
+
+redef class ToolContext
+ var self_metrics_phase = new SelfMetricsPhase(self, null)
+end
+
+private class SelfMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_self.value and not toolcontext.opt_all.value then return
+ compute_self_metrics(toolcontext.modelbuilder)
+ end
+end
private class ASelfVisitor
super Visitor
private import metrics_base
import modelbuilder
import modelize_class
+import frontend
+
+redef class ToolContext
+ var static_types_metrics_phase = new StaticTypesMetricsPhase(self, null)
+end
+
+private class StaticTypesMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_static_types.value and not toolcontext.opt_all.value then return
+ compute_static_types_metrics(toolcontext.modelbuilder)
+ end
+end
# The job of this visitor is to resolve all types found
private class ATypeCounterVisitor
import model
private import metrics_base
+import frontend
+
+redef class ToolContext
+ var tables_metrics_phase = new TablesMetricsPhase(self, null)
+end
+
+private class TablesMetricsPhase
+ super Phase
+ redef fun process_mainmodule(mainmodule)
+ do
+ if not toolcontext.opt_tables.value and not toolcontext.opt_all.value then return
+ compute_tables_metrics(mainmodule)
+ end
+end
# Print class tables metrics for the classes of the program main
fun compute_tables_metrics(main: MModule)
print "*** METRICS ***"
+toolcontext.run_global_phases(mainmodule)
+
# All metrics computation ?
var all = toolcontext.opt_all.value
-
-# Inheritance usage metrics
-if all or toolcontext.opt_inheritance.value then
- print ""
- compute_inheritance_metrics(toolcontext, model)
-end
-
-# Refinement usage metrics
-if all or toolcontext.opt_refinement.value then
- print ""
- compute_refinement_metrics(model)
-end
-
-# Self usage metrics
-if all or toolcontext.opt_self.value then
- print ""
- compute_self_metrics(modelbuilder)
-end
-
-# Nullables metrics
-if all or toolcontext.opt_nullables.value then
- print ""
- compute_nullables_metrics(modelbuilder)
-end
-
-# Static types metrics
-if all or toolcontext.opt_static_types.value then
- print ""
- compute_static_types_metrics(modelbuilder)
-end
-
-# Tables metrics
-if all or toolcontext.opt_tables.value then
- print ""
- compute_tables_metrics(mainmodule)
-end
-
-# RTA metrics
-if all or toolcontext.opt_rta.value then
- print ""
- compute_rta_metrics(modelbuilder, mainmodule)
-end
-
-# Generate Hyperdoc
-if toolcontext.opt_generate_hyperdoc.value then
- generate_module_hierarchy(toolcontext, model)
- generate_classdef_hierarchy(toolcontext, model)
- generate_class_hierarchy(toolcontext, mainmodule)
- generate_model_hyperdoc(toolcontext, model)
-end