# belong to a hierarchy since the property and the
# hierarchy of a class depends of a module.
class MClass
+ super MEntity
+
# The module that introduce the class
# While classes are not bound to a specific module,
# the introducing module is used for naming an visibility
# class. Unlike `MClass`, a `MClassDef` is a local definition that belong to
# a specific module
class MClassDef
+ super MEntity
+
# The module where the definition is
var mmodule: MModule
# * foo(anchor, mmodule, othertype)
# * foo(othertype, mmodule, anchor)
abstract class MType
+ super MEntity
# The model of the type
fun model: Model is abstract
# of any dynamic type).
# For instance, a call site "x.foo" is associated to a `MProperty`.
abstract class MProperty
+ super MEntity
+
# The associated MPropDef subclass.
# The two specialization hierarchy are symmetric.
type MPROPDEF: MPropDef
# Unlike `MProperty`, a `MPropDef` is a local definition that belong to a
# specific class definition (which belong to a specific module)
abstract class MPropDef
+ super MEntity
# The associated `MProperty` subclass.
# the two specialization hierarchy are symmetric
class Model
end
+# A named and possibly documented entity in the model.
+# This class is usefull to generalize presentation of entities to the human.
+abstract class MEntity
+end
+
# A visibility (for modules, class and properties)
# Valid visibility are:
#
# A Nit project, thas encompass a product
class MProject
+ super MEntity
+
# The name of the project
var name: String
# A group of modules in a project
class MGroup
+ super MEntity
+
# The name of the group
# empty name for a default group in a single-module project
var name: String