A model knows modules, classes and properties and can retrieve them.
nitc :: Model :: _fname_sorter
nitc :: Model :: _full_mtype_specialization_hierarchy
Global overlapped class-type hierarchy.nitc :: Model :: _intro_mtype_specialization_hierarchy
Class-type hierarchy restricted to the introduction.nitc :: Model :: _kind_sorter
nitc :: Model :: _lfname_sorter
nitc :: Model :: _lname_sorter
nitc :: Model :: _mclassdef_hierarchy
Hierarchy of class definition.nitc :: Model :: _mclasses_by_name
Collections of classes grouped by their short namenitc :: Model :: _mentities_by_full_name
Keep a direct link to mentities by full name to speed upmentity_from_uri
			nitc :: Model :: _mmodule_importation_hierarchy
Full module importation hierarchy including private or nested links.nitc :: Model :: _mmodules_by_name
Collections of modules grouped by their short namesnitc :: Model :: _mpackage_by_name
Collections of package grouped by their namesnitc :: Model :: _mpackage_importation_graph
Full package importation graphnitc :: Model :: _mproperties_by_name
Collections of properties grouped by their short namenitc :: Model :: _name_sorter
nitc :: Model :: _nitdoc_inline_processor
Get a markdown inline processor for Nitdoc comments.nitc :: Model :: _nitdoc_md_processor
Get a markdown processor for Nitdoc comments.nitc :: Model :: _no_location
Place-holder object that means no-locationnitc :: Model :: _score_sorter
nitc :: Model :: _vis_sorter
nitc :: Model :: bottom_type=
The only bottom typenitc :: Model :: collect_intro_mclasses
Collect all MClasses introduced inself
			nitc :: Model :: collect_intro_mproperties
Collect all MProperties introduced inself
			nitc :: Model :: collect_mclassdefs
Collect all MClassDefs inself
			nitc :: Model :: collect_mclasses
Collect all MClasses inself
			nitc :: Model :: collect_mentities
Collect all MEntities inself
			nitc :: Model :: collect_mgroups
Collect all MGroups inself
			nitc :: Model :: collect_mmodules
Collect all MModules inself
			nitc :: Model :: collect_mpackages
Collect all MPackages inself
			nitc :: Model :: collect_mpropdefs
Collect all MPropDefs inself
			nitc :: Model :: collect_mproperties
Collect all MProperties inself
			nitc :: Model :: concerns_tree
Build an ordered tree with fromconcerns
			nitc :: Model :: defaultinit
nitc :: Model :: fname_sorter
nitc :: Model :: fname_sorter=
nitc :: Model :: full_mtype_specialization_hierarchy
Global overlapped class-type hierarchy.nitc :: Model :: full_mtype_specialization_hierarchy=
Global overlapped class-type hierarchy.nitc :: Model :: get_avg_attribut
nitc :: Model :: get_avg_linenumber
nitc :: Model :: get_avg_method
nitc :: Model :: get_avg_parameter
nitc :: Model :: get_mclasses_by_name
Return all classes namedname.
			nitc :: Model :: get_mmodules_by_name
Return all module namedname
			nitc :: Model :: get_mpackages_by_name
Return all package namedname
			nitc :: Model :: get_mproperties_by_name
Return all properties namedname.
			nitc :: Model :: intro_mtype_specialization_hierarchy
Class-type hierarchy restricted to the introduction.nitc :: Model :: intro_mtype_specialization_hierarchy=
Class-type hierarchy restricted to the introduction.nitc :: Model :: kind_sorter
nitc :: Model :: kind_sorter=
nitc :: Model :: lfname_sorter
nitc :: Model :: lfname_sorter=
nitc :: Model :: lname_sorter
nitc :: Model :: lname_sorter=
nitc :: Model :: mclassdef_hierarchy
Hierarchy of class definition.nitc :: Model :: mclassdef_hierarchy=
Hierarchy of class definition.nitc :: Model :: mclasses_by_name
Collections of classes grouped by their short namenitc :: Model :: mclasses_by_name=
Collections of classes grouped by their short namenitc :: Model :: mentities_by_full_name
Keep a direct link to mentities by full name to speed upmentity_from_uri
			nitc :: Model :: mentities_by_full_name=
Keep a direct link to mentities by full name to speed upmentity_from_uri
			nitc :: Model :: mentities_by_name
