From: Alexandre Terrasa Date: Wed, 18 Jun 2014 19:14:08 +0000 (-0400) Subject: model_utils: allow intro and redef mclasses filtering X-Git-Tag: v0.6.6~16^2 X-Git-Url: http://nitlanguage.org model_utils: allow intro and redef mclasses filtering Signed-off-by: Alexandre Terrasa --- 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