From 0a521165197932c05b0f28ddeabfc17a20576448 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Wed, 18 Jun 2014 15:14:08 -0400 Subject: [PATCH] model_utils: allow intro and redef mclasses filtering Signed-off-by: Alexandre Terrasa --- src/model_utils.nit | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/model_utils.nit b/src/model_utils.nit index e1d0f52..be3fd4d 100644 --- a/src/model_utils.nit +++ b/src/model_utils.nit @@ -23,7 +23,7 @@ redef class MGroup fun in_nesting_intro_mclasses(min_visibility: MVisibility): Set[MClass] do var res = new HashSet[MClass] var lst = in_nesting.direct_smallers - for mmodule in mmodules do res.add_all mmodule.intro_mclasses + for mmodule in mmodules do res.add_all mmodule.filter_intro_mclasses(min_visibility) for mgrp in lst do res.add_all mgrp.in_nesting_intro_mclasses(min_visibility) return res end @@ -31,7 +31,7 @@ redef class MGroup fun in_nesting_redef_mclasses(min_visibility: MVisibility): Set[MClass] do var res = new HashSet[MClass] var lst = in_nesting.direct_smallers - for mmodule in mmodules do res.add_all mmodule.redef_mclasses + for mmodule in mmodules do res.add_all mmodule.filter_redef_mclasses(min_visibility) for mgrp in lst do res.add_all mgrp.in_nesting_redef_mclasses(min_visibility) return res end @@ -89,6 +89,17 @@ redef class MModule return res end + # The list of intro mclass in the module. + # with visibility >= to min_visibility + fun filter_intro_mclasses(min_visibility: MVisibility): Set[MClass] do + var res = new HashSet[MClass] + for mclass in intro_mclasses do + if mclass.visibility < min_visibility then continue + res.add mclass + end + return res + end + # Get the list of mclasses refined in 'self'. fun redef_mclasses: Set[MClass] do var mclasses = new HashSet[MClass] @@ -98,6 +109,16 @@ redef class MModule return mclasses end + # Get the list of mclasses refined in 'self'. + fun filter_redef_mclasses(min_visibility: MVisibility): Set[MClass] do + var mclasses = new HashSet[MClass] + for c in mclassdefs do + if c.mclass.visibility < min_visibility then continue + if not c.is_intro then mclasses.add(c.mclass) + end + return mclasses + end + # Get the list of all mclasses imported by 'self'. fun imported_mclasses: Set[MClass] do var mclasses = new HashSet[MClass] @@ -111,7 +132,7 @@ redef class MModule fun in_nesting_intro_mclasses(min_visibility: MVisibility): Set[MClass] do var res = new HashSet[MClass] for mmodule in in_nesting.greaters do - for mclass in mmodule.intro_mclasses do + for mclass in mmodule.filter_intro_mclasses(min_visibility) do if mclass.visibility < min_visibility then continue res.add mclass end @@ -122,7 +143,7 @@ redef class MModule fun in_nesting_redef_mclasses(min_visibility: MVisibility): Set[MClass] do var res = new HashSet[MClass] for mmodule in self.in_nesting.greaters do - for mclass in mmodule.redef_mclasses do + for mclass in mmodule.filter_redef_mclasses(min_visibility) do if mclass.visibility < min_visibility then continue res.add mclass end -- 1.7.9.5