Searches the MEntities that matchesfull_name.
			nitc :: Model :: mentity_by_full_name
Searches the MEntity that matchesfull_name.
			nitc :: Model :: mmodule_importation_hierarchy
Full module importation hierarchy including private or nested links.nitc :: Model :: mmodule_importation_hierarchy=
Full module importation hierarchy including private or nested links.nitc :: Model :: mmodules_by_name
Collections of modules grouped by their short namesnitc :: Model :: mmodules_by_name=
Collections of modules grouped by their short namesnitc :: Model :: mpackage_by_name
Collections of package grouped by their namesnitc :: Model :: mpackage_by_name=
Collections of package grouped by their namesnitc :: Model :: mpackage_importation_graph
Full package importation graphnitc :: Model :: mpackage_importation_graph=
Full package importation graphnitc :: Model :: mpackages=
packages of the modelnitc :: Model :: mproperties=
All known propertiesnitc :: Model :: mproperties_by_name
Collections of properties grouped by their short namenitc :: Model :: mproperties_by_name=
Collections of properties grouped by their short namenitc :: Model :: name_sorter
nitc :: Model :: name_sorter=
nitc :: Model :: nitdoc_inline_processor
Get a markdown inline processor for Nitdoc comments.nitc :: Model :: nitdoc_inline_processor=
Get a markdown inline processor for Nitdoc comments.nitc :: Model :: nitdoc_md_processor
Get a markdown processor for Nitdoc comments.nitc :: Model :: nitdoc_md_processor=
Get a markdown processor for Nitdoc comments.nitc :: Model :: no_location=
Place-holder object that means no-locationnitc :: Model :: score_sorter
nitc :: Model :: score_sorter=
nitc :: Model :: to_mpackage_tree
Generate a MPackageTree based on the packages, groups and modules known in the modelnitc :: Model :: vis_sorter
nitc :: Model :: vis_sorter=
nitc :: model_index $ Model :: mentities_by_name
Searches the MEntities that matchesfull_name.
			nitc :: model_index $ Model :: mentity_by_full_name
Searches the MEntity that matchesfull_name.
			nitc :: model_visitor $ Model :: visit_all
Visit all the packages of the model.nitc :: MEntity :: _const_color
nitc :: MEntity :: _css_classes
CSS classes used to decorateself
			nitc :: MEntity :: _deprecation
Is the entity deprecated?nitc :: Model :: _fname_sorter
nitc :: Model :: _full_mtype_specialization_hierarchy
Global overlapped class-type hierarchy.nitc :: MEntity :: _html_full_name
The MEntityfull_name escaped for HTML
			nitc :: Model :: _intro_mtype_specialization_hierarchy
Class-type hierarchy restricted to the introduction.nitc :: MEntity :: _is_broken
The indication that the entity did not pass some semantic verifications.nitc :: Model :: _kind_sorter
nitc :: Model :: _lfname_sorter
nitc :: Model :: _lname_sorter
nitc :: Model :: _mclassdef_hierarchy
Hierarchy of class definition.nitc :: Model :: _mclasses_by_name
Collections of classes grouped by their short namenitc :: Model :: _mentities_by_full_name
Keep a direct link to mentities by full name to speed upmentity_from_uri
			nitc :: Model :: _mmodule_importation_hierarchy
Full module importation hierarchy including private or nested links.nitc :: Model :: _mmodules_by_name
Collections of modules grouped by their short namesnitc :: Model :: _mpackage_by_name
Collections of package grouped by their namesnitc :: Model :: _mpackage_importation_graph
Full package importation graphnitc :: Model :: _mproperties_by_name
Collections of properties grouped by their short namenitc :: Model :: _name_sorter
nitc :: Model :: _nitdoc_inline_processor
Get a markdown inline processor for Nitdoc comments.nitc :: Model :: _nitdoc_md_processor
Get a markdown processor for Nitdoc comments.nitc :: Model :: _no_location
Place-holder object that means no-locationnitc :: Model :: _score_sorter
nitc :: Model :: _vis_sorter
serialization :: Serializable :: accept_inspect_serializer_core
serialization :: Serializable :: accept_json_serializer
Refinable service to customize the serialization of this class to JSONserialization :: Serializable :: accept_msgpack_attribute_counter
Hook to customize the behavior of theAttributeCounter
			serialization :: Serializable :: accept_msgpack_serializer
