model_utils: All modules concerned in a class
[nit.git] / src / model_utils.nit
index df90150..4d8d615 100644 (file)
@@ -180,6 +180,31 @@ redef class MClass
                return res
        end
 
+       fun mmodules: Set[MModule] do
+               var mdls = new HashSet[MModule]
+               for mclassdef in mclassdefs do mdls.add(mclassdef.mmodule)
+               return mdls
+       end
+
+       # Get the list of MModule concern in 'self'
+       fun concerns: HashMap[MModule, nullable List[MModule]] do
+               var hm = new HashMap[MModule, nullable List[MModule]]
+               for mmodule in mmodules do
+                       var owner = mmodule.public_owner
+                       if owner == null then
+                               hm[mmodule] = null
+                       else
+                               if hm.has_key(owner) then
+                                       hm[owner].add(mmodule)
+                               else
+                                       hm[owner] = new List[MModule]
+                                       hm[owner].add(mmodule)
+                               end
+                       end
+               end
+               return hm
+       end
+
        fun is_class: Bool do
                return self.kind == concrete_kind or self.kind == abstract_kind
        end