A definition (an introduction or a refinement) of a class in a module

A MClassDef is associated with an explicit (or almost) definition of a class. Unlike MClass, a MClassDef is a local definition that belong to a specific class and a specific module, and contains declarations like super-classes or properties.

It is the class definitions that are the backbone of most things in the model: ClassDefs are defined with regard with other classdefs. Refinement and specialization are combined to produce a big poset called the Model::mclassdef_hierarchy.

Moreover, the extension and the intention of types is defined by looking at the MClassDefs.

Introduced properties

private var _bound_mtype: MClassType

nitc :: MClassDef :: _bound_mtype

The bounded type associated to the mclassdef
private var _c_name: String

nitc :: MClassDef :: _c_name

private var _default_init: nullable MMethodDef

nitc :: MClassDef :: _default_init

The special default_init constructor
private var _ftype_cache: nullable ForeignType

nitc :: MClassDef :: _ftype_cache

private var _full_name: String

nitc :: MClassDef :: _full_name

The module and class name separated by a '$'.
private var _html_url: String

nitc :: MClassDef :: _html_url

private var _in_hierarchy: nullable POSetElement[MClassDef]

nitc :: MClassDef :: _in_hierarchy

The view of the class definition in mclassdef_hierarchy
private var _intro_colour: String

nitc :: MClassDef :: _intro_colour

Colour for the border of a class when first introduced
private var _intro_mproperties: Array[MProperty]

nitc :: MClassDef :: _intro_mproperties

All properties introduced by the classdef
private var _is_test: Bool

nitc :: MClassDef :: _is_test

private var _location: Location

nitc :: MClassDef :: _location

private var _mclass: MClass

nitc :: MClassDef :: _mclass

The associated MClass
private var _mmodule: MModule

nitc :: MClassDef :: _mmodule

The module where the definition is
private var _mprop2npropdef: Map[MProperty, APropdef]

nitc :: MClassDef :: _mprop2npropdef

What is the APropdef associated to a MProperty?
private var _mpropdefs: Array[MPropDef]

nitc :: MClassDef :: _mpropdefs

All property introductions and redefinitions in self (not inheritance).
private var _mpropdefs_by_property: HashMap[MProperty, MPropDef]

nitc :: MClassDef :: _mpropdefs_by_property

All property introductions and redefinitions (not inheritance) in self by its associated property.
private var _redef_colour: String

nitc :: MClassDef :: _redef_colour

Colour for the border of a class when refined
private var _restful_methods: Array[MMethod]

nitc :: MClassDef :: _restful_methods

Methods with the restful annotation in this class
private var _supertypes: Array[MClassType]

nitc :: MClassDef :: _supertypes

All declared super-types
private var _to_s: String

nitc :: MClassDef :: _to_s

Internal name combining the module and the class
fun add_in_hierarchy

nitc :: MClassDef :: add_in_hierarchy

Collect the super-types (set by set_supertypes) to build the hierarchy
private fun after: Array[MMethodDef]

nitc :: MClassDef :: after

Methods tagged with after in this class definition
private fun after_all: Array[MMethodDef]

nitc :: MClassDef :: after_all

Methods tagged with after_all in this class definition
private fun before: Array[MMethodDef]

nitc :: MClassDef :: before

Methods tagged with before in this class definition
private fun before_all: Array[MMethodDef]

nitc :: MClassDef :: before_all

Methods tagged with before_all in this class definition
fun bound_mtype: MClassType

nitc :: MClassDef :: bound_mtype

The bounded type associated to the mclassdef
protected fun bound_mtype=(bound_mtype: MClassType)

nitc :: MClassDef :: bound_mtype=

The bounded type associated to the mclassdef
fun build_self_type(modelbuilder: ModelBuilder, nclassdef: AClassdef)

nitc :: MClassDef :: build_self_type

Build the virtual type SELF only for introduction MClassDef
protected fun c_name=(c_name: String)

nitc :: MClassDef :: c_name=

fun collect_abstract_methods(filter: ModelFilter): Set[MMethodDef]

nitc :: MClassDef :: collect_abstract_methods

