From 745dbaf26686b362f266880eb6eed6c1ea88c7da Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 19 Jul 2013 22:53:00 -0400 Subject: [PATCH] nitmetrics: implements metrics as global phases Signed-off-by: Jean Privat --- src/metrics/generate_hierarchies.nit | 19 ++++++++++++- src/metrics/inheritance_metrics.nit | 15 ++++++++++ src/metrics/model_hyperdoc.nit | 15 ++++++++++ src/metrics/nullables_metrics.nit | 14 +++++++++ src/metrics/refinement_metrics.nit | 14 +++++++++ src/metrics/rta_metrics.nit | 14 +++++++++ src/metrics/self_metrics.nit | 15 +++++++++- src/metrics/static_types_metrics.nit | 14 +++++++++ src/metrics/tables_metrics.nit | 14 +++++++++ src/nitmetrics.nit | 52 ++-------------------------------- 10 files changed, 134 insertions(+), 52 deletions(-) diff --git a/src/metrics/generate_hierarchies.nit b/src/metrics/generate_hierarchies.nit index 8f6d894..4f172f4 100644 --- a/src/metrics/generate_hierarchies.nit +++ b/src/metrics/generate_hierarchies.nit @@ -19,8 +19,25 @@ 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 diff --git a/src/metrics/inheritance_metrics.nit b/src/metrics/inheritance_metrics.nit index 5251216..232a44a 100644 --- a/src/metrics/inheritance_metrics.nit +++ b/src/metrics/inheritance_metrics.nit @@ -19,6 +19,21 @@ module inheritance_metrics 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 diff --git a/src/metrics/model_hyperdoc.nit b/src/metrics/model_hyperdoc.nit index 8d8a10e..0e66ba4 100644 --- a/src/metrics/model_hyperdoc.nit +++ b/src/metrics/model_hyperdoc.nit @@ -19,6 +19,21 @@ module model_hyperdoc 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 diff --git a/src/metrics/nullables_metrics.nit b/src/metrics/nullables_metrics.nit index ff85b2a..70b709f 100644 --- a/src/metrics/nullables_metrics.nit +++ b/src/metrics/nullables_metrics.nit @@ -20,6 +20,20 @@ module nullables_metrics 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 diff --git a/src/metrics/refinement_metrics.nit b/src/metrics/refinement_metrics.nit index 549f661..eec9c28 100644 --- a/src/metrics/refinement_metrics.nit +++ b/src/metrics/refinement_metrics.nit @@ -19,6 +19,20 @@ module refinement_metrics 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) diff --git a/src/metrics/rta_metrics.nit b/src/metrics/rta_metrics.nit index 7ba1899..f494736 100644 --- a/src/metrics/rta_metrics.nit +++ b/src/metrics/rta_metrics.nit @@ -20,6 +20,20 @@ module rta_metrics 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) diff --git a/src/metrics/self_metrics.nit b/src/metrics/self_metrics.nit index 58aa69d..ad64c27 100644 --- a/src/metrics/self_metrics.nit +++ b/src/metrics/self_metrics.nit @@ -16,9 +16,22 @@ # 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 diff --git a/src/metrics/static_types_metrics.nit b/src/metrics/static_types_metrics.nit index 24796c6..3f28cee 100644 --- a/src/metrics/static_types_metrics.nit +++ b/src/metrics/static_types_metrics.nit @@ -20,6 +20,20 @@ module static_types_metrics 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 diff --git a/src/metrics/tables_metrics.nit b/src/metrics/tables_metrics.nit index dd1d8eb..41ce4d4 100644 --- a/src/metrics/tables_metrics.nit +++ b/src/metrics/tables_metrics.nit @@ -19,6 +19,20 @@ module tables_metrics 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) diff --git a/src/nitmetrics.nit b/src/nitmetrics.nit index 0f6f430..6b12f88 100644 --- a/src/nitmetrics.nit +++ b/src/nitmetrics.nit @@ -55,55 +55,7 @@ end 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 -- 1.7.9.5