X-Git-Url: http://nitlanguage.org diff --git a/src/model/mproject.nit b/src/model/mproject.nit index 4208008..283d54c 100644 --- a/src/model/mproject.nit +++ b/src/model/mproject.nit @@ -18,51 +18,64 @@ module mproject import model_base private import more_collections import poset +import mdoc -# A Nit project, thas encompass a product +# A Nit project, that encompass a product class MProject - super MEntity + super MConcern # The name of the project redef var name: String + redef fun full_name do return name + + redef var c_name = name.to_cmangle is lazy + # The model of the project - var model: Model + redef var model: Model # The root of the group tree - var root: nullable MGroup writable = null + var root: nullable MGroup = null is writable # The group tree, as a POSet var mgroups = new POSet[MGroup] redef fun to_s do return name - init(name: String, model: Model) + init do - self.name = name - self.model = model model.mprojects.add(self) model.mproject_by_name.add_one(name, self) end + + # MProject are always roots of the concerns hierarchy + redef fun parent_concern do return null + + redef fun mdoc_or_fallback + do + if mdoc != null then return mdoc + return root.mdoc_or_fallback + end end # A group of modules in a project class MGroup - super MEntity + super MConcern # The name of the group # empty name for a default group in a single-module project redef var name: String - # The englobing project + # The enclosing project var mproject: MProject # The parent group if any # see `in_nesting` for more var parent: nullable MGroup - # fully qualified name - fun full_name: String + # Fully qualified name. + # It includes each parent group separated by `/` + redef fun full_name do var p = parent if p == null then return name @@ -70,25 +83,33 @@ class MGroup end # The group is the group tree on the project (`mproject.mgroups`) - # nested groups (children) are smallers + # nested groups (children) are smaller # nesting group (see `parent`) is bigger - var in_nesting: POSetElement[MGroup] + var in_nesting: POSetElement[MGroup] is noinit + + # Is `self` the root of its project? + fun is_root: Bool do return mproject.root == self - # The filepath (usualy a directory) of the group, if any - var filepath: nullable String writable + # The filepath (usually a directory) of the group, if any + var filepath: nullable String = null is writable - init (name: String, mproject: MProject, parent: nullable MGroup) + init do - self.name = name - self.mproject = mproject - self.parent = parent var tree = mproject.mgroups self.in_nesting = tree.add_node(self) + var parent = self.parent if parent != null then tree.add_edge(self, parent) end end + redef fun model do return mproject.model + + redef fun parent_concern do + if not is_root then return parent + return mproject + end + redef fun to_s do return name end @@ -97,7 +118,7 @@ redef class Model var mprojects = new Array[MProject] # Collections of project grouped by their names - private var mproject_by_name: MultiHashMap[String, MProject] = new MultiHashMap[String, MProject] + private var mproject_by_name = new MultiHashMap[String, MProject] # Return all project named `name` # If such a project is not yet loaded, null is returned (instead of an empty array)