Property definitions

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