-import model
-
-redef class MEntity
-
- # Collect mentities with a fully qualified `namespace`.
- fun collect_by_namespace(namespace: String): Array[MEntity] is abstract
-
- private fun lookup_in(mentities: Collection[MEntity], namespace: String, res: Array[MEntity]) do
- var parts = namespace.split_once_on("::")
- var name = parts.shift
- for mentity in mentities do
- if mentity.name != name then continue
- if parts.is_empty then
- res.add mentity
- else
- res.add_all mentity.collect_by_namespace(parts.first)
- end
- end
- end
-end
-
-redef class Model
- redef fun collect_by_namespace(namespace) do
- var res = new Array[MEntity]
- var parts = namespace.split_once_on("::")
- var name = parts.shift
- for mentity in mpackages do
- if mentity.name != name then continue
- if parts.is_empty then
- res.add mentity
- else
- res.add_all mentity.collect_by_namespace(parts.first)
- end
- end
- return res
- end
-end
-
-redef class MPackage
- redef fun collect_by_namespace(namespace) do
- var res = new Array[MEntity]
- var root = self.root
- if root == null then return res
- lookup_in([root], namespace, res)
- return res
- end
-end
-
-redef class MGroup
- redef fun collect_by_namespace(namespace) do
- var res = new Array[MEntity]
- lookup_in(in_nesting.direct_smallers, namespace, res)
- lookup_in(mmodules, namespace, res)
- return res
- end
-end