# ~~~
module model_visitor
-import model
+import model_filters
# The abstract model visitor template.
#
# Specific visitor must implement the `visit` method to perform the work.
abstract class ModelVisitor
+
# Visit the entity `e`.
#
# This method setups `current_entity` and call `visit`.
# If `e` is null, nothing is done.
fun enter_visit(e: nullable MEntity) do
if e == null then return
+ if not accept_mentity(e) then return
var old_entity = current_entity
current_entity = e
visit(e)
#
# It should not be called directly but used by `enter_visit`
protected fun visit(e: MEntity) is abstract
+
+ # Filters to apply when visiting the model.
+ #
+ # See ModelFilters for configuration.
+ var filter: ModelFilter is lazy, writable, optional do
+ return new ModelFilter(
+ min_visibility = protected_visibility,
+ accept_fictive = false,
+ accept_test = false,
+ accept_example = false,
+ accept_redef = true,
+ accept_extern = true,
+ accept_attribute = true,
+ accept_empty_doc = true
+ )
+ end
+
+ # Should we accept this `mentity` from the view?
+ #
+ # If no `override_filter` is passed then use `self.filter`.
+ fun accept_mentity(mentity: MEntity, override_filter: nullable ModelFilter): Bool do
+ if override_filter != null then
+ return override_filter.accept_mentity(mentity)
+ end
+ return filter.accept_mentity(mentity)
+ end
end
redef class MEntity