Collect intro abstract mmethodDef
fun collect_all_mattributes(mainmodule: MModule, filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_all_mattributes

Collect all mattributs inehrited,intro and redef
fun collect_all_methods(mainmodule: MModule, filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_all_methods

Collect all mmethod inehrited,intro and redef
fun collect_inherited_mattributes(mainmodule: MModule, filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_inherited_mattributes

Collect mattributes inherited by 'self' with visibility >= min_visibility.
fun collect_inherited_mmethods(mainmodule: MModule, filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_inherited_mmethods

Collect mmethods inherited by 'self' if accepted by filter.
fun collect_inherited_mproperties(mainmodule: MModule, filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_inherited_mproperties

Collect all mproperties inehrited by 'self' with visibility >= min_visibility.
fun collect_intro_mattributes(filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_intro_mattributes

Collect mattributes introduced in 'self' with visibility >= min_visibility.
fun collect_intro_mmethods(filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_intro_mmethods

Collect mmethods introduced in 'self' with visibility >= min_visibility.
fun collect_intro_mpropdefs(filter: nullable ModelFilter): Set[MPropDef]

nitc :: MClassDef :: collect_intro_mpropdefs

Collect all property definitions that are introduction in self
fun collect_intro_mproperties(filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_intro_mproperties

Collect all mproperties introduced in 'self' with visibility >= min_visibility.
fun collect_local_mproperties(filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_local_mproperties

Collect mproperties introduced and redefined in 'self' with visibility >= min_visibility.
fun collect_mattributedefs(filter: nullable ModelFilter): Set[MAttributeDef]

nitc :: MClassDef :: collect_mattributedefs

Collect all attribute definitions in self
fun collect_mmethoddefs(filter: nullable ModelFilter): Set[MMethodDef]

nitc :: MClassDef :: collect_mmethoddefs

Collect all methods definitions in self
fun collect_mpropdefs(filter: nullable ModelFilter): Set[MPropDef]

nitc :: MClassDef :: collect_mpropdefs

Collect all property definitions in self
fun collect_mtypedefs(filter: nullable ModelFilter): Set[MVirtualTypeDef]

nitc :: MClassDef :: collect_mtypedefs

Collect all virtual types definitions in self
fun collect_redef_mattributes(filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_redef_mattributes

Collect mattributes redefined in 'self' with visibility >= min_visibility.
fun collect_redef_mmethods(filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_redef_mmethods

Collect mmethods redefined in 'self' with visibility >= min_visibility.
fun collect_redef_mpropdefs(filter: nullable ModelFilter): Set[MPropDef]

nitc :: MClassDef :: collect_redef_mpropdefs

Collect all property definitions that are redefinition in self
fun collect_redef_mproperties(filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_redef_mproperties

Collect all mproperties redefined in 'self' with visibility >= min_visibility.
fun default_init: nullable MMethodDef

nitc :: MClassDef :: default_init

The special default_init constructor
fun default_init=(default_init: nullable MMethodDef)

nitc :: MClassDef :: default_init=

The special default_init constructor
init defaultinit(mmodule: MModule, bound_mtype: MClassType, location: Location)

nitc :: MClassDef :: defaultinit

fun ftype: nullable ForeignType

nitc :: MClassDef :: ftype

Associated extern type when defined on this classdef
private fun ftype_cache: nullable ForeignType

nitc :: MClassDef :: ftype_cache

private fun ftype_cache=(ftype_cache: nullable ForeignType)

nitc :: MClassDef :: ftype_cache=

private fun ftype_computed=(ftype_computed: Bool)

nitc :: MClassDef :: ftype_computed=

protected fun full_name=(full_name: String)

nitc :: MClassDef :: full_name=

The module and class name separated by a '$'.
fun get_direct_supermtype: Collection[MClassType]

nitc :: MClassDef :: get_direct_supermtype

Return the direct parent mtype of self
fun in_hierarchy: nullable POSetElement[MClassDef]

nitc :: MClassDef :: in_hierarchy

The view of the class definition in mclassdef_hierarchy
protected fun in_hierarchy=(in_hierarchy: nullable POSetElement[MClassDef])

nitc :: MClassDef :: in_hierarchy=

The view of the class definition in mclassdef_hierarchy
fun intro_colour: String

nitc :: MClassDef :: intro_colour

Colour for the border of a class when first introduced
protected fun intro_colour=(intro_colour: String)

nitc :: MClassDef :: intro_colour=

Colour for the border of a class when first introduced
fun intro_mproperties: Array[MProperty]

nitc :: MClassDef :: intro_mproperties

All properties introduced by the classdef
protected fun intro_mproperties=(intro_mproperties: Array[MProperty])

nitc :: MClassDef :: intro_mproperties=

All properties introduced by the classdef
fun is_intro: Bool

nitc :: MClassDef :: is_intro

Is the definition the one that introduced mclass?
protected fun location=(location: Location)

nitc :: MClassDef :: location=

fun mclass: MClass

nitc :: MClassDef :: mclass

The associated MClass
protected fun mclass=(mclass: MClass)

nitc :: MClassDef :: mclass=

The associated MClass
fun mmodule: MModule

nitc :: MClassDef :: mmodule

The module where the definition is
protected fun mmodule=(mmodule: MModule)

nitc :: MClassDef :: mmodule=

The module where the definition is
fun mprop2npropdef: Map[MProperty, APropdef]

nitc :: MClassDef :: mprop2npropdef

What is the APropdef associated to a MProperty?
protected fun mprop2npropdef=(mprop2npropdef: Map[MProperty, APropdef])

nitc :: MClassDef :: mprop2npropdef=

What is the APropdef associated to a MProperty?
fun mpropdefs: Array[MPropDef]

nitc :: MClassDef :: mpropdefs

All property introductions and redefinitions in self (not inheritance).
protected fun mpropdefs=(mpropdefs: Array[MPropDef])

nitc :: MClassDef :: mpropdefs=

All property introductions and redefinitions in self (not inheritance).
fun mpropdefs_by_property: HashMap[MProperty, MPropDef]

nitc :: MClassDef :: mpropdefs_by_property

All property introductions and redefinitions (not inheritance) in self by its associated property.
protected fun mpropdefs_by_property=(mpropdefs_by_property: HashMap[MProperty, MPropDef])

nitc :: MClassDef :: mpropdefs_by_property=

All property introductions and redefinitions (not inheritance) in self by its associated property.
protected fun nitdoc_breadcrumbs=(nitdoc_breadcrumbs: Array[MEntity])

nitc :: MClassDef :: nitdoc_breadcrumbs=

fun redef_colour: String

nitc :: MClassDef :: redef_colour

Colour for the border of a class when refined
protected fun redef_colour=(redef_colour: String)

nitc :: MClassDef :: redef_colour=

Colour for the border of a class when refined
private fun restful_methods: Array[MMethod]

nitc :: MClassDef :: restful_methods

Methods with the restful annotation in this class
private fun restful_methods=(restful_methods: Array[MMethod])

nitc :: MClassDef :: restful_methods=

Methods with the restful annotation in this class
fun set_supertypes(supertypes: Array[MClassType])

nitc :: MClassDef :: set_supertypes

Register some super-types for the class (ie "super SomeType")
fun supertypes: Array[MClassType]

nitc :: MClassDef :: supertypes

All declared super-types
protected fun supertypes=(supertypes: Array[MClassType])

nitc :: MClassDef :: supertypes=

All declared super-types
private fun target_constructor=(target_constructor: nullable MMethodDef)

nitc :: MClassDef :: target_constructor=

protected fun to_s=(to_s: String)

nitc :: MClassDef :: to_s=

Internal name combining the module and the class

Redefined properties

redef type SELF: MClassDef

nitc $ MClassDef :: SELF

Type of this instance, automatically specialized in every class
redef fun c_name: String

nitc $ MClassDef :: c_name

A fully-qualified C-like identifier of this model entity.
redef fun collect_children(mainmodule: MModule, filter: nullable ModelFilter): Set[MENTITY]

nitc :: model_collect $ MClassDef :: collect_children

Collect self children (direct descendants)
redef fun collect_linearization(mainmodule: MModule): nullable Array[MEntity]

nitc :: model_collect $ MClassDef :: collect_linearization

Collect self linearization anchored on mainmodule
redef fun collect_modifiers: Array[String]

nitc :: model_collect $ MClassDef :: collect_modifiers

Collect modifier keywords like redef, private etc
redef fun collect_parents(mainmodule: MModule, filter: nullable ModelFilter): Set[MENTITY]

nitc :: model_collect $ MClassDef :: collect_parents

Collect self parents (direct ancestors)
redef fun complete_mdoc: nullable MDoc

nitc :: vim_autocomplete $ MClassDef :: complete_mdoc

Doc to use in completion
redef fun complete_name: String

nitc :: vim_autocomplete $ MClassDef :: complete_name

Actual name used in completion
redef fun core_serialize_to(v: Serializer)

nitc :: json_model $ MClassDef :: core_serialize_to

Actual serialization of self to serializer
redef fun create_ast_representation(astbuilder: nullable ASTBuilder): AStdClassdef

nitc :: astbuilder $ MClassDef :: create_ast_representation

Build a ANode from self
redef fun cs_icon(no_color: nullable Bool): String

nitc :: term_model $ MClassDef :: cs_icon

Text icon to be displayed in front of the entity
redef fun cs_signature(no_color: nullable Bool): String

nitc :: term_model $ MClassDef :: cs_signature

Returns the MClassDef generic signature with static bounds.
redef fun css_classes: Array[String]

nitc :: html_model $ MClassDef :: css_classes

CSS classes used to decorate self
redef fun full_name: String

nitc $ MClassDef :: full_name

The module and class name separated by a '$'.
redef fun href(v: NitlightVisitor): nullable String

nitc :: nitlight $ MClassDef :: href

redef fun html_icon: BSIcon

nitc :: html_model $ MClassDef :: html_icon

An icon representative of the mentity
redef fun html_namespace: Template

nitc :: html_model $ MClassDef :: html_namespace

Returns full_name decorated with HTML links
redef fun html_signature(short: nullable Bool): Template

nitc :: html_model $ MClassDef :: html_signature

Returns the MEntity signature decorated with HTML
redef fun html_url: String

nitc :: static_html $ MClassDef :: html_url

The MEntity URL in the HTML output
redef fun html_url=(html_url: String)

nitc :: static_html $ MClassDef :: html_url=

The MEntity URL in the HTML output
redef fun infobox(v: HtmlightVisitor): HInfoBox

nitc :: htmlight $ MClassDef :: infobox

An new infobox documenting the entity
redef init init

nitc $ MClassDef :: init

redef fun is_test: Bool

nitc :: parse_annotations $ MClassDef :: is_test

Is self created for unit testing purpose?
redef fun is_test=(is_test: Bool)

nitc :: parse_annotations $ MClassDef :: is_test=

Is self created for unit testing purpose?
redef fun json_namespace: JsonNamespace

nitc :: json_model $ MClassDef :: json_namespace

Return self.full_name as an object that can be serialized to json.
redef fun location: Location

nitc $ MClassDef :: location

The origin of the definition.
redef fun mdoc_or_fallback: nullable MDoc

nitc $ MClassDef :: mdoc_or_fallback

The documentation associated to the entity or their main nested entity.
redef fun mentity_kind_rank: Int

nitc :: model_index $ MClassDef :: mentity_kind_rank

Compare MEntity class kind
redef fun model: Model

nitc $ MClassDef :: model

A Model Entity has a direct link to its model
redef fun name: String

nitc $ MClassDef :: name

Actually the name of the mclass
redef fun nitdoc_breadcrumbs: Array[MEntity]

nitc :: static_base $ MClassDef :: nitdoc_breadcrumbs

MEntities composing the breadcrumbs of a nitdoc page
redef fun to_node(nodes: HashMap[MEntity, NeoNode], model_name: nullable String): NeoNode

nitc :: neo $ MClassDef :: to_node

Build a NeoNode representing self.
redef fun to_s: String

nitc $ MClassDef :: to_s

Internal name combining the module and the class
redef fun tpl_module(model: UMLModel): Writable

nitc :: uml_module $ MClassDef :: tpl_module

Builds a dot UML package diagram entity from self
redef fun visibility: MVisibility

nitc $ MClassDef :: visibility

The visibility of the MEntity.
redef fun visit_all(v: ModelVisitor)

nitc :: model_visitor $ MClassDef :: visit_all

Visit all the classes and class definitions of the module.
redef fun web_url: String

nitc :: api_base $ MClassDef :: web_url

URL to self within the web interface.

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type MENTITY: SELF

nitc :: MEntity :: MENTITY

FIXME used to bypass RTA limitation on type resolution
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
private var _annotations: Set[String]

nitc :: AnnotatedMEntity :: _annotations

Names of the annotations found on self declaration
private var _bound_mtype: MClassType

nitc :: MClassDef :: _bound_mtype

The bounded type associated to the mclassdef
private var _c_name: String

nitc :: MClassDef :: _c_name

private var _css_classes: Array[String]

nitc :: MEntity :: _css_classes

CSS classes used to decorate self
private var _default_init: nullable MMethodDef

nitc :: MClassDef :: _default_init

The special default_init constructor
private var _deprecation: nullable MDeprecationInfo

nitc :: MEntity :: _deprecation

Is the entity deprecated?
private var _examples: Array[MExample]

nitc :: MEntity :: _examples

Examples found for self
private var _ftype_cache: nullable ForeignType

nitc :: MClassDef :: _ftype_cache

private var _full_name: String

nitc :: MClassDef :: _full_name

The module and class name separated by a '$'.
private var _html_full_name: String

nitc :: MEntity :: _html_full_name

The MEntity full_name escaped for HTML
private var _html_id: String

nitc :: MEntity :: _html_id

The MEntity unique ID in the HTML output
private var _html_name: String

nitc :: MEntity :: _html_name

The MEntity name escaped for HTML
private var _html_url: String

nitc :: MEntity :: _html_url

private var _html_url: String

nitc :: MEntity :: _html_url

The MEntity URL in the HTML output
private var _html_url: String

nitc :: MClassDef :: _html_url

private var _in_hierarchy: nullable POSetElement[MClassDef]

nitc :: MClassDef :: _in_hierarchy

The view of the class definition in mclassdef_hierarchy
private var _intro_colour: String

nitc :: MClassDef :: _intro_colour

Colour for the border of a class when first introduced
private var _intro_mproperties: Array[MProperty]

nitc :: MClassDef :: _intro_mproperties

All properties introduced by the classdef
private var _is_broken: Bool

nitc :: MEntity :: _is_broken

The indication that the entity did not pass some semantic verifications.
private var _is_fictive: Bool

nitc :: MEntity :: _is_fictive

Is self created for internal purpose?
private var _is_test: Bool

nitc :: MEntity :: _is_test

Is self created for unit testing purpose?
private var _is_test: Bool

nitc :: MClassDef :: _is_test

private var _location: Location

nitc :: MClassDef :: _location

private var _mclass: MClass

nitc :: MClassDef :: _mclass

The associated MClass
private var _mdoc: nullable MDoc

nitc :: MEntity :: _mdoc

The documentation associated to the entity
private var _mexample: nullable MExample

nitc :: MEntity :: _mexample

Return this entity as a MExample
private var _mmodule: MModule

nitc :: MClassDef :: _mmodule

The module where the definition is
private var _mprop2npropdef: Map[MProperty, APropdef]

nitc :: MClassDef :: _mprop2npropdef

What is the APropdef associated to a MProperty?
private var _mpropdefs: Array[MPropDef]

nitc :: MClassDef :: _mpropdefs

All property introductions and redefinitions in self (not inheritance).
private var _mpropdefs_by_property: HashMap[MProperty, MPropDef]

nitc :: MClassDef :: _mpropdefs_by_property

All property introductions and redefinitions (not inheritance) in self by its associated property.
private var _redef_colour: String

nitc :: MClassDef :: _redef_colour

Colour for the border of a class when refined
private var _restful_methods: Array[MMethod]

nitc :: MClassDef :: _restful_methods

Methods with the restful annotation in this class
private var _supertypes: Array[MClassType]

nitc :: MClassDef :: _supertypes

All declared super-types
private var _to_s: String

nitc :: MClassDef :: _to_s

Internal name combining the module and the class
protected fun accept_json_serializer(v: JsonSerializer)

serialization :: Serializable :: accept_json_serializer

Refinable service to customize the serialization of this class to JSON
protected fun accept_msgpack_attribute_counter(v: AttributeCounter)

serialization :: Serializable :: accept_msgpack_attribute_counter

Hook to customize the behavior of the AttributeCounter
protected fun accept_msgpack_serializer(v: MsgPackSerializer)

serialization :: Serializable :: accept_msgpack_serializer

Hook to customize the serialization of this class to MessagePack
private fun add_doc_to_infobox(res: HInfoBox)

nitc :: MEntity :: add_doc_to_infobox

Append an entry for the doc in the given infobox
fun add_in_hierarchy

nitc :: MClassDef :: add_in_hierarchy

Collect the super-types (set by set_supertypes) to build the hierarchy
protected fun add_to_bundle(bundle: NativeBundle, key: JavaString)

serialization :: Serializable :: add_to_bundle

Called by []= to dynamically choose the appropriate method according
private fun after: Array[MMethodDef]

nitc :: MClassDef :: after

Methods tagged with after in this class definition
private fun after_all: Array[MMethodDef]

nitc :: MClassDef :: after_all

Methods tagged with after_all in this class definition
fun annotations: Set[String]

nitc :: AnnotatedMEntity :: annotations

Names of the annotations found on self declaration
protected fun annotations=(annotations: Set[String])

nitc :: AnnotatedMEntity :: annotations=

Names of the annotations found on self declaration
fun api_url: String

nitc :: MEntity :: api_url

URL to self within the JSON api.
private fun before: Array[MMethodDef]

nitc :: MClassDef :: before

Methods tagged with before in this class definition
private fun before_all: Array[MMethodDef]

nitc :: MClassDef :: before_all

Methods tagged with before_all in this class definition
fun bound_mtype: MClassType

nitc :: MClassDef :: bound_mtype

The bounded type associated to the mclassdef
protected fun bound_mtype=(bound_mtype: MClassType)

nitc :: MClassDef :: bound_mtype=

The bounded type associated to the mclassdef
fun build_self_type(modelbuilder: ModelBuilder, nclassdef: AClassdef)

nitc :: MClassDef :: build_self_type

Build the virtual type SELF only for introduction MClassDef
abstract fun c_name: String

nitc :: MEntity :: c_name

A fully-qualified C-like identifier of this model entity.
protected fun c_name=(c_name: String)

nitc :: MClassDef :: c_name=

protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun collect_abstract_methods(filter: ModelFilter): Set[MMethodDef]

nitc :: MClassDef :: collect_abstract_methods

Collect intro abstract mmethodDef
fun collect_all_mattributes(mainmodule: MModule, filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_all_mattributes

Collect all mattributs inehrited,intro and redef
fun collect_all_methods(mainmodule: MModule, filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_all_methods

Collect all mmethod inehrited,intro and redef
fun collect_ancestors(mainmodule: MModule, filter: nullable ModelFilter): Set[MENTITY]

nitc :: MEntity :: collect_ancestors

Collect self ancestors (direct and indirect)
abstract fun collect_children(mainmodule: MModule, filter: nullable ModelFilter): Set[MENTITY]

nitc :: MEntity :: collect_children

Collect self children (direct descendants)
fun collect_descendants(mainmodule: MModule, filter: nullable ModelFilter): Set[MENTITY]

nitc :: MEntity :: collect_descendants

Collect self descendants (direct and direct)
fun collect_inherited_mattributes(mainmodule: MModule, filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_inherited_mattributes

Collect mattributes inherited by 'self' with visibility >= min_visibility.
fun collect_inherited_mmethods(mainmodule: MModule, filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_inherited_mmethods

Collect mmethods inherited by 'self' if accepted by filter.
fun collect_inherited_mproperties(mainmodule: MModule, filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_inherited_mproperties

Collect all mproperties inehrited by 'self' with visibility >= min_visibility.
fun collect_intro_mattributes(filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_intro_mattributes

Collect mattributes introduced in 'self' with visibility >= min_visibility.
fun collect_intro_mmethods(filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_intro_mmethods

Collect mmethods introduced in 'self' with visibility >= min_visibility.
fun collect_intro_mpropdefs(filter: nullable ModelFilter): Set[MPropDef]

nitc :: MClassDef :: collect_intro_mpropdefs

Collect all property definitions that are introduction in self
fun collect_intro_mproperties(filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_intro_mproperties

Collect all mproperties introduced in 'self' with visibility >= min_visibility.
fun collect_linearization(mainmodule: MModule): nullable Array[MEntity]

nitc :: MEntity :: collect_linearization

Collect self linearization anchored on mainmodule
fun collect_local_mproperties(filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_local_mproperties

Collect mproperties introduced and redefined in 'self' with visibility >= min_visibility.
fun collect_mattributedefs(filter: nullable ModelFilter): Set[MAttributeDef]

nitc :: MClassDef :: collect_mattributedefs

Collect all attribute definitions in self
fun collect_mmethoddefs(filter: nullable ModelFilter): Set[MMethodDef]

nitc :: MClassDef :: collect_mmethoddefs

Collect all methods definitions in self
fun collect_modifiers: Array[String]

nitc :: MEntity :: collect_modifiers

Collect modifier keywords like redef, private etc
fun collect_mpropdefs(filter: nullable ModelFilter): Set[MPropDef]

nitc :: MClassDef :: collect_mpropdefs

Collect all property definitions in self
fun collect_mtypedefs(filter: nullable ModelFilter): Set[MVirtualTypeDef]

nitc :: MClassDef :: collect_mtypedefs

Collect all virtual types definitions in self
abstract fun collect_parents(mainmodule: MModule, filter: nullable ModelFilter): Set[MENTITY]

nitc :: MEntity :: collect_parents

Collect self parents (direct ancestors)
fun collect_redef_mattributes(filter: ModelFilter): Set[MAttribute]

nitc :: MClassDef :: collect_redef_mattributes

Collect mattributes redefined in 'self' with visibility >= min_visibility.
fun collect_redef_mmethods(filter: ModelFilter): Set[MMethod]

nitc :: MClassDef :: collect_redef_mmethods

Collect mmethods redefined in 'self' with visibility >= min_visibility.
fun collect_redef_mpropdefs(filter: nullable ModelFilter): Set[MPropDef]

nitc :: MClassDef :: collect_redef_mpropdefs

Collect all property definitions that are redefinition in self
fun collect_redef_mproperties(filter: ModelFilter): Set[MProperty]

nitc :: MClassDef :: collect_redef_mproperties

Collect all mproperties redefined in 'self' with visibility >= min_visibility.
fun color: String

nitc :: MEntity :: color

private fun complete_mdoc: nullable MDoc

nitc :: MEntity :: complete_mdoc

Doc to use in completion
private fun complete_name: String

nitc :: MEntity :: complete_name

Actual name used in completion
protected fun const_color=(const_color: String)

nitc :: MEntity :: const_color=

fun core_serialize_to(serializer: Serializer)

serialization :: Serializable :: core_serialize_to

Actual serialization of self to serializer
abstract fun create_ast_representation(astbuilder: nullable ASTBuilder): ANode

nitc :: MEntity :: create_ast_representation

Build a ANode from self
fun cs_comment(no_color: nullable Bool): nullable String

nitc :: MEntity :: cs_comment

Returns the comment of this MEntity formatted for console.
fun cs_declaration(no_color: nullable Bool): String

nitc :: MEntity :: cs_declaration

Returns the complete MEntity declaration (modifiers + name + signature).
fun cs_full_name(no_color: nullable Bool): String

nitc :: MEntity :: cs_full_name

Returns self.full_name formatted for console
fun cs_icon(no_color: nullable Bool): String

nitc :: MEntity :: cs_icon

Text icon to be displayed in front of the entity
fun cs_list_item(no_color: nullable Bool): String

nitc :: MEntity :: cs_list_item

Returns self as a list element that can be displayed in console.
fun cs_location(no_color: nullable Bool): String

nitc :: MEntity :: cs_location

Source code location of this MEntity formatted for console
fun cs_short_comment(no_color: nullable Bool): nullable String

nitc :: MEntity :: cs_short_comment

Returns the comment of this MEntity formatted for console.
fun cs_signature(no_color: nullable Bool): String

nitc :: MEntity :: cs_signature

Returns self signature formatted for console.
fun cs_source_code: String

nitc :: MEntity :: cs_source_code

Source code associated to this MEntity.
fun css_classes: Array[String]

nitc :: MEntity :: css_classes

CSS classes used to decorate self
protected fun css_classes=(css_classes: Array[String])

nitc :: MEntity :: css_classes=

CSS classes used to decorate self
fun default_init: nullable MMethodDef

nitc :: MClassDef :: default_init

The special default_init constructor
fun default_init=(default_init: nullable MMethodDef)

nitc :: MClassDef :: default_init=

The special default_init constructor
init defaultinit(mmodule: MModule, bound_mtype: MClassType, location: Location)

nitc :: MClassDef :: defaultinit

fun deprecation: nullable MDeprecationInfo

nitc :: MEntity :: deprecation

Is the entity deprecated?
fun deprecation=(deprecation: nullable MDeprecationInfo)

nitc :: MEntity :: deprecation=

Is the entity deprecated?
fun examples: Array[MExample]

nitc :: MEntity :: examples

Examples found for self
protected fun examples=(examples: Array[MExample])

nitc :: MEntity :: examples=

Examples found for self
init from_deserializer(deserializer: Deserializer)

serialization :: Serializable :: from_deserializer

Create an instance of this class from the deserializer
fun ftype: nullable ForeignType

nitc :: MClassDef :: ftype

Associated extern type when defined on this classdef
private fun ftype_cache: nullable ForeignType

nitc :: MClassDef :: ftype_cache

private fun ftype_cache=(ftype_cache: nullable ForeignType)

nitc :: MClassDef :: ftype_cache=

private fun ftype_computed=(ftype_computed: Bool)

nitc :: MClassDef :: ftype_computed=

abstract fun full_name: String

nitc :: MEntity :: full_name

A fully-qualified name of this model entity.
protected fun full_name=(full_name: String)

nitc :: MClassDef :: full_name=

The module and class name separated by a '$'.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun get_direct_supermtype: Collection[MClassType]

nitc :: MClassDef :: get_direct_supermtype

Return the direct parent mtype of self
fun has_annotation(annotation: String): Bool

nitc :: AnnotatedMEntity :: has_annotation

Does self contains annotation in its declaration?
fun hash: Int

core :: Object :: hash

The hash code of the object.
fun hierarchy_poset(mainmodule: MModule, filter: nullable ModelFilter): POSet[MENTITY]

nitc :: MEntity :: hierarchy_poset

Build a poset representing self in it's own hierarchy
private fun href(v: NitlightVisitor): nullable String

nitc :: MEntity :: href

fun html_declaration: Template

nitc :: MEntity :: html_declaration

Returns the complete MEntity declaration decorated with HTML
fun html_full_name: String

nitc :: MEntity :: html_full_name

The MEntity full_name escaped for HTML
protected fun html_full_name=(html_full_name: String)

nitc :: MEntity :: html_full_name=

The MEntity full_name escaped for HTML
fun html_icon: BSIcon

nitc :: MEntity :: html_icon

An icon representative of the mentity
fun html_id: String

nitc :: MEntity :: html_id

The MEntity unique ID in the HTML output
protected fun html_id=(html_id: String)

nitc :: MEntity :: html_id=

The MEntity unique ID in the HTML output
fun html_name: String

nitc :: MEntity :: html_name

The MEntity name escaped for HTML
protected fun html_name=(html_name: String)

nitc :: MEntity :: html_name=

The MEntity name escaped for HTML
abstract fun html_namespace: Template

nitc :: MEntity :: html_namespace

Returns full_name decorated with HTML links
fun html_signature(short: nullable Bool): Template

nitc :: MEntity :: html_signature

Returns the MEntity signature decorated with HTML
fun html_url: String

nitc :: MEntity :: html_url

The MEntity URL in the HTML output
protected fun html_url=(html_url: String)

nitc :: MEntity :: html_url=

The MEntity URL in the HTML output
fun in_hierarchy: nullable POSetElement[MClassDef]

nitc :: MClassDef :: in_hierarchy

The view of the class definition in mclassdef_hierarchy
protected fun in_hierarchy=(in_hierarchy: nullable POSetElement[MClassDef])

nitc :: MClassDef :: in_hierarchy=

The view of the class definition in mclassdef_hierarchy
abstract fun infobox(v: HtmlightVisitor): HInfoBox

nitc :: HInfoBoxable :: infobox

An new infobox documenting the entity
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
fun intro_colour: String

nitc :: MClassDef :: intro_colour

Colour for the border of a class when first introduced
protected fun intro_colour=(intro_colour: String)

nitc :: MClassDef :: intro_colour=

Colour for the border of a class when first introduced
fun intro_mproperties: Array[MProperty]

nitc :: MClassDef :: intro_mproperties

All properties introduced by the classdef
protected fun intro_mproperties=(intro_mproperties: Array[MProperty])

nitc :: MClassDef :: intro_mproperties=

All properties introduced by the classdef
fun is_broken: Bool

nitc :: MEntity :: is_broken

The indication that the entity did not pass some semantic verifications.
fun is_broken=(is_broken: Bool)

nitc :: MEntity :: is_broken=

The indication that the entity did not pass some semantic verifications.
fun is_example: Bool

nitc :: MEntity :: is_example

Is self existing for an example purpose?
fun is_fictive: Bool

nitc :: MEntity :: is_fictive

Is self created for internal purpose?
fun is_fictive=(is_fictive: Bool)

nitc :: MEntity :: is_fictive=

Is self created for internal purpose?
fun is_intro: Bool

nitc :: MClassDef :: is_intro

Is the definition the one that introduced mclass?
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun is_test: Bool

nitc :: MEntity :: is_test

Is self created for unit testing purpose?
fun is_test=(is_test: Bool)

nitc :: MEntity :: is_test=

Is self created for unit testing purpose?
private fun jname: String

nitc :: MEntity :: jname

A Java compatible name for self
abstract fun json_namespace: JsonNamespace

nitc :: MEntity :: json_namespace

Return self.full_name as an object that can be serialized to json.
fun linkto(v: HtmlightVisitor): HTMLTag

nitc :: MEntity :: linkto

A HTML version of to_s with hyper-links.
fun linkto_text(v: HtmlightVisitor, text: String): HTMLTag

nitc :: MEntity :: linkto_text

Link to the self with a specific text.
fun location: Location

nitc :: MEntity :: location

The origin of the definition.
protected fun location=(location: Location)

nitc :: MClassDef :: location=

private fun make_node(nodes: HashMap[MEntity, NeoNode], model_name: nullable String): NeoNode

nitc :: MEntity :: make_node

Make a new NeoNode based on mentity.
fun mclass: MClass

nitc :: MClassDef :: mclass

The associated MClass
protected fun mclass=(mclass: MClass)

nitc :: MClassDef :: mclass=

The associated MClass
fun mdoc: nullable MDoc

nitc :: MEntity :: mdoc

The documentation associated to the entity
fun mdoc=(mdoc: nullable MDoc)

nitc :: MEntity :: mdoc=

The documentation associated to the entity
fun mdoc_or_fallback: nullable MDoc

nitc :: MEntity :: mdoc_or_fallback

The documentation associated to the entity or their main nested entity.
private fun mentity_kind_rank: Int

nitc :: MEntity :: mentity_kind_rank

Compare MEntity class kind
fun mexample: nullable MExample

nitc :: MEntity :: mexample

Return this entity as a MExample
protected fun mexample=(mexample: nullable MExample)

nitc :: MEntity :: mexample=

Return this entity as a MExample
fun mmodule: MModule

nitc :: MClassDef :: mmodule

The module where the definition is
protected fun mmodule=(mmodule: MModule)

nitc :: MClassDef :: mmodule=

The module where the definition is
abstract fun model: Model

nitc :: MEntity :: model

A Model Entity has a direct link to its model
fun mprop2npropdef: Map[MProperty, APropdef]

nitc :: MClassDef :: mprop2npropdef

What is the APropdef associated to a MProperty?
protected fun mprop2npropdef=(mprop2npropdef: Map[MProperty, APropdef])

nitc :: MClassDef :: mprop2npropdef=

What is the APropdef associated to a MProperty?
fun mpropdefs: Array[MPropDef]

nitc :: MClassDef :: mpropdefs

All property introductions and redefinitions in self (not inheritance).
protected fun mpropdefs=(mpropdefs: Array[MPropDef])

nitc :: MClassDef :: mpropdefs=

All property introductions and redefinitions in self (not inheritance).
fun mpropdefs_by_property: HashMap[MProperty, MPropDef]

nitc :: MClassDef :: mpropdefs_by_property

All property introductions and redefinitions (not inheritance) in self by its associated property.
protected fun mpropdefs_by_property=(mpropdefs_by_property: HashMap[MProperty, MPropDef])

nitc :: MClassDef :: mpropdefs_by_property=

All property introductions and redefinitions (not inheritance) in self by its associated property.
protected fun msgpack_extra_array_items: Int

serialization :: Serializable :: msgpack_extra_array_items

Hook to request a larger than usual metadata array
abstract fun name: String

nitc :: MEntity :: name

The short (unqualified) name of this model entity.
private intern fun native_class_name: CString

core :: Object :: native_class_name

The class name of the object in CString format.
abstract fun nitdoc_breadcrumbs: Array[MEntity]

nitc :: MEntity :: nitdoc_breadcrumbs

MEntities composing the breadcrumbs of a nitdoc page
protected fun nitdoc_breadcrumbs=(nitdoc_breadcrumbs: Array[MEntity])

nitc :: MClassDef :: nitdoc_breadcrumbs=

intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun ratings(config: NitwebConfig, user: nullable String): JsonObject

nitc :: MEntity :: ratings

Get the ratings of a mentity
fun ratings_by_dimension(config: NitwebConfig, dimension: String, user: nullable String): JsonObject

nitc :: MEntity :: ratings_by_dimension

Get the ratings of a dimension
fun redef_colour: String

nitc :: MClassDef :: redef_colour

Colour for the border of a class when refined
protected fun redef_colour=(redef_colour: String)

nitc :: MClassDef :: redef_colour=

Colour for the border of a class when refined
private fun restful_methods: Array[MMethod]

nitc :: MClassDef :: restful_methods

Methods with the restful annotation in this class
private fun restful_methods=(restful_methods: Array[MMethod])

nitc :: MClassDef :: restful_methods=

Methods with the restful annotation in this class
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun serialize_msgpack(plain: nullable Bool): Bytes

serialization :: Serializable :: serialize_msgpack

Serialize self to MessagePack bytes
fun serialize_to(serializer: Serializer)

serialization :: Serializable :: serialize_to

Serialize self to serializer
fun serialize_to_json(plain: nullable Bool, pretty: nullable Bool): String

serialization :: Serializable :: serialize_to_json

Serialize self to JSON
private fun serialize_to_or_delay(v: Serializer)

serialization :: Serializable :: serialize_to_or_delay

Accept references or force direct serialization (using serialize_to)
fun set_supertypes(supertypes: Array[MClassType])

nitc :: MClassDef :: set_supertypes

Register some super-types for the class (ie "super SomeType")
private fun source_url(url_pattern: nullable String): String

nitc :: MEntity :: source_url

Render a HTML link for the MEntity location
fun supertypes: Array[MClassType]

nitc :: MClassDef :: supertypes

All declared super-types
protected fun supertypes=(supertypes: Array[MClassType])

nitc :: MClassDef :: supertypes=

All declared super-types
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
private fun target_constructor=(target_constructor: nullable MMethodDef)

nitc :: MClassDef :: target_constructor=

fun to_dot_node: DotNode

nitc :: MEntity :: to_dot_node

Return self as a DotNode
fun to_json: String

serialization :: Serializable :: to_json

Serialize self to plain JSON
fun to_json_ref: MEntityRef

nitc :: MEntity :: to_json_ref

Return a new MEntityRef to self.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

private fun to_node(nodes: HashMap[MEntity, NeoNode], model_name: nullable String): NeoNode

nitc :: MEntity :: to_node

Build a NeoNode representing self.
fun to_pretty_json: String

serialization :: Serializable :: to_pretty_json

Serialize self to plain pretty JSON
fun to_s: String

core :: Object :: to_s

User readable representation of self.
protected fun to_s=(to_s: String)

nitc :: MClassDef :: to_s=

Internal name combining the module and the class
abstract fun tpl_class(model: UMLModel): Writable

nitc :: MEntity :: tpl_class

Generates a dot-compatible Writable UML Class diagram from self
abstract fun tpl_module(model: UMLModel): Writable

nitc :: MEntity :: tpl_module

Builds a dot UML package diagram entity from self
fun visibility: MVisibility

nitc :: MEntity :: visibility

The visibility of the MEntity.
fun visit_all(v: ModelVisitor)

nitc :: MEntity :: visit_all

Call v.enter_visit on all nested entities.
fun web_url: String

nitc :: MEntity :: web_url

URL to self within the web interface.
private fun write_doc(model: Model, mainmodule: MModule, stream: Writer)

nitc :: MEntity :: write_doc

private fun write_extra_doc(model: Model, mainmodule: MModule, stream: Writer)

nitc :: MEntity :: write_extra_doc

Extra auto documentation to append to the stream
private fun write_location(mainmodule: MModule, stream: Writer)

nitc :: MEntity :: write_location

Location (file and line when available) of related declarations
package_diagram nitc::MClassDef MClassDef nitc::MEntity MEntity nitc::MClassDef->nitc::MEntity nitc::AnnotatedMEntity AnnotatedMEntity nitc::MClassDef->nitc::AnnotatedMEntity nitc::HInfoBoxable HInfoBoxable nitc::MEntity->nitc::HInfoBoxable serialization::Serializable Serializable nitc::MEntity->serialization::Serializable core::Object Object nitc::AnnotatedMEntity->core::Object ...nitc::HInfoBoxable ... ...nitc::HInfoBoxable->nitc::HInfoBoxable ...serialization::Serializable ... ...serialization::Serializable->serialization::Serializable ...core::Object ... ...core::Object->core::Object

Ancestors

interface HInfoBoxable

nitc :: HInfoBoxable

Model entity or whatever that can produce an infobox
interface Object

core :: Object

The root of the class hierarchy.
interface Serializable

serialization :: Serializable

Instances of this class can be passed to Serializer::serialize

Parents

abstract class AnnotatedMEntity

nitc :: AnnotatedMEntity

A MEntity that can hold annotations from it's source code
abstract class MEntity

nitc :: MEntity

A named and possibly documented entity in the model.

Class definitions

nitc $ MClassDef
# A definition (an introduction or a refinement) of a class in a module
#
# A `MClassDef` is associated with an explicit (or almost) definition of a
# class. Unlike `MClass`, a `MClassDef` is a local definition that belong to
# a specific class and a specific module, and contains declarations like super-classes
# or properties.
#
# It is the class definitions that are the backbone of most things in the model:
# ClassDefs are defined with regard with other classdefs.
# Refinement and specialization are combined to produce a big poset called the `Model::mclassdef_hierarchy`.
#
# Moreover, the extension and the intention of types is defined by looking at the MClassDefs.
class MClassDef
	super MEntity

	# The module where the definition is
	var mmodule: MModule

	# The associated `MClass`
	var mclass: MClass is noinit

	# The bounded type associated to the mclassdef
	#
	# For a non-generic class, `bound_mtype` and `mclass.mclass_type`
	# are the same type.
	#
	# Example:
	# For the classdef Array[E: Object], the bound_mtype is Array[Object].
	# If you want Array[E], then see `mclass.mclass_type`
	#
	# ENSURE: `bound_mtype.mclass == self.mclass`
	var bound_mtype: MClassType

	redef var location

	redef fun visibility do return mclass.visibility

	# Internal name combining the module and the class
	# Example: "mymodule$MyClass"
	redef var to_s is noinit

	init
	do
		self.mclass = bound_mtype.mclass
		mmodule.add_mclassdef(self)
		mclass.mclassdefs.add(self)
		if mclass.intro_mmodule == mmodule then
			assert not isset mclass._intro
			mclass.intro = self
		end
		self.to_s = "{mmodule}${mclass}"
	end

	# Actually the name of the `mclass`
	redef fun name do return mclass.name

	# The module and class name separated by a '$'.
	#
	# The short-name of the class is used for introduction.
	# Example: "my_module$MyClass"
	#
	# The full-name of the class is used for refinement.
	# Example: "my_module$intro_module::MyClass"
	redef var full_name is lazy do
		if is_intro then
			# public gives 'p$A'
			# private gives 'p::m$A'
			return "{mmodule.namespace_for(mclass.visibility)}${mclass.name}"
		else if mclass.intro_mmodule.mpackage != mmodule.mpackage then
			# public gives 'q::n$p::A'
			# private gives 'q::n$p::m::A'
			return "{mmodule.full_name}${mclass.full_name}"
		else if mclass.visibility > private_visibility then
			# public gives 'p::n$A'
			return "{mmodule.full_name}${mclass.name}"
		else
			# private gives 'p::n$::m::A' (redundant p is omitted)
			return "{mmodule.full_name}$::{mclass.intro_mmodule.name}::{mclass.name}"
		end
	end

	redef var c_name is lazy do
		if is_intro then
			return "{mmodule.c_namespace_for(mclass.visibility)}___{mclass.c_name}"
		else if mclass.intro_mmodule.mpackage == mmodule.mpackage and mclass.visibility > private_visibility then
			return "{mmodule.c_name}___{mclass.name.to_cmangle}"
		else
			return "{mmodule.c_name}___{mclass.c_name}"
		end
	end

	redef fun model do return mmodule.model

	# All declared super-types
	# FIXME: quite ugly but not better idea yet
	var supertypes = new Array[MClassType]

	# Register some super-types for the class (ie "super SomeType")
	#
	# The hierarchy must not already be set
	# REQUIRE: `self.in_hierarchy == null`
	fun set_supertypes(supertypes: Array[MClassType])
	do
		assert unique_invocation: self.in_hierarchy == null
		var mmodule = self.mmodule
		var model = mmodule.model
		var mtype = self.bound_mtype

		for supertype in supertypes do
			self.supertypes.add(supertype)

			# Register in full_type_specialization_hierarchy
			model.full_mtype_specialization_hierarchy.add_edge(mtype, supertype)
			# Register in intro_type_specialization_hierarchy
			if mclass.intro_mmodule == mmodule and supertype.mclass.intro_mmodule == mmodule then
				model.intro_mtype_specialization_hierarchy.add_edge(mtype, supertype)
			end
		end

	end

	# Collect the super-types (set by set_supertypes) to build the hierarchy
	#
	# This function can only invoked once by class
	# REQUIRE: `self.in_hierarchy == null`
	# ENSURE: `self.in_hierarchy != null`
	fun add_in_hierarchy
	do
		assert unique_invocation: self.in_hierarchy == null
		var model = mmodule.model
		var res = model.mclassdef_hierarchy.add_node(self)
		self.in_hierarchy = res
		var mtype = self.bound_mtype

		# Here we need to connect the mclassdef to its pairs in the mclassdef_hierarchy
		# The simpliest way is to attach it to collect_mclassdefs
		for mclassdef in mtype.collect_mclassdefs(mmodule) do
			res.poset.add_edge(self, mclassdef)
		end
	end

	# The view of the class definition in `mclassdef_hierarchy`
	var in_hierarchy: nullable POSetElement[MClassDef] = null

	# Is the definition the one that introduced `mclass`?
	fun is_intro: Bool do return isset mclass._intro and mclass.intro == self

	# All properties introduced by the classdef
	var intro_mproperties = new Array[MProperty]

	# All property introductions and redefinitions in `self` (not inheritance).
	var mpropdefs = new Array[MPropDef]

	# The special default_init constructor
	var default_init: nullable MMethodDef = null is writable

	# All property introductions and redefinitions (not inheritance) in `self` by its associated property.
	var mpropdefs_by_property = new HashMap[MProperty, MPropDef]

	# Return the direct parent mtype of `self`
	# Exemple
	# ~~~nitish
	# module 1
	#
	#	class A
	#	class B
	#		super A
	#
	# module 2
	#
	#	redef class A
	#	class C
	#		super B
	#
	# mclassdef_C.get_direct_supermtype == [B]
	# ~~~~
	fun get_direct_supermtype: Collection[MClassType]
	do
		# Get the potentiel direct parents
		var parents = in_hierarchy.direct_greaters
		# Stock the potentiel direct parents
		var res = supertypes
		for parent in parents do
			# remove all super parents of the potentiel direct parents
			res.remove_all(parent.supertypes)
			# if the length of the potentiel direct parent equal 1 break
			if res.length == 1 then break
		end
		return res
	end

	redef fun mdoc_or_fallback do return mdoc or else mclass.mdoc_or_fallback
end
src/model/model.nit:628,1--820,3

nitc :: modelize_property $ MClassDef
redef class MClassDef
	# What is the `APropdef` associated to a `MProperty`?
	# Used to check multiple definition of a property.
	var mprop2npropdef: Map[MProperty, APropdef] = new HashMap[MProperty, APropdef]

	# Build the virtual type `SELF` only for introduction `MClassDef`
	fun build_self_type(modelbuilder: ModelBuilder, nclassdef: AClassdef)
	do
		if not is_intro then return

		var name = "SELF"
		var mprop = modelbuilder.try_get_mproperty_by_name(nclassdef, self, name)

		# If SELF type is declared nowherer?
		if mprop == null then return

		# SELF is not a virtual type? it is weird but we ignore it
		if not mprop isa MVirtualTypeProp then return

		# Is this the intro of SELF in the library?
		var intro = mprop.intro
		var intro_mclassdef = intro.mclassdef
		if intro_mclassdef == self then
			var nintro = modelbuilder.mpropdef2npropdef[intro]

			# SELF must be declared in Object, otherwise this will create conflicts
			if intro_mclassdef.mclass.name != "Object" then
				modelbuilder.error(nintro, "Error: the virtual type `SELF` must be declared in `Object`.")
			end

			# SELF must be public
			if mprop.visibility != public_visibility then
				modelbuilder.error(nintro, "Error: the virtual type `SELF` must be public.")
			end

			# SELF must not be fixed
			if intro.is_fixed then
				modelbuilder.error(nintro, "Error: the virtual type `SELF` cannot be fixed.")
			end

			return
		end

		# This class introduction inherits a SELF
		# We insert an artificial property to update it
		var mpropdef = new MVirtualTypeDef(self, mprop, self.location)
		mpropdef.bound = mclass.mclass_type
	end
end
src/modelize/modelize_property.nit:529,1--577,3

nitc :: neo $ MClassDef
redef class MClassDef
	redef fun to_node(nodes: HashMap[MEntity, NeoNode], model_name: nullable String): NeoNode do
		if nodes.has_key(self) then return nodes[self]
		var node = super
		node.out_edges.add(new NeoEdge(node, "BOUNDTYPE", bound_mtype.to_node(nodes, model_name)))
		node.out_edges.add(new NeoEdge(node, "MCLASS", mclass.to_node(nodes, model_name)))
		for mproperty in intro_mproperties do
			node.out_edges.add(new NeoEdge(node, "INTRODUCES", mproperty.to_node(nodes, model_name)))
		end
		for mpropdef in mpropdefs do
			node.out_edges.add(new NeoEdge(node, "DECLARES", mpropdef.to_node(nodes, model_name)))
		end
		for sup in supertypes do
			node.out_edges.add(new NeoEdge(node, "INHERITS", sup.to_node(nodes, model_name)))
		end
		return node
	end
end
src/neo.nit:749,1--766,3

nitc :: extern_classes $ MClassDef
redef class MClassDef
	private var ftype_cache: nullable ForeignType = null
	private var ftype_computed = false

	# Associated extern type when defined on this classdef
	fun ftype: nullable ForeignType
	do
		return ftype_cache
	end
end
src/ffi/extern_classes.nit:53,1--62,3

nitc :: parse_annotations $ MClassDef
redef class MClassDef
	super AnnotatedMEntity

	redef var is_test is lazy do return has_annotation("test")
end
src/frontend/parse_annotations.nit:113,1--117,3

nitc :: astbuilder $ MClassDef
redef class MClassDef
	redef fun create_ast_representation(astbuilder: nullable ASTBuilder): AStdClassdef do
		if astbuilder == null then astbuilder = new ASTBuilder(mmodule)
		var n_propdefs = new Array[APropdef]
		for mpropdef in self.mpropdefs do
			n_propdefs.add(mpropdef.create_ast_representation(astbuilder))
		end
		var n_formaldefs = new Array[AFormaldef]
		for mparameter in self.mclass.mparameters do n_formaldefs.add(mparameter.create_ast_representation(astbuilder))

		return astbuilder.make_class(self, visibility.create_ast_representation(astbuilder), n_formaldefs, null, n_propdefs, null)
	end
end
src/astbuilder.nit:960,1--972,3

nitc :: testing_suite $ MClassDef
redef class MClassDef
	# Methods tagged with `before` in this class definition
	private fun before: Array[MMethodDef] do
		var res = new ArraySet[MMethodDef]
		for mpropdef in mpropdefs do
			if mpropdef isa MMethodDef and mpropdef.is_before then
				res.add mpropdef
			end
		end
		var in_hierarchy = self.in_hierarchy
		if in_hierarchy == null then return res.to_a
		for mclassdef in in_hierarchy.direct_greaters do
			res.add_all mclassdef.before
		end
		var lin = res.to_a
		mmodule.linearize_mpropdefs(lin)
		return lin
	end

	# Methods tagged with `before_all` in this class definition
	private fun before_all: Array[MMethodDef] do
		var res = new ArraySet[MMethodDef]
		for mpropdef in mpropdefs do
			if mpropdef isa MMethodDef and mpropdef.is_before_all then
				res.add mpropdef
			end
		end
		var in_hierarchy = self.in_hierarchy
		if in_hierarchy == null then return res.to_a
		for mclassdef in in_hierarchy.direct_greaters do
			res.add_all mclassdef.before_all
		end
		var lin = res.to_a
		mmodule.linearize_mpropdefs(lin)
		return lin
	end

	# Methods tagged with `after` in this class definition
	private fun after: Array[MMethodDef] do
		var res = new ArraySet[MMethodDef]
		for mpropdef in mpropdefs do
			if mpropdef isa MMethodDef and mpropdef.is_after then
				res.add mpropdef
			end
		end
		var in_hierarchy = self.in_hierarchy
		if in_hierarchy == null then return res.to_a
		for mclassdef in in_hierarchy.direct_greaters do
			res.add_all mclassdef.after
		end
		var lin = res.to_a
		mmodule.linearize_mpropdefs(lin)
		return lin.reversed
	end

	# Methods tagged with `after_all` in this class definition
	private fun after_all: Array[MMethodDef] do
		var res = new ArraySet[MMethodDef]
		for mpropdef in mpropdefs do
			if mpropdef isa MMethodDef and mpropdef.is_after_all then
				res.add mpropdef
			end
		end
		var in_hierarchy = self.in_hierarchy
		if in_hierarchy == null then return res.to_a
		for mclassdef in in_hierarchy.direct_greaters do
			res.add_all mclassdef.after_all
		end
		var lin = res.to_a
		mmodule.linearize_mpropdefs(lin)
		return lin.reversed
	end
end
src/testing/testing_suite.nit:470,1--542,3

nitc :: model_collect $ MClassDef
redef class MClassDef

	redef fun collect_modifiers do
		var res = super
		if not is_intro then
			res.add "redef"
		else
			if mclass.visibility != public_visibility then
				res.add mclass.visibility.to_s
			end
		end
		res.add mclass.kind.to_s
		return res
	end

	redef fun collect_linearization(mainmodule) do
		var mclassdefs = new Array[MClassDef]
		for mclassdef in in_hierarchy.as(not null).greaters do
			if mclassdef.mclass == self.mclass then mclassdefs.add mclassdef
		end
		mainmodule.linearize_mclassdefs(mclassdefs)
		return mclassdefs
	end

	redef fun collect_parents(mainmodule, filter) do
		var res = new HashSet[MENTITY]
		var hierarchy = self.in_hierarchy
		if hierarchy == null then return res
		for parent in hierarchy.direct_greaters do
			if parent == self then continue
			if filter == null or filter.accept_mentity(parent) then res.add parent
		end
		return res
	end

	redef fun collect_children(mainmodule, filter) do
		var res = new HashSet[MENTITY]
		var hierarchy = self.in_hierarchy
		if hierarchy == null then return res
		for child in hierarchy.direct_smallers do
			if child == self then continue
			if filter == null or filter.accept_mentity(child) then res.add child
		end
		return res
	end

	# Collect all property definitions in `self`
	fun collect_mpropdefs(filter: nullable ModelFilter): Set[MPropDef] do
		var res = new HashSet[MPropDef]
		for mpropdef in mpropdefs do
			if filter == null or filter.accept_mentity(mpropdef) then res.add mpropdef
		end
		return res
	end

	# Collect all attribute definitions in `self`
	fun collect_mattributedefs(filter: nullable ModelFilter): Set[MAttributeDef] do
		var res = new HashSet[MAttributeDef]
		for mpropdef in collect_mpropdefs(filter) do
			if not mpropdef isa MAttributeDef then continue
			res.add mpropdef
		end
		return res
	end

	# Collect all methods definitions in `self`
	fun collect_mmethoddefs(filter: nullable ModelFilter): Set[MMethodDef] do
		var res = new HashSet[MMethodDef]
		for mpropdef in collect_mpropdefs(filter) do
			if not mpropdef isa MMethodDef then continue
			res.add mpropdef
		end
		return res
	end

	# Collect all virtual types definitions in `self`
	fun collect_mtypedefs(filter: nullable ModelFilter): Set[MVirtualTypeDef] do
		var res = new HashSet[MVirtualTypeDef]
		for mpropdef in collect_mpropdefs(filter) do
			if not mpropdef isa MVirtualTypeDef then continue
			res.add mpropdef
		end
		return res
	end

	# Collect all property definitions that are introduction in `self`
	fun collect_intro_mpropdefs(filter: nullable ModelFilter): Set[MPropDef] do
		var res = new HashSet[MPropDef]
		for mpropdef in mpropdefs do
			if not mpropdef.is_intro then continue
			if filter == null or filter.accept_mentity(mpropdef) then res.add mpropdef
		end
		return res
	end

	# Collect all property definitions that are redefinition in `self`
	fun collect_redef_mpropdefs(filter: nullable ModelFilter): Set[MPropDef] do
		var res = new HashSet[MPropDef]
		for mpropdef in mpropdefs do
			if mpropdef.is_intro then continue
			if filter == null or filter.accept_mentity(mpropdef) then res.add mpropdef
		end
		return res
	end
end
src/model/model_collect.nit:968,1--1072,3

nitc :: model_visitor $ MClassDef
redef class MClassDef
	# Visit all the classes and class definitions of the module.
	#
	# On property introduction, the `MProperty` then the `MPropDef` are visited.
	# On property redefinition, only the `MPropDef` is visited (the `MProperty` is visited in an inherited class).
	# On property inheritance, nothing is visited (the `MProperty` and the `MPropDef` are visited in inherited classes).
	redef fun visit_all(v) do
		for x in mpropdefs do
			if x.is_intro then v.enter_visit(x.mproperty)
			v.enter_visit(x)
		end
	end
end
src/model/model_visitor.nit:142,1--154,3

nitc :: nitrestful $ MClassDef
redef class MClassDef

	# Methods with the `restful` annotation in this class
	private var restful_methods = new Array[MMethod]
end
src/nitrestful.nit:88,1--92,3

nitc :: term_model $ MClassDef
redef class MClassDef
	redef fun cs_icon(no_color) do
		if is_intro then return visibility.cs_icon(no_color)
		return visibility.cs_visibility_color("*")
	end

	# Returns the MClassDef generic signature with static bounds.
	redef fun cs_signature(no_color) do
		var tpl = new FlatBuffer
		var mparameters = mclass.mparameters
		if not mparameters.is_empty then
			tpl.append "["
			for i in [0..mparameters.length[ do
				tpl.append "{mparameters[i].name}: "
				tpl.append bound_mtype.arguments[i].cs_signature(no_color)
				if i < mparameters.length - 1 then tpl.append ", "
			end
			tpl.append "]"
		end
		return tpl.write_to_string
	end
end
src/doc/templates/term_model.nit:153,1--174,3

nitc :: vim_autocomplete $ MClassDef
# Use `MClassDef` as anchor for its constructors only
redef class MClassDef
	private var target_constructor: nullable MMethodDef = null

	redef fun complete_name
	do
		var target_constructor = target_constructor
		assert target_constructor != null

		var params
		var mparameters = mclass.mparameters
		if not mparameters.is_empty then
			params = "[{mparameters.join(", ")}]"
		else
			params = ""
		end

		if target_constructor.name != "init" and target_constructor.name != "new" then
			return name + params + "." + target_constructor.name
		end

		return name + params
	end

	redef fun complete_mdoc
	do
		var target_constructor = target_constructor
		assert target_constructor != null

		if target_constructor.name != "init" and target_constructor.name != "new" then
			return target_constructor.mdoc
		end

		return mdoc
	end
end
src/doc/vim_autocomplete.nit:151,1--186,3

nitc :: model_index $ MClassDef
redef class MClassDef
	redef fun mentity_kind_rank do return 5
end
src/model/model_index.nit:662,1--664,3

nitc :: htmlight $ MClassDef
redef class MClassDef
	redef fun infobox(v)
	do
		var res = new HInfoBox(v, "class {mclass.name}")
		res.href = v.hrefto(self)
		if not v.show_infobox then return res
		if is_intro then
			res.new_field("class").text(mclass.name)
		else
			res.new_field("redef class").text(mclass.name)
			res.new_field("intro").add mclass.intro.linkto_text(v, "in {mclass.intro_mmodule.to_s}")
		end
		add_doc_to_infobox(res)

		var in_hierarchy = self.in_hierarchy
		if in_hierarchy == null then return res

		if in_hierarchy.greaters.length > 1 then
			var c = res.new_dropdown("hier", "super-classes")
			for x in in_hierarchy.greaters do
				if x == self then continue
				if not x.is_intro then continue
				c.open("li").add x.linkto(v)
			end
		end
		if in_hierarchy.smallers.length > 1 then
			var c = res.new_dropdown("hier", "sub-classes")
			for x in in_hierarchy.smallers do
				if x == self then continue
				if not x.is_intro then continue
				c.open("li").add x.linkto(v)
			end
		end
		if mclass.mclassdefs.length > 1 then
			var c = res.new_dropdown("redefs", "refinements")
			for x in mclass.mclassdefs do
				if x == self then continue
				c.open("li").add x.linkto_text(v, "in {x.mmodule}")
			end
		end
		return res
	end
end
src/htmlight.nit:496,1--538,3

nitc :: uml_module $ MClassDef
redef class MClassDef

	# Colour for the border of a class when first introduced
	#
	# Defaults to a shade of green
	var intro_colour = "#58B26A"

	# Colour for the border of a class when refined
	#
	# Defaults to a shade of red
	var redef_colour = "#B24758"

	redef fun tpl_module(model) do
		var name = self.name.escape_to_dot
		var t = new Template
		t.add "{mmodule.name.escape_to_dot}{name} [\n\tlabel = \"\{"
		if mclass.kind == abstract_kind then
			t.add "abstract\\n{name}"
		else if mclass.kind == interface_kind then
			t.add "interface\\n{name}"
		else
			t.add "{name}"
		end
		if mclass.arity > 0 then
			t.add "["
			var mparameters = mclass.mparameters
			t.add mparameters.first.name
			for i in [1 .. mparameters.length[ do
				t.add ", "
				t.add mparameters[i].name
			end
			t.add "]"
		end
		t.add "|"
		for i in mpropdefs do
			if not i isa MAttributeDef then continue
			if not model.filter.accept_mentity(i) then continue
			t.add i.tpl_module(model)
			t.add "\\l"
		end
		t.add "|"
		for i in mpropdefs do
			if not i isa MMethodDef then continue
			if not model.filter.accept_mentity(i) then continue
			t.add i.tpl_module(model)
			t.add "\\l"
		end
		t.add "\}\""
		if is_intro then
			t.add "color=\"{intro_colour}\""
		else
			t.add "color=\"{redef_colour}\""
		end
		t.add "\n]\n"
		var supers = in_hierarchy.direct_greaters
		for i in supers do
			if i.mmodule != mmodule then continue
			t.add "{i.mmodule}{i.name} -> {mmodule}{name} [dir=back"
			if i.mclass.kind == interface_kind then
				t.add " arrowtail=open style=dashed"
			else
				t.add " arrowtail=empty"
			end
			t.add "]\n"
		end
		return t
	end
end
src/uml/uml_module.nit:63,1--130,3

nitc :: mclassdef_collect $ MClassDef
redef class MClassDef
	# Collect all mproperties introduced in 'self' with `visibility >= min_visibility`.
	fun collect_intro_mproperties(filter: ModelFilter): Set[MProperty] do
		var set = new HashSet[MProperty]
			for mprop in self.intro_mproperties do
				if not filter.accept_mentity(mprop) then continue
				set.add(mprop)
			end
		return set
	end

	# Collect mmethods introduced in 'self' with `visibility >= min_visibility`.
	fun collect_intro_mmethods(filter: ModelFilter): Set[MMethod] do
		var res = new HashSet[MMethod]
		for mproperty in collect_intro_mproperties(filter) do
			if not filter.accept_mentity(mproperty) then continue
			if mproperty isa MMethod then res.add(mproperty)
		end
		return res
	end

	# Collect mmethods redefined in 'self' with `visibility >= min_visibility`.
	fun collect_redef_mmethods(filter: ModelFilter): Set[MMethod] do
		var res = new HashSet[MMethod]
		for mproperty in collect_redef_mproperties(filter) do
			if not filter.accept_mentity(mproperty) then continue
			if mproperty isa MMethod then res.add(mproperty)
		end
		return res
	end

	# Collect mattributes redefined in 'self' with `visibility >= min_visibility`.
	fun collect_redef_mattributes(filter: ModelFilter): Set[MAttribute] do
		var res = new HashSet[MAttribute]
		for mproperty in collect_redef_mproperties(filter) do
			if not filter.accept_mentity(mproperty) then continue
			if mproperty isa MAttribute then res.add(mproperty)
		end
		return res
	end

	# Collect mattributes introduced in 'self' with `visibility >= min_visibility`.
	fun collect_intro_mattributes(filter: ModelFilter): Set[MAttribute] do
		var res = new HashSet[MAttribute]
		for mproperty in collect_intro_mproperties(filter) do
			if not filter.accept_mentity(mproperty) then continue
			if mproperty isa MAttribute then res.add(mproperty)
		end
		return res
	end

	# Collect all mproperties redefined in 'self' with `visibility >= min_visibility`.
	fun collect_redef_mproperties(filter: ModelFilter): Set[MProperty] do
		var set = new HashSet[MProperty]
		for mpropdef in self.mpropdefs do
			if not filter.accept_mentity(mpropdef) then continue
			if mpropdef.mproperty.intro_mclassdef.mclass == self then continue
				set.add(mpropdef.mproperty)
			end
		return set
	end

	# Collect mmethods inherited by 'self' if accepted by `filter`.
	fun collect_inherited_mmethods(mainmodule: MModule, filter: ModelFilter): Set[MMethod] do
		var res = new HashSet[MMethod]
		for mproperty in collect_inherited_mproperties(mainmodule, filter) do
			if not filter.accept_mentity(mproperty) then continue
			if mproperty isa MMethod then res.add(mproperty)
		end
		return res
	end

	# Collect mproperties introduced and redefined in 'self' with `visibility >= min_visibility`.
	fun collect_local_mproperties(filter: ModelFilter): Set[MProperty] do
		var set = new HashSet[MProperty]
		set.add_all collect_intro_mproperties(filter)
		set.add_all collect_redef_mproperties(filter)
		return set
	end

	# Collect all mproperties inehrited by 'self' with `visibility >= min_visibility`.
	fun collect_inherited_mproperties(mainmodule: MModule, filter: ModelFilter): Set[MProperty] do
		var set = new HashSet[MProperty]
		for parent in collect_parents(mainmodule, filter) do
			set.add_all(parent.collect_intro_mproperties(filter))
			set.add_all(parent.collect_inherited_mproperties(mainmodule, filter))
		end
		return set
	end

	# Collect mattributes inherited by 'self' with `visibility >= min_visibility`.
	fun collect_inherited_mattributes(mainmodule: MModule, filter: ModelFilter): Set[MAttribute] do
		var res = new HashSet[MAttribute]
		for mproperty in collect_inherited_mproperties(mainmodule, filter) do
			if not filter.accept_mentity(mproperty) then continue
			if mproperty isa MAttribute then res.add(mproperty)
		end
		return res
	end

	# Collect all mmethod inehrited,intro and redef
	fun collect_all_methods(mainmodule: MModule, filter: ModelFilter): Set[MMethod] do
		var set = new HashSet[MMethod]
		set.add_all collect_intro_mmethods(filter)
		set.add_all collect_redef_mmethods(filter)
		set.add_all collect_inherited_mmethods(mainmodule, filter)
		return set
	end

	# Collect all mattributs inehrited,intro and redef
	fun collect_all_mattributes(mainmodule: MModule, filter: ModelFilter): Set[MAttribute] do
		var set = new HashSet[MAttribute]
		set.add_all collect_redef_mattributes(filter)
		set.add_all collect_intro_mattributes(filter)
		set.add_all collect_inherited_mattributes(mainmodule, filter)
		return set
	end

	# Collect intro and redef mmethods
	fun collect_intro_and_redef_methods(filter: ModelFilter): Set[MMethod] do
		var set = new HashSet[MMethod]
		set.add_all collect_intro_mmethods(filter)
		set.add_all collect_redef_mmethods(filter)
		return set
	end

	# Collect intro and redef mattributs
	fun collect_intro_and_redef_mattributes(filter: ModelFilter): Set[MAttribute] do
		var set = new HashSet[MAttribute]
		set.add_all collect_redef_mattributes(filter)
		set.add_all collect_intro_mattributes(filter)
		return set
	end

	# Collect intro and redef mpropdefs
	fun collect_intro_and_redef_mpropdefs(filter: ModelFilter): Set[MPropDef] do
		var set = new HashSet[MPropDef]
		set.add_all collect_intro_mpropdefs(filter)
		set.add_all collect_redef_mpropdefs(filter)
		return set
	end

	# Collect intro abstract mmethodDef
	fun collect_abstract_methods(filter: ModelFilter): Set[MMethodDef] do
		var set = new HashSet[MMethodDef]
		var mpropdefs = collect_intro_mpropdefs(filter)
		for mpropdef in mpropdefs do
			if mpropdef isa MMethodDef then
				if mpropdef.is_abstract then set.add(mpropdef)
			end
		end
		return set
	end

	# Collect not defined properties
	fun collect_not_define_properties(filter: ModelFilter):Set[MMethodDef] do
		var set = new HashSet[MMethodDef]
		for mpropdef in collect_abstract_methods(filter) do
			var redef_count = 0
			for mprop in mpropdef.mproperty.mpropdefs do
				if mprop.is_abstract then continue
				redef_count += 1
			end
			if redef_count == 0 then set.add(mpropdef)
		end
		return set
	end
end
src/metrics/mclassdef_collect.nit:23,1--190,3

nitc :: nitlight $ MClassDef
redef class MClassDef
	redef fun href(v)
	do
		var m = mmodule.href(v)
		if m == null then return null
		return m + "#" + to_s
	end
end
src/nitlight.nit:59,1--66,3

nitc :: html_model $ MClassDef
redef class MClassDef
	redef fun css_classes do return super + mclass.css_classes

	redef fun html_namespace do
		var tpl = new Template
		var mpackage = mmodule.mpackage
		if mpackage != null and is_intro then
			if is_intro then
				tpl.add mpackage.html_namespace
				tpl.add " $ "
			else
				tpl.add mmodule.html_namespace
				tpl.add " $ "
				var intro_mpackage = mclass.intro.mmodule.mpackage
				if intro_mpackage != null and mpackage != intro_mpackage then
					tpl.add intro_mpackage.html_namespace
					tpl.add " :: "
				end
			end
		else
			tpl.add mmodule.html_namespace
			tpl.add " $ "
		end
		tpl.add html_link
		return tpl
	end

	redef fun html_icon do
		if is_intro then
			return new BSIcon("plus", css_classes)
		end
		return new BSIcon("asterisk", css_classes)
	end

	redef fun html_signature(short) do
		var tpl = new Template
		var mparameters = mclass.mparameters
		if not mparameters.is_empty then
			tpl.add "["
			for i in [0..mparameters.length[ do
				tpl.add mparameters[i].html_name
				if short == null or not short then
					tpl.add ": "
					tpl.add bound_mtype.arguments[i].html_signature(short)
				end
				if i < mparameters.length - 1 then tpl.add ", "
			end
			tpl.add "]"
		end
		return tpl
	end
end
src/doc/templates/html_model.nit:153,1--204,3

nitc :: static_base $ MClassDef
redef class MClassDef
	redef var nitdoc_breadcrumbs is lazy do
		var res = new Array[MEntity].from(mmodule.nitdoc_breadcrumbs)
		res.add self
		return res
	end
end
src/doc/static/static_base.nit:279,1--285,3

nitc :: static_html $ MClassDef
redef class MClassDef
	redef var html_url is lazy do
		if is_intro then return mclass.html_url
		return "{mclass.html_url}?def=def_code_{html_id}#lin"
	end
end
src/doc/static/static_html.nit:392,1--397,3

nitc :: api_base $ MClassDef
redef class MClassDef
	redef fun web_url do return "{mclass.web_url}/lin#{full_name}"
end
src/doc/api/api_base.nit:193,1--195,3