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
- end
-
- # Searches MEntities that match `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
-
# Searches the MEntity that matches `full_name`.
fun mentity_by_full_name(full_name: String): nullable MEntity do
for mentity in mentities do
return null
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)
+ # 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
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 model.mmodule_importation_hierarchy.sub(mmodules)
end
- # Build the POSet of `mmodules` hierarchy.
+ # 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
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