Hook to customize the serialization of this class to MessagePacknitc :: MEntity :: add_doc_to_infobox
Append an entry for the doc in the given infoboxserialization :: Serializable :: add_to_bundle
Called by[]= to dynamically choose the appropriate method according
			nitc :: Model :: bottom_type=
The only bottom typecore :: Object :: class_factory
Implementation used byget_class to create the specific class.
			nitc :: MEntity :: collect_ancestors
Collectself ancestors (direct and indirect)
			nitc :: MEntity :: collect_children
Collectself children (direct descendants)
			nitc :: MEntity :: collect_descendants
Collectself descendants (direct and direct)
			nitc :: Model :: collect_intro_mclasses
Collect all MClasses introduced inself
			nitc :: Model :: collect_intro_mproperties
Collect all MProperties introduced inself
			nitc :: MEntity :: collect_linearization
Collectself linearization anchored on mainmodule
			nitc :: Model :: collect_mclassdefs
Collect all MClassDefs inself
			nitc :: Model :: collect_mclasses
Collect all MClasses inself
			nitc :: Model :: collect_mentities
Collect all MEntities inself
			nitc :: MEntity :: collect_metrics
nitc :: Model :: collect_mgroups
Collect all MGroups inself
			nitc :: Model :: collect_mmodules
Collect all MModules inself
			nitc :: MEntity :: collect_modifiers
Collect modifier keywords likeredef, private etc
			nitc :: Model :: collect_mpackages
Collect all MPackages inself
			nitc :: Model :: collect_mpropdefs
Collect all MPropDefs inself
			nitc :: Model :: collect_mproperties
Collect all MProperties inself
			nitc :: MEntity :: collect_parents
Collectself parents (direct ancestors)
			nitc :: Model :: concerns_tree
Build an ordered tree with fromconcerns
			nitc :: MEntity :: const_color
nitc :: MEntity :: const_color=
nitc :: MEntity :: core_serialize_base
serialization :: Serializable :: core_serialize_to
Actual serialization ofself to serializer
			nitc :: MEntity :: create_ast_representation
Build a ANode fromself
			nitc :: MEntity :: cs_comment
Returns the comment of this MEntity formatted for console.nitc :: MEntity :: cs_declaration
Returns the complete MEntity declaration (modifiers + name + signature).nitc :: MEntity :: cs_full_name
Returnsself.full_name formatted for console
			nitc :: MEntity :: cs_list_item
Returnsself as a list element that can be displayed in console.
			nitc :: MEntity :: cs_location
Source code location of this MEntity formatted for consolenitc :: MEntity :: cs_short_comment
Returns the comment of this MEntity formatted for console.nitc :: MEntity :: cs_signature
Returnsself signature formatted for console.
			nitc :: MEntity :: cs_source_code
Source code associated to this MEntity.nitc :: MEntity :: css_classes=
CSS classes used to decorateself
			nitc :: Model :: defaultinit
nitc :: HInfoBoxable :: defaultinit
core :: Object :: defaultinit
nitc :: MEntity :: defaultinit
nitc :: MEntity :: deprecation=
Is the entity deprecated?nitc :: MEntity :: field_separator
nitc :: Model :: fname_sorter
nitc :: Model :: fname_sorter=
serialization :: Serializable :: from_deserializer
Create an instance of this class from thedeserializer
			nitc :: Model :: full_mtype_specialization_hierarchy
Global overlapped class-type hierarchy.nitc :: Model :: full_mtype_specialization_hierarchy=
Global overlapped class-type hierarchy.nitc :: Model :: get_avg_attribut
nitc :: Model :: get_avg_linenumber
nitc :: Model :: get_avg_method
nitc :: Model :: get_avg_parameter
nitc :: Model :: get_mclasses_by_name
Return all classes namedname.
			nitc :: Model :: get_mmodules_by_name
Return all module namedname
			nitc :: Model :: get_mpackages_by_name
Return all package namedname
			nitc :: Model :: get_mproperties_by_name
Return all properties namedname.
			nitc :: MEntity :: hierarchy_poset
Build a poset representingself in it's own hierarchy
			nitc :: MEntity :: html_declaration
