# Model exploration and traversing facilities
module model_utils
-import toolcontext
-import exprbuilder
+import modelbuilder
redef class MModule
# Get the list of mclasses refined in 'self'.
end
return mclasses
end
-
- # Get all mclasses in 'self' with their state
- fun mclasses: HashMap[MClass, Int] do
- var mclasses = new HashMap[MClass, Int]
- for c in intro_mclasses do mclasses[c] = c_is_intro
- for r in redef_mclasses do mclasses[r] = c_is_refined
- for i in imported_mclasses do mclasses[i] = c_is_imported
- return mclasses
- end
end
redef class MClass
+ # Get the public owner of 'self'.
+ fun public_owner: MModule do
+ var public_owner = self.intro_mmodule.public_owner
+ if public_owner == null then
+ return self.intro_mmodule
+ else
+ return public_owner
+ end
+ end
+
# Get direct parents of 'self'.
fun parents: Set[MClass] do
var ret = new HashSet[MClass]
return res
end
+ # Get the set of properties introduced in 'self'.
+ fun intro_mproperties: Set[MProperty] do
+ var res = new HashSet[MProperty]
+ for mclassdef in mclassdefs do
+ for mpropdef in mclassdef.mpropdefs do
+ if mpropdef.is_intro then res.add(mpropdef.mproperty)
+ end
+ end
+ return res
+ end
+
# Get the list of locally refined methods in 'self'.
fun redef_methods: Set[MMethod] do
var res = new HashSet[MMethod]
return res
end
+ # Get the set of locally refined properties in 'self'.
+ fun redef_mproperties: Set[MProperty] do
+ var res = new HashSet[MProperty]
+ for mclassdef in mclassdefs do
+ for mpropdef in mclassdef.mpropdefs do
+ if not mpropdef.is_intro then res.add(mpropdef.mproperty)
+ end
+ end
+ return res
+ end
+
# Get the list of methods inherited by 'self'.
fun inherited_methods: Set[MMethod] do
var res = new HashSet[MMethod]
return res
end
+ # Get the set of all properties inherited by self
+ fun inherited_mproperties: Set[MProperty] do
+ var res = new HashSet[MProperty]
+ for s in ancestors do
+ for m in s.intro_mproperties do
+ if not self.intro_mproperties.has(m) and not self.redef_mproperties.has(m) then res.add(m)
+ end
+ end
+ return res
+ end
+
# Get the list of all virtual types available in 'self'.
fun virtual_types: Set[MVirtualTypeProp] do
var res = new HashSet[MVirtualTypeProp]
end
end
-# MClass State
-fun c_is_intro: Int do return 1
-fun c_is_refined: Int do return 2
-fun c_is_imported: Int do return 3
+# Sorters
+
+# Sort mmodules by their name
+class MModuleNameSorter
+ super AbstractSorter[MModule]
+ redef fun compare(a, b) do return a.name <=> b.name
+ init do end
+end
+
+# Sort mclasses by their name
+class MClassNameSorter
+ super AbstractSorter[MClass]
+ redef fun compare(a, b) do return a.name <=> b.name
+ init do end
+end
+
+# Sort mproperties by their name
+class MPropertyNameSorter
+ super AbstractSorter[MProperty]
+ redef fun compare(a, b) do return a.name <=> b.name
+ init do end
+end
+
+# Sort mpropdefs by their name
+class MPropDefNameSorter
+ super AbstractSorter[MPropDef]
+ redef fun compare(a, b) do return a.mproperty.name <=> b.mproperty.name
+ init do end
+end