class ModelView
super ModelVisitor
+ autoinit(model, mainmodule, filter)
+
# The model to view through `self`.
var model: Model
+ # MModule used to flatten mclass hierarchy
+ var mainmodule: MModule
+
# MPackages visible through `self`.
var mpackages: Set[MPackage] is lazy do
var mpackages = new HashSet[MPackage]
return res
end
- private fun init_visitor(v: ModelVisitor) do
- v.min_visibility = self.min_visibility
- v.include_fictive = self.include_fictive
- v.include_empty_doc = self.include_empty_doc
- v.include_attribute = self.include_attribute
- v.include_test_suite = self.include_test_suite
+ # Searches the MEntity that matches `full_name`.
+ fun mentity_by_full_name(full_name: String): nullable MEntity do
+ for mentity in mentities do
+ if mentity.full_name == full_name then return mentity
+ end
+ return null
end
- # Searches MEntities that match `name`.
+ # Searches the MEntities that matches `full_name`.
fun mentities_by_name(name: String): Array[MEntity] do
var res = new Array[MEntity]
- for mentity in mentities do if mentity.name == name then res.add mentity
- return res
- end
-
- # Looks up a MEntity by its full `namespace`.
- #
- # Usefull when `mentities_by_name` returns conflicts.
- #
- # Namespaces must be of the form `package::core::module::Class::prop`.
- fun mentities_by_namespace(namespace: String): Array[MEntity] do
- var v = new LookupNamespaceVisitor(namespace)
- init_visitor(v)
- for mpackage in mpackages do
- v.enter_visit(mpackage)
+ for mentity in mentities do
+ if mentity.name == name then res.add mentity
end
- return v.results
+ return res
end
# Build an concerns tree with from `self`
fun to_tree: MEntityTree do
var v = new ModelTreeVisitor
- init_visitor(v)
+ v.filter = self.filter
for mpackage in mpackages do
v.enter_visit(mpackage)
end
return v.tree
end
+
+ # Build the POSet of `mmodules` importation.
+ fun mmodules_poset(mmodules: Set[MModule]): POSet[MModule] do
+ return model.mmodule_importation_hierarchy.sub(mmodules)
+ end
+
+ # Build the POSet of `mclasses` hierarchy.
+ fun mclasses_poset(mainmodule: MModule, mclasses: Set[MClass]): POSet[MClass] do
+ return mainmodule.flatten_mclass_hierarchy.sub(mclasses)
+ end
end
class LookupNamespaceVisitor
end
redef class MEntity
-
- # Get a public view of the model
- fun public_view: ModelView do
- var view = new ModelView(self.model)
- view.min_visibility = public_visibility
- return view
- end
-
- # Get a public view of the model
- fun protected_view: ModelView do
- var view = new ModelView(self.model)
- view.min_visibility = protected_visibility
- return view
- end
-
- # Get a public view of the model
- fun private_view: ModelView do
- var view = new ModelView(self.model)
- view.min_visibility = private_visibility
- return view
- end
-
private fun accept_namespace_visitor(v: LookupNamespaceVisitor) do
if v.parts.is_empty then return
if name != v.parts.first then return