Returns the complete MEntity declaration decorated with HTMLnitc :: MEntity :: html_full_name=
The MEntityfull_name escaped for HTML
			nitc :: MEntity :: html_name=
The MEntity name escaped for HTMLnitc :: MEntity :: html_namespace
Returnsfull_name decorated with HTML links
			nitc :: MEntity :: html_signature
Returns the MEntity signature decorated with HTMLnitc :: HInfoBoxable :: infobox
An new infobox documenting the entitynitc :: Model :: intro_mtype_specialization_hierarchy
Class-type hierarchy restricted to the introduction.nitc :: Model :: intro_mtype_specialization_hierarchy=
Class-type hierarchy restricted to the introduction.nitc :: MEntity :: is_broken=
The indication that the entity did not pass some semantic verifications.nitc :: MEntity :: is_fictive=
Isself created for internal purpose?
			core :: Object :: is_same_instance
Return true ifself and other are the same instance (i.e. same identity).
			core :: Object :: is_same_serialized
Isself the same as other in a serialization context?
			core :: Object :: is_same_type
Return true ifself and other have the same dynamic type.
			nitc :: MEntity :: json_namespace
Returnself.full_name as an object that can be serialized to json.
			nitc :: Model :: kind_sorter
nitc :: Model :: kind_sorter=
nitc :: Model :: lfname_sorter
nitc :: Model :: lfname_sorter=
nitc :: MEntity :: line_separator
nitc :: MEntity :: linkto_text
Link to theself with a specific text.
			nitc :: Model :: lname_sorter
nitc :: Model :: lname_sorter=
nitc :: Model :: mclassdef_hierarchy
Hierarchy of class definition.nitc :: Model :: mclassdef_hierarchy=
Hierarchy of class definition.nitc :: Model :: mclasses_by_name
Collections of classes grouped by their short namenitc :: Model :: mclasses_by_name=
Collections of classes grouped by their short namenitc :: MEntity :: mdoc_or_fallback
The documentation associated to the entity or their main nested entity.nitc :: Model :: mentities_by_full_name
Keep a direct link to mentities by full name to speed upmentity_from_uri
			nitc :: Model :: mentities_by_full_name=
Keep a direct link to mentities by full name to speed upmentity_from_uri
			nitc :: Model :: mentities_by_name
Searches the MEntities that matchesfull_name.
			nitc :: Model :: mentity_by_full_name
Searches the MEntity that matchesfull_name.
			nitc :: Model :: mmodule_importation_hierarchy
Full module importation hierarchy including private or nested links.nitc :: Model :: mmodule_importation_hierarchy=
Full module importation hierarchy including private or nested links.nitc :: Model :: mmodules_by_name
Collections of modules grouped by their short namesnitc :: Model :: mmodules_by_name=
Collections of modules grouped by their short namesnitc :: Model :: mpackage_by_name
Collections of package grouped by their namesnitc :: Model :: mpackage_by_name=
Collections of package grouped by their namesnitc :: Model :: mpackage_importation_graph
Full package importation graphnitc :: Model :: mpackage_importation_graph=
Full package importation graphnitc :: Model :: mpackages=
packages of the modelnitc :: Model :: mproperties=
All known propertiesnitc :: Model :: mproperties_by_name
Collections of properties grouped by their short namenitc :: Model :: mproperties_by_name=
Collections of properties grouped by their short nameserialization :: Serializable :: msgpack_extra_array_items
Hook to request a larger than usual metadata arraynitc :: Model :: name_sorter
nitc :: Model :: name_sorter=
core :: Object :: native_class_name
The class name of the object in CString format.nitc :: Model :: nitdoc_inline_processor
Get a markdown inline processor for Nitdoc comments.nitc :: Model :: nitdoc_inline_processor=
Get a markdown inline processor for Nitdoc comments.nitc :: Model :: nitdoc_md_processor
Get a markdown processor for Nitdoc comments.nitc :: Model :: nitdoc_md_processor=
Get a markdown processor for Nitdoc comments.nitc :: Model :: no_location=
Place-holder object that means no-locationcore :: Object :: output_class_name
Display class name on stdout (debug only).mentity
			nitc :: MEntity :: ratings_by_dimension
Get the ratings of adimension
			nitc :: Model :: score_sorter
nitc :: Model :: score_sorter=
serialization :: Serializable :: serialize_msgpack
Serializeself to MessagePack bytes
			serialization :: Serializable :: serialize_to
