mpackage: Add `mpackage` importation graph
[nit.git] / src / model / mpackage.nit
index d2f15dd..f014ac9 100644 (file)
@@ -19,6 +19,7 @@ import model_base
 private import more_collections
 import poset
 import mdoc
+import graph::digraph
 
 # A Nit package, that encompass a product
 class MPackage
@@ -47,6 +48,8 @@ class MPackage
        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
 
@@ -77,6 +80,36 @@ class MPackage
                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
 
 # A group of modules in a package
@@ -147,6 +180,11 @@ class MGroup
 end
 
 redef class Model
+
+       # Full package importation graph
+       # Each package is in relation with itself
+       var mpackage_importation_graph = new HashDigraph[MPackage]
+
        # packages of the model
        var mpackages = new Array[MPackage]