X-Git-Url: http://nitlanguage.org diff --git a/src/model/mmodule.nit b/src/model/mmodule.nit index 648eb49..22e10c2 100644 --- a/src/model/mmodule.nit +++ b/src/model/mmodule.nit @@ -17,7 +17,6 @@ # modules and module hierarchies in the metamodel module mmodule -import poset import location import mproject private import more_collections @@ -58,13 +57,12 @@ redef class MGroup # The loaded modules of this group var mmodules = new Array[MModule] - # Placebo stuff to find the owner (module with same name) - # null is returned if there is no owner, or if it is not loaded yet - fun fuzzy_owner: nullable MModule - do - for m in mmodules do if m.name == name then return m - return null - end + # The default module of a group (if any, and if loaded) + # + # The default module of a group is the one that has the same name. + # Return `null` if the group has no default module or if the default + # module is not loaded. + var default_mmodule: nullable MModule = null end # A Nit module is usually associated with a Nit source file. @@ -74,12 +72,6 @@ class MModule # The model considered redef var model: Model - # placebo for old module nesting hierarchy - # return null if self is not nested (ie. is a top-level module) - # - # TODO REMOVE, rely on mgroup instead - var direct_owner: nullable MModule - # The group of module in the project if any var mgroup: nullable MGroup @@ -125,20 +117,22 @@ class MModule self.mgroup = mgroup if mgroup != null then mgroup.mmodules.add(self) + if mgroup.name == name then + assert mgroup.default_mmodule == null + mgroup.default_mmodule = self + end # placebo for old module nesting hierarchy - var direct_owner = mgroup.fuzzy_owner + var direct_owner = mgroup.default_mmodule if direct_owner == self then # The module is the new owner of its own group, thus adopt the other modules for m in mgroup.mmodules do if m == self then continue - m.direct_owner = self model.mmodule_nesting_hierarchy.add_edge(self, m) end - # The potential owner is the the fuzzy_owner of the parent group - if mgroup.parent != null then direct_owner = mgroup.parent.fuzzy_owner + # The potential owner is the default_mmodule of the parent group + if mgroup.parent != null then direct_owner = mgroup.parent.default_mmodule end if direct_owner != self and direct_owner != null then - self.direct_owner = direct_owner model.mmodule_nesting_hierarchy.add_edge(direct_owner, self) end end @@ -193,18 +187,6 @@ class MModule end end - # placebo for old module nesting hierarchy - fun public_owner: nullable MModule - do - var mgroup = self.mgroup - if mgroup == null then return null - mgroup = mgroup.mproject.root - if mgroup.mmodules.is_empty then return null - var res = mgroup.fuzzy_owner - if res == self then return null - return res - end - # Return true if a class or a property introduced in `intro_mmodule` with a visibility of `visibility` is visible in self. fun is_visible(intro_mmodule: MModule, visibility: MVisibility): Bool do @@ -225,7 +207,7 @@ class MModule # Is the mmodule created for internal purpose? # Fictive module are instantied internally but they should not be # exposed to the final user - var is_fictive: Bool writable = false + var is_fictive: Bool = false is writable redef fun parent_concern do return mgroup end