Serializeself to serializer
			serialization :: Serializable :: serialize_to_json
Serializeself to JSON
			serialization :: Serializable :: serialize_to_or_delay
Accept references or force direct serialization (usingserialize_to)
			nitc :: MEntity :: source_url
Render a HTML link for the MEntity locationnitc :: Model :: to_mpackage_tree
Generate a MPackageTree based on the packages, groups and modules known in the modelserialization :: Serializable :: to_pretty_json
Serializeself to plain pretty JSON
			nitc :: MEntity :: tpl_module
Builds a dot UML package diagram entity fromself
			nitc :: Model :: vis_sorter
nitc :: Model :: vis_sorter=
v.enter_visit on all nested entities.
			nitc :: MEntity :: write_extra_doc
Extra auto documentation to append to thestream
			nitc :: MEntity :: write_location
Location (file and line when available) of related declarationsSerializer::serialize
			nitc :: ModelDiamond
A standalone model with the common class diamond-hierarchy ABCD
# The container class of a Nit object-oriented model.
# A model knows modules, classes and properties and can retrieve them.
class Model
	super MEntity
	redef fun model do return self
	# Place-holder object that means no-location
	#
	# See `MEntity::location`
	var no_location = new Location(null, 0, 0, 0, 0)
end
					src/model/model_base.nit:21,1--32,3
				
redef class Model
	# Full package importation graph
	# Each package is in relation with itself
	var mpackage_importation_graph = new HashDigraph[MPackage]
	# packages of the model
	var mpackages = new Array[MPackage]
	# Collections of package grouped by their names
	private var mpackage_by_name = new MultiHashMap[String, MPackage]
	# Return all package named `name`
	# If such a package is not yet loaded, null is returned (instead of an empty array)
	fun get_mpackages_by_name(name: String): nullable Array[MPackage]
	do
		if mpackage_by_name.has_key(name) then
			return mpackage_by_name[name]
		else
			return null
		end
	end
end
					src/model/mpackage.nit:182,1--204,3
				
# The container class of a Nit object-oriented model.
#
# A model knows modules, classes and properties and can retrieve them.
#
# However, a model is not a program or a library as it can contains modules
# found by the system (including broken ones) but not used.
redef class Model
	# All known modules
	var mmodules = new Array[MModule]
	# Full module importation hierarchy including private or nested links.
	var mmodule_importation_hierarchy = new POSet[MModule]
	# Collections of modules grouped by their short names
	private var mmodules_by_name = new MultiHashMap[String, MModule]
	# Return all module named `name`
	# If such a module does not exist, null is returned (instead of an empty array)
	#
	# Visibility or modules are not considered
	fun get_mmodules_by_name(name: String): nullable Array[MModule]
	do
		if mmodules_by_name.has_key(name) then
			return mmodules_by_name[name]
		else
			return null
		end
	end
end
					src/model/mmodule.nit:23,1--51,3
				
