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