nitc :: MPackage :: defaultinit
# A Nit package, that encompass a product
class MPackage
super MConcern
# The name of the package
redef var name
redef fun full_name do return name
redef var c_name = name.to_cmangle is lazy
# The model of the package
redef var model
redef var location
# The root of the group tree
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
do
model.mpackages.add(self)
# Add `self` to the importation graph
model.mpackage_importation_graph.add_vertex(self)
model.mpackage_by_name.add_one(name, self)
end
# MPackage are always roots of the concerns hierarchy
redef fun parent_concern do return null
redef fun mdoc_or_fallback
do
var mdoc = self.mdoc
if mdoc != null then return mdoc
var root = self.root
if root != null then return root.mdoc_or_fallback
return null
end
# Does `self` have a source file?
fun has_source: Bool do return location.file != null
# The path to `self`
fun package_path: nullable String do
if not has_source then return null
return location.file.as(not null).filename
end
# Is `self` in its own directory?
fun is_expanded: Bool do
var path = package_path
if path == null then return false
return not path.has_suffix(".nit")
end
# The path to `self` ini file
fun ini_path: nullable String do
var path = package_path
if path == null then return null
if is_expanded then return path / "package.ini"
return path.dirname / "{name}.ini"
end
# Does `self` have a ini file?
fun has_ini: Bool do
var ini_path = self.ini_path
if ini_path == null then return false
return ini_path.file_exists
end
# The path to `self` README.md
fun readme_path: nullable String do
var path = package_path
if path == null then return null
if not is_expanded then return null
return path / "README.md"
end
# Does `self` have a README.md file?
fun has_readme: Bool do
var readme_path = self.readme_path
if readme_path == null then return false
return readme_path.file_exists
end
end
src/model/mpackage.nit:24,1--113,3