redef class Model
	# All known classes
	var mclasses = new Array[MClass]
	# All known properties
	var mproperties = new Array[MProperty]
	# Hierarchy of class definition.
	#
	# Each classdef is associated with its super-classdefs in regard to
	# its module of definition.
	#
	# ~~~
	# var m = new ModelDiamond
	# assert     m.mclassdef_hierarchy.has_edge(m.mclassdef_b, m.mclassdef_a)
	# assert not m.mclassdef_hierarchy.has_edge(m.mclassdef_a, m.mclassdef_b)
	# assert not m.mclassdef_hierarchy.has_edge(m.mclassdef_b, m.mclassdef_c)
	# ~~~
	var mclassdef_hierarchy = new POSet[MClassDef]
	# Class-type hierarchy restricted to the introduction.
	#
	# The idea is that what is true on introduction is always true whatever
	# the module considered.
	# Therefore, this hierarchy is used for a fast positive subtype check.
	#
	# This poset will evolve in a monotonous way:
	# * Two non connected nodes will remain unconnected
	# * New nodes can appear with new edges
	private var intro_mtype_specialization_hierarchy = new POSet[MClassType]
	# Global overlapped class-type hierarchy.
	# The hierarchy when all modules are combined.
	# Therefore, this hierarchy is used for a fast negative subtype check.
	#
	# This poset will evolve in an anarchic way. Loops can even be created.
	#
	# FIXME decide what to do on loops
	private var full_mtype_specialization_hierarchy = new POSet[MClassType]
	# Collections of classes grouped by their short name
	private var mclasses_by_name = new MultiHashMap[String, MClass]
	# Return all classes named `name`.
	#
	# If such a class does not exist, null is returned
	# (instead of an empty array)
	#
	# Visibility or modules are not considered
	#
	# ~~~
	# var m = new ModelStandalone
	# assert m.get_mclasses_by_name("Object") == [m.mclass_o]
	# assert m.get_mclasses_by_name("Fail") == null
	# ~~~
	fun get_mclasses_by_name(name: String): nullable Array[MClass]
	do
		return mclasses_by_name.get_or_null(name)
	end
	# Collections of properties grouped by their short name
	private var mproperties_by_name = new MultiHashMap[String, MProperty]
	# Return all properties named `name`.
	#
	# If such a property does not exist, null is returned
	# (instead of an empty array)
	#
	# Visibility or modules are not considered
	fun get_mproperties_by_name(name: String): nullable Array[MProperty]
	do
		return mproperties_by_name.get_or_null(name)
	end
	# The only null type
	var null_type = new MNullType(self)
	# The only bottom type
	var bottom_type: MBottomType = null_type.as_notnull
	# Build an ordered tree with from `concerns`
	fun concerns_tree(mconcerns: Collection[MConcern]): ConcernsTree do
		var seen = new HashSet[MConcern]
		var res = new ConcernsTree
		var todo = new Array[MConcern]
		todo.add_all mconcerns
		while not todo.is_empty do
			var c = todo.pop
			if seen.has(c) then continue
			var pc = c.parent_concern
			if pc == null then
				res.add(null, c)
			else
				res.add(pc, c)
				todo.add(pc)
			end
			seen.add(c)
		end
		return res
	end
end
					src/model/model.nit:42,1--145,3
				
redef class Model
	# Generate a MPackageTree based on the packages, groups and modules known in the model
	fun to_mpackage_tree: MPackageTree
	do
		var res = new MPackageTree(self)
		for p in mpackages do
			for g in p.mgroups do
				res.add(g.parent, g)
				for m in g.mmodules do
					res.add(g, m)
				end
			end
		end
		return res
	end
end
					src/model/model_viz.nit:115,1--130,3
				
redef class Model
	# Collect all MPackages in `self`
	fun collect_mpackages(filter: nullable ModelFilter): HashSet[MPackage] do
		var res = new HashSet[MPackage]
		for mpackage in mpackages do
			if filter == null or filter.accept_mentity(mpackage) then res.add(mpackage)
		end
		return res
	end
	# Collect all MGroups in `self`
	fun collect_mgroups(filter: nullable ModelFilter): HashSet[MGroup] do
		var res = new HashSet[MGroup]
		for mpackage in collect_mpackages(filter) do
			res.add_all mpackage.collect_all_mgroups(filter)
		end
		return res
	end
	# Collect all MModules in `self`
	fun collect_mmodules(filter: nullable ModelFilter): HashSet[MModule] do
		var res = new HashSet[MModule]
		for mpackage in collect_mpackages(filter) do
			res.add_all mpackage.collect_all_mmodules(filter)
		end
		return res
	end
	# Collect all MClasses in `self`
	fun collect_mclasses(filter: nullable ModelFilter): HashSet[MClass] do
		var res = new HashSet[MClass]
		for mclass in mclasses do
			if filter == null or filter.accept_mentity(mclass) then res.add mclass
		end
		return res
	end
	# Collect all MClasses introduced in `self`
	fun collect_intro_mclasses(filter: nullable ModelFilter): HashSet[MClass] do
		var res = new HashSet[MClass]
		for mpackage in collect_mpackages(filter) do
			res.add_all mpackage.collect_intro_mclasses(filter)
		end
		return res
	end
	# Collect all MClassDefs in `self`
	fun collect_mclassdefs(filter: nullable ModelFilter): HashSet[MClassDef] do
		var res = new HashSet[MClassDef]
		for mclass in collect_mclasses(filter) do
			res.add_all mclass.collect_mclassdefs(filter)
		end
		return res
	end
	# Collect all MProperties introduced in `self`
	fun collect_intro_mproperties(filter: nullable ModelFilter): HashSet[MProperty] do
		var res = new HashSet[MProperty]
		for mpackage in collect_mpackages(filter) do
			res.add_all mpackage.collect_intro_mproperties(filter)
		end
		return res
	end
	# Collect all MProperties in `self`
	fun collect_mproperties(filter: nullable ModelFilter): HashSet[MProperty] do
		var res = new HashSet[MProperty]
		for mproperty in mproperties do
			if filter == null or filter.accept_mentity(mproperty) then res.add mproperty
		end
		return res
	end
	# Collect all MPropDefs in `self`
	fun collect_mpropdefs(filter: nullable ModelFilter): HashSet[MPropDef] do
		var res = new HashSet[MPropDef]
		for mproperty in collect_mproperties(filter) do
			for mpropdef in mproperty.mpropdefs do
				if filter == null or filter.accept_mentity(mpropdef) then res.add mpropdef
			end
		end
		return res
	end
	# Collect all MEntities in `self`
	fun collect_mentities(filter: nullable ModelFilter): HashSet[MEntity] do
		var res = new HashSet[MEntity]
		res.add_all collect_mpackages(filter)
		res.add_all collect_mgroups(filter)
		res.add_all collect_mmodules(filter)
		res.add_all collect_mclasses(filter)
		res.add_all collect_mclassdefs(filter)
		res.add_all collect_mproperties(filter)
		res.add_all collect_mpropdefs(filter)
		return res
	end
	# Searches the MEntity that matches `full_name`.
	fun mentity_by_full_name(full_name: String, filter: nullable ModelFilter): nullable MEntity do
		for mentity in collect_mentities(filter) do
			if filter != null and not filter.accept_mentity(mentity) then continue
			if mentity.full_name == full_name then return mentity
		end
		return null
	end
	# Searches the MEntities that matches `full_name`.
	fun mentities_by_name(name: String, filter: nullable ModelFilter): Array[MEntity] do
		var res = new Array[MEntity]
		for mentity in collect_mentities(filter) do
			if filter != null and not filter.accept_mentity(mentity) then continue
			if mentity.name == name then res.add mentity
		end
		return res
	end
end
					src/model/model_collect.nit:148,1--264,3
				
redef class Model
	# Visit all the packages of the model.
	redef fun visit_all(v) do
		for x in mpackages do v.enter_visit(x)
	end
end
					src/model/model_visitor.nit:106,1--111,3
				
redef class Model
	# Keep a direct link to mentities by full name to speed up `mentity_from_uri`
	var mentities_by_full_name: HashMap[String, MEntity] is lazy do
		var mentities_by_full_name = new HashMap[String, MEntity]
		for mentity in collect_mentities do
			mentities_by_full_name[mentity.full_name] = mentity
		end
		return mentities_by_full_name
	end
	# ModelIndex used to perform searches
	var index: ModelIndex is lazy, writable do
		var index = new ModelIndex
		for mentity in collect_mentities do
			if mentity isa MClassDef or mentity isa MPropDef then continue
			index.index mentity
		end
		return index
	end
	redef fun mentities_by_name(name, filter) do
		var res = new Array[MEntity]
		if not index.names.has_key(name) then return res
		for mentity in index.names[name] do
			if filter == null or filter.accept_mentity(mentity) then res.add mentity
		end
		return res
	end
	redef fun mentity_by_full_name(full_name, filter) do
		if mentities_by_full_name.has_key(full_name) then
			var mentity = mentities_by_full_name[full_name]
			if filter == null or filter.accept_mentity(mentity) then return mentity
		end
		return null
	end
	private var score_sorter = new ScoreComparator
	private var vis_sorter = new VisibilityComparator
	private var kind_sorter = new MEntityComparator
	private var name_sorter = new NameComparator
	private var lname_sorter = new NameLengthComparator
	private var fname_sorter = new FullNameComparator
	private var lfname_sorter = new FullNameLengthComparator
	# Search mentities based on a `query` string
	#
	# Lookup the index for anything matching `query` and return `limit` results.
	#
	# The algorithm used is the following:
	# 1- lookup by name prefix
	# 2- lookup by full_name prefix
	# 3- loopup by levenshtein distance
	#
	# At each step if the `limit` is reached, the algorithm stops and returns the results.
	fun find(query: String, limit: nullable Int, filter: nullable ModelFilter): Array[MEntity] do
		# Find, lookup by name prefix
		var matches = index.find_by_name_prefix(query, filter).uniq.
			sort(lname_sorter, name_sorter, kind_sorter)
		if limit != null and matches.length >= limit then
			return matches.limit(limit).rerank.sort(vis_sorter, score_sorter).mentities
		end
		matches = matches.rerank.sort(vis_sorter, score_sorter)
		# If limit not reached, lookup by full_name prefix
		var malus = matches.length
		var full_matches = new IndexMatches
		for match in index.find_by_full_name_prefix(query, filter).
			sort(kind_sorter, lfname_sorter, fname_sorter) do
			match.score += malus
			full_matches.add match
		end
		matches = matches.uniq
		if limit != null and matches.length + full_matches.length >= limit then
			matches.add_all full_matches
			matches = matches.uniq.limit(limit).rerank.sort(vis_sorter, score_sorter)
			return matches.mentities
		end
		# If limit not reached, lookup by similarity
		malus = matches.length
		var sim_matches = new IndexMatches
		for match in index.find_by_similarity(query, filter).sort(score_sorter, kind_sorter, lname_sorter, name_sorter) do
			match.score += malus
			sim_matches.add match
		end
		matches.add_all sim_matches
		matches = matches.uniq
		if limit != null then matches = matches.limit(limit)
		return matches.rerank.sort(vis_sorter, score_sorter).mentities
	end
end
					src/model/model_index.nit:133,1--225,3
				
redef class Model
	fun get_avg_parameter: Float do
		var counter = new Counter[MMethodDef]
		var filter = new ModelFilter
		for mclassdef in collect_mclassdefs(filter) do
			for method in mclassdef.collect_intro_and_redef_mpropdefs(filter) do
			# check if the property is a method definition
				if not method isa MMethodDef then continue
				#Check if method has a signature
				if method.msignature == null then continue
				if method.msignature.mparameters.length == 0 then continue
				counter[method] = method.msignature.mparameters.length
			end
		end
		return counter.avg + counter.std_dev
	end
	fun get_avg_attribut: Float do
		var counter = new Counter[MClassDef]
		var filter = new ModelFilter
		for mclassdef in collect_mclassdefs(filter) do
			var number_attributs = mclassdef.collect_intro_and_redef_mattributes(filter).length
			if number_attributs != 0 then counter[mclassdef] = number_attributs
		end
		return counter.avg + counter.std_dev
	end
	fun get_avg_method: Float do
		var counter = new Counter[MClassDef]
		var filter = new ModelFilter
		for mclassdef in collect_mclassdefs(filter) do
			var number_methodes = mclassdef.collect_intro_and_redef_methods(filter).length
			if number_methodes != 0 then counter[mclassdef] = number_methodes
		end
		return counter.avg + counter.std_dev
	end
	fun get_avg_linenumber(model_builder: ModelBuilder): Float do
		var methods_analyse_metrics = new Counter[MClassDef]
		var filter = new ModelFilter
		for mclassdef in collect_mclassdefs(filter) do
			var result = 0
			var count = 0
			for mmethoddef in call_analyze_methods(mclassdef,model_builder, filter) do
				result += mmethoddef.line_number
				if mmethoddef.line_number == 0 then continue
				count += 1
			end
			if not mclassdef.collect_local_mproperties(filter).length != 0 then continue
			if count == 0 then continue
			methods_analyse_metrics[mclassdef] = (result/count).to_i
		end
		return methods_analyse_metrics.avg + methods_analyse_metrics.std_dev
	end
end
					src/metrics/codesmells_metrics.nit:376,1--430,3
				
redef class Model
	# Get a markdown processor for Nitdoc comments.
	var nitdoc_md_processor: MarkdownProcessor is lazy, writable do
		var proc = new MarkdownProcessor
		proc.decorator = new NitdocDecorator
		return proc
	end
	# Get a markdown inline processor for Nitdoc comments.
	#
	# This processor is specificaly designed to inlinable doc elements like synopsis.
	var nitdoc_inline_processor: MarkdownProcessor is lazy, writable do
		var proc = new MarkdownProcessor
		proc.decorator = new InlineDecorator
		return proc
	end
end
					src/doc/templates/html_model.nit:554,1--570,3