Merge: nitweb: misc fixes
authorJean Privat <jean@pryen.org>
Mon, 5 Dec 2016 20:53:36 +0000 (15:53 -0500)
committerJean Privat <jean@pryen.org>
Mon, 5 Dec 2016 20:53:36 +0000 (15:53 -0500)
Should fix more points from #2177

* Sort list by alphabetical order
* Remove useless links on doc location
* Remove useless code tabs when the code linearization tab exists

Demo here: http://nitweb.moz-code.org/

Pull-Request: #2340

share/nitweb/directives/entity/location.html
share/nitweb/views/classdef.html
share/nitweb/views/propdef.html
src/model/model_json.nit
src/model/test_model_json.sav/test_classdefs_to_full_json.res
src/model/test_model_json.sav/test_classes_to_full_json.res
src/model/test_model_json.sav/test_modules_to_full_json.res
src/model/test_model_json.sav/test_packages_to_full_json.res
src/model/test_model_json.sav/test_props_to_full_json.res
src/web/api_model.nit

index 7e817c6..05f8ccb 100644 (file)
@@ -1,5 +1,4 @@
-<span ng-if='mentity.location'>
-       <a ng-href="{{mentity.web_url}}">{{mentity.location.file}}
-               <span ng-if='mentity.location.line_start'>:{{mentity.location.line_start}}</span>
-       </a>
+<span ng-if='mentity.location' class='text-muted'>
+       {{mentity.location.file}}
+       <span ng-if='mentity.location.line_start'>:{{mentity.location.line_start}}</span>
 </span>
index 04dfa46..1e1365b 100644 (file)
@@ -9,11 +9,6 @@
                        <span class='glyphicon glyphicon-arrow-down'/> Linearization
                </a>
        </li>
-       <li role='presentation'>
-               <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
-                       <span class='glyphicon glyphicon-console'/> Code
-               </a>
-       </li>
 </ul>
 
 <div class='tab-content'>
                        list-entities='linearization'
                        list-focus='mentity' />
        </div>
-       <div role='tabpanel' class='tab-pane fade' id='code'>
-               <div class='card'>
-                       <div class='card-body'>
-                               <pre ng-bind-html='code' />
-                               <entity-location mentity='mentity' />
-                       </div>
-               </div>
-       </div>
 </div>
index 825a782..975cfb5 100644 (file)
@@ -9,11 +9,6 @@
                        <span class='glyphicon glyphicon-arrow-down'/> Linearization
                </a>
        </li>
-       <li role='presentation'>
-               <a data-toggle='tab' data-target='#code' ng-click="entityCtrl.loadEntityCode()">
-                       <span class='glyphicon glyphicon-console'/> Code
-               </a>
-       </li>
 </ul>
 
 <div class='tab-content'>
                        list-entities='linearization'
                        list-focus='mentity' />
        </div>
-       <div role='tabpanel' class='tab-pane fade' id='code'>
-               <div class='card'>
-                       <div class='card-body'>
-                               <pre ng-bind-html='code' />
-                               <entity-location mentity='mentity' />
-                       </div>
-               </div>
-       </div>
 </div>
index ddd7023..8fe8754 100644 (file)
@@ -77,6 +77,14 @@ redef class MEntity
 
        # Same as `to_full_json` but with pretty json.
        fun to_pretty_full_json: String do return serialize_to_full_json(plain=true, pretty=true)
+
+       # Sort mentities by name
+       private fun sort_entities(mentities: Collection[MEntity]): Array[MEntity] do
+               var sorter = new MEntityNameSorter
+               var sorted = mentities.to_a
+               sorter.sort(sorted)
+               return sorted
+       end
 end
 
 redef class MDoc
@@ -111,7 +119,7 @@ redef class MPackage
                super
                if v isa FullJsonSerializer then
                        v.serialize_attribute("root", to_mentity_ref(root))
-                       v.serialize_attribute("mgroups", to_mentity_refs(mgroups))
+                       v.serialize_attribute("mgroups", to_mentity_refs(sort_entities(mgroups)))
                        var ini = self.ini
                        if ini != null then v.serialize_attribute("ini", ini.to_map)
                end
@@ -126,8 +134,8 @@ redef class MGroup
                        v.serialize_attribute("mpackage", to_mentity_ref(mpackage))
                        v.serialize_attribute("default_mmodule", to_mentity_ref(default_mmodule))
                        v.serialize_attribute("parent", to_mentity_ref(parent))
-                       v.serialize_attribute("mmodules", to_mentity_refs(mmodules))
-                       v.serialize_attribute("mgroups", to_mentity_refs(in_nesting.direct_smallers))
+                       v.serialize_attribute("mmodules", to_mentity_refs(sort_entities(mmodules)))
+                       v.serialize_attribute("mgroups", to_mentity_refs(sort_entities(in_nesting.direct_smallers)))
                end
        end
 end
@@ -139,10 +147,10 @@ redef class MModule
                        var view = private_view
                        v.serialize_attribute("mpackage", to_mentity_ref(mpackage))
                        v.serialize_attribute("mgroup", to_mentity_ref(mgroup))
-                       v.serialize_attribute("intro_mclasses", to_mentity_refs(intro_mclasses))
-                       v.serialize_attribute("mclassdefs", to_mentity_refs(mclassdefs))
-                       v.serialize_attribute("intro_mclassdefs", to_mentity_refs(collect_intro_mclassdefs(view)))
-                       v.serialize_attribute("redef_mclassdefs", to_mentity_refs(collect_redef_mclassdefs(view)))
+                       v.serialize_attribute("intro_mclasses", to_mentity_refs(sort_entities(intro_mclasses)))
+                       v.serialize_attribute("mclassdefs", to_mentity_refs(sort_entities(mclassdefs)))
+                       v.serialize_attribute("intro_mclassdefs", to_mentity_refs(sort_entities(collect_intro_mclassdefs(view))))
+                       v.serialize_attribute("redef_mclassdefs", to_mentity_refs(sort_entities(collect_redef_mclassdefs(view))))
                        v.serialize_attribute("imports", to_mentity_refs(in_importation.direct_greaters))
                end
        end
@@ -158,10 +166,10 @@ redef class MClass
                        v.serialize_attribute("intro_mmodule", to_mentity_ref(intro_mmodule))
                        v.serialize_attribute("mpackage", to_mentity_ref(intro_mmodule.mpackage))
                        v.serialize_attribute("mclassdefs", to_mentity_refs(mclassdefs))
-                       v.serialize_attribute("all_mproperties", to_mentity_refs(collect_accessible_mproperties(view)))
-                       v.serialize_attribute("intro_mproperties", to_mentity_refs(collect_intro_mproperties(view)))
-                       v.serialize_attribute("redef_mproperties", to_mentity_refs(collect_redef_mproperties(view)))
-                       v.serialize_attribute("parents", to_mentity_refs(collect_parents(view)))
+                       v.serialize_attribute("all_mproperties", to_mentity_refs(sort_entities(collect_accessible_mproperties(view))))
+                       v.serialize_attribute("intro_mproperties", to_mentity_refs(sort_entities(collect_intro_mproperties(view))))
+                       v.serialize_attribute("redef_mproperties", to_mentity_refs(sort_entities(collect_redef_mproperties(view))))
+                       v.serialize_attribute("parents", to_mentity_refs(sort_entities(collect_parents(view))))
                end
        end
 end
@@ -175,12 +183,12 @@ redef class MClassDef
                        var view = private_view
                        v.serialize_attribute("mmodule", to_mentity_ref(mmodule))
                        v.serialize_attribute("mclass", to_mentity_ref(mclass))
-                       v.serialize_attribute("mpropdefs", to_mentity_refs(mpropdefs))
-                       v.serialize_attribute("intro_mproperties", to_mentity_refs(intro_mproperties))
+                       v.serialize_attribute("mpropdefs", to_mentity_refs(sort_entities(mpropdefs)))
+                       v.serialize_attribute("intro_mproperties", to_mentity_refs(sort_entities(intro_mproperties)))
                        v.serialize_attribute("intro", to_mentity_ref(mclass.intro))
                        v.serialize_attribute("mpackage", to_mentity_ref(mmodule.mpackage))
-                       v.serialize_attribute("intro_mpropdefs", to_mentity_refs(collect_intro_mpropdefs(view)))
-                       v.serialize_attribute("redef_mpropdefs", to_mentity_refs(collect_redef_mpropdefs(view)))
+                       v.serialize_attribute("intro_mpropdefs", to_mentity_refs(sort_entities(collect_intro_mpropdefs(view))))
+                       v.serialize_attribute("redef_mpropdefs", to_mentity_refs(sort_entities(collect_redef_mpropdefs(view))))
                end
        end
 end
@@ -191,7 +199,7 @@ redef class MProperty
                if v isa FullJsonSerializer then
                        v.serialize_attribute("intro", to_mentity_ref(intro))
                        v.serialize_attribute("intro_mclassdef", to_mentity_ref(intro_mclassdef))
-                       v.serialize_attribute("mpropdefs", to_mentity_refs(mpropdefs))
+                       v.serialize_attribute("mpropdefs", to_mentity_refs(sort_entities(mpropdefs)))
                        v.serialize_attribute("intro_mclass", to_mentity_ref(intro_mclassdef.mclass))
                        v.serialize_attribute("mpackage", to_mentity_ref(intro_mclassdef.mmodule.mpackage))
                end
index 2dd320b..404065b 100644 (file)
                "full_name": "test_prog::Object"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Object$OTHER"
+               "full_name": "test_prog$Object$!="
        }, {
                "full_name": "test_prog$Object$=="
        }, {
-               "full_name": "test_prog$Object$!="
+               "full_name": "test_prog$Object$OTHER"
        }, {
                "full_name": "test_prog$Object$init"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
        }],
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
-               "full_name": "test_prog$Object$OTHER"
+               "full_name": "test_prog$Object$!="
        }, {
                "full_name": "test_prog$Object$=="
        }, {
-               "full_name": "test_prog$Object$!="
+               "full_name": "test_prog$Object$OTHER"
        }, {
                "full_name": "test_prog$Object$init"
        }],
                "full_name": "test_prog::Int"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Int$unary -"
+               "full_name": "test_prog$Int$*"
        }, {
                "full_name": "test_prog$Int$+"
        }, {
                "full_name": "test_prog$Int$-"
        }, {
-               "full_name": "test_prog$Int$*"
-       }, {
                "full_name": "test_prog$Int$/"
        }, {
                "full_name": "test_prog$Int$>"
        }, {
                "full_name": "test_prog$Int$to_f"
+       }, {
+               "full_name": "test_prog$Int$unary -"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Int::unary -"
+               "full_name": "test_prog::Int::*"
        }, {
                "full_name": "test_prog::Int::+"
        }, {
                "full_name": "test_prog::Int::-"
        }, {
-               "full_name": "test_prog::Int::*"
-       }, {
                "full_name": "test_prog::Int::/"
        }, {
                "full_name": "test_prog::Int::>"
        }, {
                "full_name": "test_prog::Int::to_f"
+       }, {
+               "full_name": "test_prog::Int::unary -"
        }],
        "intro": {
                "full_name": "test_prog$Int"
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
-               "full_name": "test_prog$Int$unary -"
+               "full_name": "test_prog$Int$*"
        }, {
                "full_name": "test_prog$Int$+"
        }, {
                "full_name": "test_prog$Int$-"
        }, {
-               "full_name": "test_prog$Int$*"
-       }, {
                "full_name": "test_prog$Int$/"
        }, {
                "full_name": "test_prog$Int$>"
        }, {
                "full_name": "test_prog$Int$to_f"
+       }, {
+               "full_name": "test_prog$Int$unary -"
        }],
        "redef_mpropdefs": []
 }
                "full_name": "test_prog::Float"
        },
        "mpropdefs": [{
+               "full_name": "test_prog$Float$*"
+       }, {
                "full_name": "test_prog$Float$+"
        }, {
                "full_name": "test_prog$Float$-"
        }, {
-               "full_name": "test_prog$Float$*"
-       }, {
                "full_name": "test_prog$Float$/"
        }, {
                "full_name": "test_prog$Float$>"
        }],
        "intro_mproperties": [{
+               "full_name": "test_prog::Float::*"
+       }, {
                "full_name": "test_prog::Float::+"
        }, {
                "full_name": "test_prog::Float::-"
        }, {
-               "full_name": "test_prog::Float::*"
-       }, {
                "full_name": "test_prog::Float::/"
        }, {
                "full_name": "test_prog::Float::>"
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
+               "full_name": "test_prog$Float$*"
+       }, {
                "full_name": "test_prog$Float$+"
        }, {
                "full_name": "test_prog$Float$-"
        }, {
-               "full_name": "test_prog$Float$*"
-       }, {
                "full_name": "test_prog$Float$/"
        }, {
                "full_name": "test_prog$Float$>"
                "full_name": "test_prog::Career"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Career$_strength_bonus"
-       }, {
-               "full_name": "test_prog$Career$strength_bonus"
+               "full_name": "test_prog$Career$_endurance_bonus"
        }, {
-               "full_name": "test_prog$Career$strength_bonus="
+               "full_name": "test_prog$Career$_intelligence_bonus"
        }, {
-               "full_name": "test_prog$Career$_endurance_bonus"
+               "full_name": "test_prog$Career$_strength_bonus"
        }, {
                "full_name": "test_prog$Career$endurance_bonus"
        }, {
                "full_name": "test_prog$Career$endurance_bonus="
        }, {
-               "full_name": "test_prog$Career$_intelligence_bonus"
+               "full_name": "test_prog$Career$Object::init"
        }, {
                "full_name": "test_prog$Career$intelligence_bonus"
        }, {
                "full_name": "test_prog$Career$intelligence_bonus="
        }, {
-               "full_name": "test_prog$Career$Object::init"
+               "full_name": "test_prog$Career$strength_bonus"
+       }, {
+               "full_name": "test_prog$Career$strength_bonus="
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::careers::Career::_strength_bonus"
-       }, {
-               "full_name": "test_prog::Career::strength_bonus"
+               "full_name": "test_prog::careers::Career::_endurance_bonus"
        }, {
-               "full_name": "test_prog::Career::strength_bonus="
+               "full_name": "test_prog::careers::Career::_intelligence_bonus"
        }, {
-               "full_name": "test_prog::careers::Career::_endurance_bonus"
+               "full_name": "test_prog::careers::Career::_strength_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus="
        }, {
-               "full_name": "test_prog::careers::Career::_intelligence_bonus"
-       }, {
                "full_name": "test_prog::Career::intelligence_bonus"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus="
+       }, {
+               "full_name": "test_prog::Career::strength_bonus"
+       }, {
+               "full_name": "test_prog::Career::strength_bonus="
        }],
        "intro": {
                "full_name": "test_prog$Career"
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
-               "full_name": "test_prog$Career$_strength_bonus"
-       }, {
-               "full_name": "test_prog$Career$strength_bonus"
+               "full_name": "test_prog$Career$_endurance_bonus"
        }, {
-               "full_name": "test_prog$Career$strength_bonus="
+               "full_name": "test_prog$Career$_intelligence_bonus"
        }, {
-               "full_name": "test_prog$Career$_endurance_bonus"
+               "full_name": "test_prog$Career$_strength_bonus"
        }, {
                "full_name": "test_prog$Career$endurance_bonus"
        }, {
                "full_name": "test_prog$Career$endurance_bonus="
        }, {
-               "full_name": "test_prog$Career$_intelligence_bonus"
-       }, {
                "full_name": "test_prog$Career$intelligence_bonus"
        }, {
                "full_name": "test_prog$Career$intelligence_bonus="
+       }, {
+               "full_name": "test_prog$Career$strength_bonus"
+       }, {
+               "full_name": "test_prog$Career$strength_bonus="
        }],
        "redef_mpropdefs": [{
                "full_name": "test_prog$Career$Object::init"
                "full_name": "test_prog::Race"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Race$_base_strength"
-       }, {
-               "full_name": "test_prog$Race$base_strength"
+               "full_name": "test_prog$Race$_base_endurance"
        }, {
-               "full_name": "test_prog$Race$base_strength="
+               "full_name": "test_prog$Race$_base_intelligence"
        }, {
-               "full_name": "test_prog$Race$_base_endurance"
+               "full_name": "test_prog$Race$_base_strength"
        }, {
                "full_name": "test_prog$Race$base_endurance"
        }, {
                "full_name": "test_prog$Race$base_endurance="
        }, {
-               "full_name": "test_prog$Race$_base_intelligence"
-       }, {
                "full_name": "test_prog$Race$base_intelligence"
        }, {
                "full_name": "test_prog$Race$base_intelligence="
        }, {
+               "full_name": "test_prog$Race$base_strength"
+       }, {
+               "full_name": "test_prog$Race$base_strength="
+       }, {
                "full_name": "test_prog$Race$Object::init"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::races::Race::_base_strength"
-       }, {
-               "full_name": "test_prog::Race::base_strength"
+               "full_name": "test_prog::races::Race::_base_endurance"
        }, {
-               "full_name": "test_prog::Race::base_strength="
+               "full_name": "test_prog::races::Race::_base_intelligence"
        }, {
-               "full_name": "test_prog::races::Race::_base_endurance"
+               "full_name": "test_prog::races::Race::_base_strength"
        }, {
                "full_name": "test_prog::Race::base_endurance"
        }, {
                "full_name": "test_prog::Race::base_endurance="
        }, {
-               "full_name": "test_prog::races::Race::_base_intelligence"
-       }, {
                "full_name": "test_prog::Race::base_intelligence"
        }, {
                "full_name": "test_prog::Race::base_intelligence="
+       }, {
+               "full_name": "test_prog::Race::base_strength"
+       }, {
+               "full_name": "test_prog::Race::base_strength="
        }],
        "intro": {
                "full_name": "test_prog$Race"
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
-               "full_name": "test_prog$Race$_base_strength"
-       }, {
-               "full_name": "test_prog$Race$base_strength"
+               "full_name": "test_prog$Race$_base_endurance"
        }, {
-               "full_name": "test_prog$Race$base_strength="
+               "full_name": "test_prog$Race$_base_intelligence"
        }, {
-               "full_name": "test_prog$Race$_base_endurance"
+               "full_name": "test_prog$Race$_base_strength"
        }, {
                "full_name": "test_prog$Race$base_endurance"
        }, {
                "full_name": "test_prog$Race$base_endurance="
        }, {
-               "full_name": "test_prog$Race$_base_intelligence"
-       }, {
                "full_name": "test_prog$Race$base_intelligence"
        }, {
                "full_name": "test_prog$Race$base_intelligence="
+       }, {
+               "full_name": "test_prog$Race$base_strength"
+       }, {
+               "full_name": "test_prog$Race$base_strength="
        }],
        "redef_mpropdefs": [{
                "full_name": "test_prog$Race$Object::init"
                "full_name": "test_prog::Character"
        },
        "mpropdefs": [{
+               "full_name": "test_prog$Character$_age"
+       }, {
+               "full_name": "test_prog$Character$_career"
+       }, {
+               "full_name": "test_prog$Character$_health"
+       }, {
+               "full_name": "test_prog$Character$_name"
+       }, {
                "full_name": "test_prog$Character$_race"
        }, {
-               "full_name": "test_prog$Character$race"
+               "full_name": "test_prog$Character$_sex"
        }, {
-               "full_name": "test_prog$Character$race="
+               "full_name": "test_prog$Character$age"
        }, {
-               "full_name": "test_prog$Character$_career"
+               "full_name": "test_prog$Character$age="
        }, {
                "full_name": "test_prog$Character$career"
        }, {
                "full_name": "test_prog$Character$career="
        }, {
-               "full_name": "test_prog$Character$quit"
+               "full_name": "test_prog$Character$health"
        }, {
-               "full_name": "test_prog$Character$_name"
+               "full_name": "test_prog$Character$health="
+       }, {
+               "full_name": "test_prog$Character$Object::init"
+       }, {
+               "full_name": "test_prog$Character$max_health"
        }, {
                "full_name": "test_prog$Character$name"
        }, {
                "full_name": "test_prog$Character$name="
        }, {
-               "full_name": "test_prog$Character$_age"
-       }, {
-               "full_name": "test_prog$Character$age"
+               "full_name": "test_prog$Character$quit"
        }, {
-               "full_name": "test_prog$Character$age="
+               "full_name": "test_prog$Character$race"
        }, {
-               "full_name": "test_prog$Character$_sex"
+               "full_name": "test_prog$Character$race="
        }, {
                "full_name": "test_prog$Character$sex"
        }, {
                "full_name": "test_prog$Character$sex="
        }, {
-               "full_name": "test_prog$Character$total_strengh"
-       }, {
                "full_name": "test_prog$Character$total_endurance"
        }, {
                "full_name": "test_prog$Character$total_intelligence"
        }, {
-               "full_name": "test_prog$Character$max_health"
+               "full_name": "test_prog$Character$total_strengh"
+       }],
+       "intro_mproperties": [{
+               "full_name": "test_prog::character::Character::_age"
        }, {
-               "full_name": "test_prog$Character$_health"
+               "full_name": "test_prog::character::Character::_career"
        }, {
-               "full_name": "test_prog$Character$health"
+               "full_name": "test_prog::character::Character::_health"
        }, {
-               "full_name": "test_prog$Character$health="
+               "full_name": "test_prog::character::Character::_name"
        }, {
-               "full_name": "test_prog$Character$Object::init"
-       }],
-       "intro_mproperties": [{
                "full_name": "test_prog::character::Character::_race"
        }, {
-               "full_name": "test_prog::Character::race"
+               "full_name": "test_prog::character::Character::_sex"
        }, {
-               "full_name": "test_prog::Character::race="
+               "full_name": "test_prog::Character::age"
        }, {
-               "full_name": "test_prog::character::Character::_career"
+               "full_name": "test_prog::Character::age="
        }, {
                "full_name": "test_prog::Character::career"
        }, {
                "full_name": "test_prog::Character::career="
        }, {
-               "full_name": "test_prog::Character::quit"
+               "full_name": "test_prog::Character::health"
        }, {
-               "full_name": "test_prog::character::Character::_name"
+               "full_name": "test_prog::Character::health="
+       }, {
+               "full_name": "test_prog::Character::max_health"
        }, {
                "full_name": "test_prog::Character::name"
        }, {
                "full_name": "test_prog::Character::name="
        }, {
-               "full_name": "test_prog::character::Character::_age"
-       }, {
-               "full_name": "test_prog::Character::age"
+               "full_name": "test_prog::Character::quit"
        }, {
-               "full_name": "test_prog::Character::age="
+               "full_name": "test_prog::Character::race"
        }, {
-               "full_name": "test_prog::character::Character::_sex"
+               "full_name": "test_prog::Character::race="
        }, {
                "full_name": "test_prog::Character::sex"
        }, {
                "full_name": "test_prog::Character::sex="
        }, {
-               "full_name": "test_prog::Character::total_strengh"
-       }, {
                "full_name": "test_prog::Character::total_endurance"
        }, {
                "full_name": "test_prog::Character::total_intelligence"
        }, {
-               "full_name": "test_prog::Character::max_health"
-       }, {
-               "full_name": "test_prog::character::Character::_health"
-       }, {
-               "full_name": "test_prog::Character::health"
-       }, {
-               "full_name": "test_prog::Character::health="
+               "full_name": "test_prog::Character::total_strengh"
        }],
        "intro": {
                "full_name": "test_prog$Character"
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
+               "full_name": "test_prog$Character$_age"
+       }, {
+               "full_name": "test_prog$Character$_career"
+       }, {
+               "full_name": "test_prog$Character$_health"
+       }, {
+               "full_name": "test_prog$Character$_name"
+       }, {
                "full_name": "test_prog$Character$_race"
        }, {
-               "full_name": "test_prog$Character$race"
+               "full_name": "test_prog$Character$_sex"
        }, {
-               "full_name": "test_prog$Character$race="
+               "full_name": "test_prog$Character$age"
        }, {
-               "full_name": "test_prog$Character$_career"
+               "full_name": "test_prog$Character$age="
        }, {
                "full_name": "test_prog$Character$career"
        }, {
                "full_name": "test_prog$Character$career="
        }, {
-               "full_name": "test_prog$Character$quit"
+               "full_name": "test_prog$Character$health"
        }, {
-               "full_name": "test_prog$Character$_name"
+               "full_name": "test_prog$Character$health="
+       }, {
+               "full_name": "test_prog$Character$max_health"
        }, {
                "full_name": "test_prog$Character$name"
        }, {
                "full_name": "test_prog$Character$name="
        }, {
-               "full_name": "test_prog$Character$_age"
-       }, {
-               "full_name": "test_prog$Character$age"
+               "full_name": "test_prog$Character$quit"
        }, {
-               "full_name": "test_prog$Character$age="
+               "full_name": "test_prog$Character$race"
        }, {
-               "full_name": "test_prog$Character$_sex"
+               "full_name": "test_prog$Character$race="
        }, {
                "full_name": "test_prog$Character$sex"
        }, {
                "full_name": "test_prog$Character$sex="
        }, {
-               "full_name": "test_prog$Character$total_strengh"
-       }, {
                "full_name": "test_prog$Character$total_endurance"
        }, {
                "full_name": "test_prog$Character$total_intelligence"
        }, {
-               "full_name": "test_prog$Character$max_health"
-       }, {
-               "full_name": "test_prog$Character$_health"
-       }, {
-               "full_name": "test_prog$Character$health"
-       }, {
-               "full_name": "test_prog$Character$health="
+               "full_name": "test_prog$Character$total_strengh"
        }],
        "redef_mpropdefs": [{
                "full_name": "test_prog$Character$Object::init"
                "full_name": "test_prog::Combatable"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Combatable$hit_points"
-       }, {
                "full_name": "test_prog$Combatable$attack"
        }, {
+               "full_name": "test_prog$Combatable$defend"
+       }, {
                "full_name": "test_prog$Combatable$direct_attack"
        }, {
-               "full_name": "test_prog$Combatable$defend"
+               "full_name": "test_prog$Combatable$hit_points"
        }, {
                "full_name": "test_prog$Combatable$is_dead"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Combatable::hit_points"
-       }, {
                "full_name": "test_prog::Combatable::attack"
        }, {
+               "full_name": "test_prog::Combatable::defend"
+       }, {
                "full_name": "test_prog::Combatable::direct_attack"
        }, {
-               "full_name": "test_prog::Combatable::defend"
+               "full_name": "test_prog::Combatable::hit_points"
        }, {
                "full_name": "test_prog::Combatable::is_dead"
        }],
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
-               "full_name": "test_prog$Combatable$hit_points"
-       }, {
                "full_name": "test_prog$Combatable$attack"
        }, {
+               "full_name": "test_prog$Combatable$defend"
+       }, {
                "full_name": "test_prog$Combatable$direct_attack"
        }, {
-               "full_name": "test_prog$Combatable$defend"
+               "full_name": "test_prog$Combatable$hit_points"
        }, {
                "full_name": "test_prog$Combatable$is_dead"
        }],
                "full_name": "test_prog::Game"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Game$player_characters"
-       }, {
                "full_name": "test_prog$Game$computer_characters"
        }, {
-               "full_name": "test_prog$Game$start_game"
-       }, {
                "full_name": "test_prog$Game$pause_game"
        }, {
+               "full_name": "test_prog$Game$player_characters"
+       }, {
+               "full_name": "test_prog$Game$start_game"
+       }, {
                "full_name": "test_prog$Game$stop_game"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Game::player_characters"
-       }, {
                "full_name": "test_prog::Game::computer_characters"
        }, {
-               "full_name": "test_prog::Game::start_game"
-       }, {
                "full_name": "test_prog::Game::pause_game"
        }, {
+               "full_name": "test_prog::Game::player_characters"
+       }, {
+               "full_name": "test_prog::Game::start_game"
+       }, {
                "full_name": "test_prog::Game::stop_game"
        }],
        "intro": {
                "full_name": "test_prog"
        },
        "intro_mpropdefs": [{
-               "full_name": "test_prog$Game$player_characters"
-       }, {
                "full_name": "test_prog$Game$computer_characters"
        }, {
-               "full_name": "test_prog$Game$start_game"
-       }, {
                "full_name": "test_prog$Game$pause_game"
        }, {
+               "full_name": "test_prog$Game$player_characters"
+       }, {
+               "full_name": "test_prog$Game$start_game"
+       }, {
                "full_name": "test_prog$Game$stop_game"
        }],
        "redef_mpropdefs": []
index 2fc7104..d5eb364 100644 (file)
                "full_name": "test_prog$Object"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
        }],
                "full_name": "test_prog$Int"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Int::unary -"
+               "full_name": "test_prog::Object::!="
+       }, {
+               "full_name": "test_prog::Int::*"
        }, {
                "full_name": "test_prog::Int::+"
        }, {
                "full_name": "test_prog::Int::-"
        }, {
-               "full_name": "test_prog::Int::*"
-       }, {
                "full_name": "test_prog::Int::/"
        }, {
-               "full_name": "test_prog::Int::>"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Int::to_f"
+               "full_name": "test_prog::Int::>"
        }, {
                "full_name": "test_prog::Object::OTHER"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Object::init"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Int::to_f"
        }, {
-               "full_name": "test_prog::Object::init"
+               "full_name": "test_prog::Int::unary -"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Int::unary -"
+               "full_name": "test_prog::Int::*"
        }, {
                "full_name": "test_prog::Int::+"
        }, {
                "full_name": "test_prog::Int::-"
        }, {
-               "full_name": "test_prog::Int::*"
-       }, {
                "full_name": "test_prog::Int::/"
        }, {
                "full_name": "test_prog::Int::>"
        }, {
                "full_name": "test_prog::Int::to_f"
+       }, {
+               "full_name": "test_prog::Int::unary -"
        }],
        "redef_mproperties": [],
        "parents": [{
                "full_name": "test_prog$Float"
        }],
        "all_mproperties": [{
+               "full_name": "test_prog::Object::!="
+       }, {
+               "full_name": "test_prog::Float::*"
+       }, {
                "full_name": "test_prog::Float::+"
        }, {
                "full_name": "test_prog::Float::-"
        }, {
-               "full_name": "test_prog::Float::*"
-       }, {
                "full_name": "test_prog::Float::/"
        }, {
+               "full_name": "test_prog::Object::=="
+       }, {
                "full_name": "test_prog::Float::>"
        }, {
                "full_name": "test_prog::Object::OTHER"
        }, {
-               "full_name": "test_prog::Object::=="
-       }, {
-               "full_name": "test_prog::Object::!="
-       }, {
                "full_name": "test_prog::Object::init"
        }],
        "intro_mproperties": [{
+               "full_name": "test_prog::Float::*"
+       }, {
                "full_name": "test_prog::Float::+"
        }, {
                "full_name": "test_prog::Float::-"
        }, {
-               "full_name": "test_prog::Float::*"
-       }, {
                "full_name": "test_prog::Float::/"
        }, {
                "full_name": "test_prog::Float::>"
                "full_name": "test_prog$Bool"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
        }],
                "full_name": "test_prog$String"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
        }],
                "full_name": "test_prog$List"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
        }],
                "full_name": "test_prog$Career"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::careers::Career::_strength_bonus"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Career::strength_bonus"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Career::strength_bonus="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::careers::Career::_endurance_bonus"
        }, {
+               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+       }, {
+               "full_name": "test_prog::careers::Career::_strength_bonus"
+       }, {
                "full_name": "test_prog::Career::endurance_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus="
        }, {
-               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+               "full_name": "test_prog::Object::init"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus="
        }, {
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::Object::OTHER"
-       }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Career::strength_bonus"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Career::strength_bonus="
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::careers::Career::_strength_bonus"
-       }, {
-               "full_name": "test_prog::Career::strength_bonus"
+               "full_name": "test_prog::careers::Career::_endurance_bonus"
        }, {
-               "full_name": "test_prog::Career::strength_bonus="
+               "full_name": "test_prog::careers::Career::_intelligence_bonus"
        }, {
-               "full_name": "test_prog::careers::Career::_endurance_bonus"
+               "full_name": "test_prog::careers::Career::_strength_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus="
        }, {
-               "full_name": "test_prog::careers::Career::_intelligence_bonus"
-       }, {
                "full_name": "test_prog::Career::intelligence_bonus"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus="
+       }, {
+               "full_name": "test_prog::Career::strength_bonus"
+       }, {
+               "full_name": "test_prog::Career::strength_bonus="
        }],
        "redef_mproperties": [{
                "full_name": "test_prog::Object::init"
                "full_name": "test_prog$Warrior"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::careers::Career::_strength_bonus"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Career::strength_bonus"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Career::strength_bonus="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::careers::Career::_endurance_bonus"
        }, {
+               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+       }, {
+               "full_name": "test_prog::careers::Career::_strength_bonus"
+       }, {
                "full_name": "test_prog::Career::endurance_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus="
        }, {
-               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+               "full_name": "test_prog::Object::init"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus="
        }, {
-               "full_name": "test_prog::Object::OTHER"
-       }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Career::strength_bonus"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Career::strength_bonus="
        }],
        "intro_mproperties": [],
        "redef_mproperties": [{
                "full_name": "test_prog$Magician"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::careers::Career::_strength_bonus"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Career::strength_bonus"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Career::strength_bonus="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::careers::Career::_endurance_bonus"
        }, {
+               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+       }, {
+               "full_name": "test_prog::careers::Career::_strength_bonus"
+       }, {
                "full_name": "test_prog::Career::endurance_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus="
        }, {
-               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+               "full_name": "test_prog::Object::init"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus="
        }, {
-               "full_name": "test_prog::Object::OTHER"
-       }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Career::strength_bonus"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Career::strength_bonus="
        }],
        "intro_mproperties": [],
        "redef_mproperties": [{
                "full_name": "test_prog$Alcoholic"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::careers::Career::_strength_bonus"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Career::strength_bonus"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Career::strength_bonus="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::careers::Career::_endurance_bonus"
        }, {
+               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+       }, {
+               "full_name": "test_prog::careers::Career::_strength_bonus"
+       }, {
                "full_name": "test_prog::Career::endurance_bonus"
        }, {
                "full_name": "test_prog::Career::endurance_bonus="
        }, {
-               "full_name": "test_prog::careers::Career::_intelligence_bonus"
+               "full_name": "test_prog::Object::init"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus"
        }, {
                "full_name": "test_prog::Career::intelligence_bonus="
        }, {
-               "full_name": "test_prog::Object::OTHER"
-       }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Career::strength_bonus"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Career::strength_bonus="
        }],
        "intro_mproperties": [],
        "redef_mproperties": [{
                "full_name": "test_prog$Race"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::races::Race::_base_strength"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Race::base_strength"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Race::base_strength="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::races::Race::_base_endurance"
        }, {
+               "full_name": "test_prog::races::Race::_base_intelligence"
+       }, {
+               "full_name": "test_prog::races::Race::_base_strength"
+       }, {
                "full_name": "test_prog::Race::base_endurance"
        }, {
                "full_name": "test_prog::Race::base_endurance="
        }, {
-               "full_name": "test_prog::races::Race::_base_intelligence"
-       }, {
                "full_name": "test_prog::Race::base_intelligence"
        }, {
                "full_name": "test_prog::Race::base_intelligence="
        }, {
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Race::base_strength"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Race::base_strength="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::init"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::races::Race::_base_strength"
-       }, {
-               "full_name": "test_prog::Race::base_strength"
+               "full_name": "test_prog::races::Race::_base_endurance"
        }, {
-               "full_name": "test_prog::Race::base_strength="
+               "full_name": "test_prog::races::Race::_base_intelligence"
        }, {
-               "full_name": "test_prog::races::Race::_base_endurance"
+               "full_name": "test_prog::races::Race::_base_strength"
        }, {
                "full_name": "test_prog::Race::base_endurance"
        }, {
                "full_name": "test_prog::Race::base_endurance="
        }, {
-               "full_name": "test_prog::races::Race::_base_intelligence"
-       }, {
                "full_name": "test_prog::Race::base_intelligence"
        }, {
                "full_name": "test_prog::Race::base_intelligence="
+       }, {
+               "full_name": "test_prog::Race::base_strength"
+       }, {
+               "full_name": "test_prog::Race::base_strength="
        }],
        "redef_mproperties": [{
                "full_name": "test_prog::Object::init"
                "full_name": "test_prog$Human"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::races::Race::_base_strength"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Race::base_strength"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Race::base_strength="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::races::Race::_base_endurance"
        }, {
+               "full_name": "test_prog::races::Race::_base_intelligence"
+       }, {
+               "full_name": "test_prog::races::Race::_base_strength"
+       }, {
                "full_name": "test_prog::Race::base_endurance"
        }, {
                "full_name": "test_prog::Race::base_endurance="
        }, {
-               "full_name": "test_prog::races::Race::_base_intelligence"
-       }, {
                "full_name": "test_prog::Race::base_intelligence"
        }, {
                "full_name": "test_prog::Race::base_intelligence="
        }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Race::base_strength"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Race::base_strength="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::init"
        }],
        "intro_mproperties": [],
        "redef_mproperties": [{
                "full_name": "test_prog::combat$Dwarf"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::init"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Weapon::dps"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::races::Race::_base_strength"
+               "full_name": "test_prog::Object::OTHER"
        }, {
-               "full_name": "test_prog::Race::base_strength"
+               "full_name": "test_prog::races::Race::_base_endurance"
        }, {
-               "full_name": "test_prog::Race::base_strength="
+               "full_name": "test_prog::races::Race::_base_intelligence"
        }, {
-               "full_name": "test_prog::races::Race::_base_endurance"
+               "full_name": "test_prog::races::Race::_base_strength"
        }, {
                "full_name": "test_prog::Race::base_endurance"
        }, {
                "full_name": "test_prog::Race::base_endurance="
        }, {
-               "full_name": "test_prog::races::Race::_base_intelligence"
-       }, {
                "full_name": "test_prog::Race::base_intelligence"
        }, {
                "full_name": "test_prog::Race::base_intelligence="
        }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Race::base_strength"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Race::base_strength="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Weapon::dps"
+       }, {
+               "full_name": "test_prog::Object::init"
        }],
        "intro_mproperties": [],
        "redef_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
                "full_name": "test_prog::Weapon::dps"
+       }, {
+               "full_name": "test_prog::Object::init"
        }],
        "parents": [{
                "full_name": "test_prog::Race"
                "full_name": "test_prog$Elf"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
-               "full_name": "test_prog::races::Race::_base_strength"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Race::base_strength"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Race::base_strength="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::races::Race::_base_endurance"
        }, {
+               "full_name": "test_prog::races::Race::_base_intelligence"
+       }, {
+               "full_name": "test_prog::races::Race::_base_strength"
+       }, {
                "full_name": "test_prog::Race::base_endurance"
        }, {
                "full_name": "test_prog::Race::base_endurance="
        }, {
-               "full_name": "test_prog::races::Race::_base_intelligence"
-       }, {
                "full_name": "test_prog::Race::base_intelligence"
        }, {
                "full_name": "test_prog::Race::base_intelligence="
        }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Race::base_strength"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Race::base_strength="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::init"
        }],
        "intro_mproperties": [],
        "redef_mproperties": [{
                "full_name": "test_prog::combat$Character"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::character::Character::_race"
-       }, {
-               "full_name": "test_prog::Character::race"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Character::race="
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::character::Character::_career"
+               "full_name": "test_prog::Object::OTHER"
        }, {
-               "full_name": "test_prog::Character::career"
+               "full_name": "test_prog::character::Character::_age"
        }, {
-               "full_name": "test_prog::Character::career="
+               "full_name": "test_prog::character::Character::_career"
        }, {
-               "full_name": "test_prog::Character::quit"
+               "full_name": "test_prog::character::Character::_health"
        }, {
                "full_name": "test_prog::character::Character::_name"
        }, {
-               "full_name": "test_prog::Character::name"
-       }, {
-               "full_name": "test_prog::Character::name="
+               "full_name": "test_prog::character::Character::_race"
        }, {
-               "full_name": "test_prog::character::Character::_age"
+               "full_name": "test_prog::character::Character::_sex"
        }, {
                "full_name": "test_prog::Character::age"
        }, {
                "full_name": "test_prog::Character::age="
        }, {
-               "full_name": "test_prog::character::Character::_sex"
-       }, {
-               "full_name": "test_prog::Character::sex"
-       }, {
-               "full_name": "test_prog::Character::sex="
-       }, {
-               "full_name": "test_prog::Character::total_strengh"
+               "full_name": "test_prog::Combatable::attack"
        }, {
-               "full_name": "test_prog::Character::total_endurance"
+               "full_name": "test_prog::Character::career"
        }, {
-               "full_name": "test_prog::Character::total_intelligence"
+               "full_name": "test_prog::Character::career="
        }, {
-               "full_name": "test_prog::Character::max_health"
+               "full_name": "test_prog::Combatable::defend"
        }, {
-               "full_name": "test_prog::character::Character::_health"
+               "full_name": "test_prog::Combatable::direct_attack"
        }, {
                "full_name": "test_prog::Character::health"
        }, {
                "full_name": "test_prog::Character::health="
        }, {
+               "full_name": "test_prog::Combatable::hit_points"
+       }, {
                "full_name": "test_prog::Object::init"
        }, {
-               "full_name": "test_prog::Combatable::hit_points"
+               "full_name": "test_prog::Combatable::is_dead"
        }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Character::max_health"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Character::name"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Character::name="
        }, {
-               "full_name": "test_prog::Combatable::attack"
+               "full_name": "test_prog::Character::quit"
        }, {
-               "full_name": "test_prog::Combatable::direct_attack"
+               "full_name": "test_prog::Character::race"
        }, {
-               "full_name": "test_prog::Combatable::defend"
+               "full_name": "test_prog::Character::race="
        }, {
-               "full_name": "test_prog::Combatable::is_dead"
+               "full_name": "test_prog::Character::sex"
+       }, {
+               "full_name": "test_prog::Character::sex="
+       }, {
+               "full_name": "test_prog::Character::total_endurance"
+       }, {
+               "full_name": "test_prog::Character::total_intelligence"
+       }, {
+               "full_name": "test_prog::Character::total_strengh"
        }],
        "intro_mproperties": [{
+               "full_name": "test_prog::character::Character::_age"
+       }, {
+               "full_name": "test_prog::character::Character::_career"
+       }, {
+               "full_name": "test_prog::character::Character::_health"
+       }, {
+               "full_name": "test_prog::character::Character::_name"
+       }, {
                "full_name": "test_prog::character::Character::_race"
        }, {
-               "full_name": "test_prog::Character::race"
+               "full_name": "test_prog::character::Character::_sex"
        }, {
-               "full_name": "test_prog::Character::race="
+               "full_name": "test_prog::Character::age"
        }, {
-               "full_name": "test_prog::character::Character::_career"
+               "full_name": "test_prog::Character::age="
        }, {
                "full_name": "test_prog::Character::career"
        }, {
                "full_name": "test_prog::Character::career="
        }, {
-               "full_name": "test_prog::Character::quit"
+               "full_name": "test_prog::Character::health"
        }, {
-               "full_name": "test_prog::character::Character::_name"
+               "full_name": "test_prog::Character::health="
+       }, {
+               "full_name": "test_prog::Character::max_health"
        }, {
                "full_name": "test_prog::Character::name"
        }, {
                "full_name": "test_prog::Character::name="
        }, {
-               "full_name": "test_prog::character::Character::_age"
-       }, {
-               "full_name": "test_prog::Character::age"
+               "full_name": "test_prog::Character::quit"
        }, {
-               "full_name": "test_prog::Character::age="
+               "full_name": "test_prog::Character::race"
        }, {
-               "full_name": "test_prog::character::Character::_sex"
+               "full_name": "test_prog::Character::race="
        }, {
                "full_name": "test_prog::Character::sex"
        }, {
                "full_name": "test_prog::Character::sex="
        }, {
-               "full_name": "test_prog::Character::total_strengh"
-       }, {
                "full_name": "test_prog::Character::total_endurance"
        }, {
                "full_name": "test_prog::Character::total_intelligence"
        }, {
-               "full_name": "test_prog::Character::max_health"
-       }, {
-               "full_name": "test_prog::character::Character::_health"
-       }, {
-               "full_name": "test_prog::Character::health"
-       }, {
-               "full_name": "test_prog::Character::health="
+               "full_name": "test_prog::Character::total_strengh"
        }],
        "redef_mproperties": [{
-               "full_name": "test_prog::Object::init"
-       }, {
                "full_name": "test_prog::Combatable::hit_points"
+       }, {
+               "full_name": "test_prog::Object::init"
        }],
        "parents": [{
-               "full_name": "test_prog::Object"
-       }, {
                "full_name": "test_prog::Combatable"
+       }, {
+               "full_name": "test_prog::Object"
        }]
 }
 {
                "full_name": "test_prog$Weapon"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Weapon::dps"
-       }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
+       }, {
+               "full_name": "test_prog::Weapon::dps"
        }, {
                "full_name": "test_prog::Object::init"
        }],
                "full_name": "test_prog$Combatable"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Combatable::hit_points"
-       }, {
-               "full_name": "test_prog::Combatable::attack"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Combatable::direct_attack"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Combatable::defend"
+               "full_name": "test_prog::Object::OTHER"
        }, {
-               "full_name": "test_prog::Combatable::is_dead"
+               "full_name": "test_prog::Combatable::attack"
        }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Combatable::defend"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Combatable::direct_attack"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Combatable::hit_points"
        }, {
                "full_name": "test_prog::Object::init"
+       }, {
+               "full_name": "test_prog::Combatable::is_dead"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Combatable::hit_points"
-       }, {
                "full_name": "test_prog::Combatable::attack"
        }, {
+               "full_name": "test_prog::Combatable::defend"
+       }, {
                "full_name": "test_prog::Combatable::direct_attack"
        }, {
-               "full_name": "test_prog::Combatable::defend"
+               "full_name": "test_prog::Combatable::hit_points"
        }, {
                "full_name": "test_prog::Combatable::is_dead"
        }],
                "full_name": "test_prog$Game"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Game::player_characters"
+               "full_name": "test_prog::Object::!="
        }, {
-               "full_name": "test_prog::Game::computer_characters"
+               "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Game::start_game"
+               "full_name": "test_prog::Object::OTHER"
        }, {
-               "full_name": "test_prog::Game::pause_game"
+               "full_name": "test_prog::Game::computer_characters"
        }, {
-               "full_name": "test_prog::Game::stop_game"
+               "full_name": "test_prog::Object::init"
        }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Game::pause_game"
        }, {
-               "full_name": "test_prog::Object::=="
+               "full_name": "test_prog::Game::player_characters"
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Game::start_game"
        }, {
-               "full_name": "test_prog::Object::init"
+               "full_name": "test_prog::Game::stop_game"
        }],
        "intro_mproperties": [{
-               "full_name": "test_prog::Game::player_characters"
-       }, {
                "full_name": "test_prog::Game::computer_characters"
        }, {
-               "full_name": "test_prog::Game::start_game"
-       }, {
                "full_name": "test_prog::Game::pause_game"
        }, {
+               "full_name": "test_prog::Game::player_characters"
+       }, {
+               "full_name": "test_prog::Game::start_game"
+       }, {
                "full_name": "test_prog::Game::stop_game"
        }],
        "redef_mproperties": [],
                "full_name": "test_prog$Starter"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Starter::start"
-       }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
+       }, {
+               "full_name": "test_prog::Starter::start"
        }],
        "intro_mproperties": [{
                "full_name": "test_prog::Starter::start"
                "full_name": "test_prog$Sys"
        }],
        "all_mproperties": [{
-               "full_name": "test_prog::Sys::main"
-       }, {
-               "full_name": "test_prog::Object::OTHER"
+               "full_name": "test_prog::Object::!="
        }, {
                "full_name": "test_prog::Object::=="
        }, {
-               "full_name": "test_prog::Object::!="
+               "full_name": "test_prog::Object::OTHER"
        }, {
                "full_name": "test_prog::Object::init"
+       }, {
+               "full_name": "test_prog::Sys::main"
        }],
        "intro_mproperties": [{
                "full_name": "test_prog::Sys::main"
index 92690d1..e0c653a 100644 (file)
                "full_name": "test_prog>platform>"
        },
        "intro_mclasses": [{
-               "full_name": "test_prog::Object"
+               "full_name": "test_prog::Bool"
+       }, {
+               "full_name": "test_prog::Float"
        }, {
                "full_name": "test_prog::Int"
        }, {
-               "full_name": "test_prog::Float"
+               "full_name": "test_prog::List"
        }, {
-               "full_name": "test_prog::Bool"
+               "full_name": "test_prog::Object"
        }, {
                "full_name": "test_prog::String"
-       }, {
-               "full_name": "test_prog::List"
        }],
        "mclassdefs": [{
-               "full_name": "test_prog$Object"
+               "full_name": "test_prog$Bool"
+       }, {
+               "full_name": "test_prog$Float"
        }, {
                "full_name": "test_prog$Int"
        }, {
-               "full_name": "test_prog$Float"
+               "full_name": "test_prog$List"
        }, {
-               "full_name": "test_prog$Bool"
+               "full_name": "test_prog$Object"
        }, {
                "full_name": "test_prog$String"
-       }, {
-               "full_name": "test_prog$List"
        }],
        "intro_mclassdefs": [{
-               "full_name": "test_prog$Object"
+               "full_name": "test_prog$Bool"
+       }, {
+               "full_name": "test_prog$Float"
        }, {
                "full_name": "test_prog$Int"
        }, {
-               "full_name": "test_prog$Float"
+               "full_name": "test_prog$List"
        }, {
-               "full_name": "test_prog$Bool"
+               "full_name": "test_prog$Object"
        }, {
                "full_name": "test_prog$String"
-       }, {
-               "full_name": "test_prog$List"
        }],
        "redef_mclassdefs": [],
        "imports": []
                "full_name": "test_prog>rpg>"
        },
        "intro_mclasses": [{
-               "full_name": "test_prog::Career"
+               "full_name": "test_prog::Alcoholic"
        }, {
-               "full_name": "test_prog::Warrior"
+               "full_name": "test_prog::Career"
        }, {
                "full_name": "test_prog::Magician"
        }, {
-               "full_name": "test_prog::Alcoholic"
+               "full_name": "test_prog::Warrior"
        }],
        "mclassdefs": [{
-               "full_name": "test_prog$Career"
+               "full_name": "test_prog$Alcoholic"
        }, {
-               "full_name": "test_prog$Warrior"
+               "full_name": "test_prog$Career"
        }, {
                "full_name": "test_prog$Magician"
        }, {
-               "full_name": "test_prog$Alcoholic"
+               "full_name": "test_prog$Warrior"
        }],
        "intro_mclassdefs": [{
-               "full_name": "test_prog$Career"
+               "full_name": "test_prog$Alcoholic"
        }, {
-               "full_name": "test_prog$Warrior"
+               "full_name": "test_prog$Career"
        }, {
                "full_name": "test_prog$Magician"
        }, {
-               "full_name": "test_prog$Alcoholic"
+               "full_name": "test_prog$Warrior"
        }],
        "redef_mclassdefs": [],
        "imports": [{
                "full_name": "test_prog>rpg>"
        },
        "intro_mclasses": [{
-               "full_name": "test_prog::Weapon"
-       }, {
                "full_name": "test_prog::Combatable"
+       }, {
+               "full_name": "test_prog::Weapon"
        }],
        "mclassdefs": [{
-               "full_name": "test_prog$Weapon"
+               "full_name": "test_prog::combat$Character"
        }, {
                "full_name": "test_prog$Combatable"
        }, {
-               "full_name": "test_prog::combat$Character"
-       }, {
                "full_name": "test_prog::combat$Dwarf"
+       }, {
+               "full_name": "test_prog$Weapon"
        }],
        "intro_mclassdefs": [{
-               "full_name": "test_prog$Weapon"
-       }, {
                "full_name": "test_prog$Combatable"
+       }, {
+               "full_name": "test_prog$Weapon"
        }],
        "redef_mclassdefs": [{
                "full_name": "test_prog::combat$Character"
                "full_name": "test_prog>rpg>"
        },
        "intro_mclasses": [{
-               "full_name": "test_prog::Race"
-       }, {
-               "full_name": "test_prog::Human"
-       }, {
                "full_name": "test_prog::Dwarf"
        }, {
                "full_name": "test_prog::Elf"
-       }],
-       "mclassdefs": [{
-               "full_name": "test_prog$Race"
        }, {
-               "full_name": "test_prog$Human"
+               "full_name": "test_prog::Human"
        }, {
+               "full_name": "test_prog::Race"
+       }],
+       "mclassdefs": [{
                "full_name": "test_prog$Dwarf"
        }, {
                "full_name": "test_prog$Elf"
-       }],
-       "intro_mclassdefs": [{
-               "full_name": "test_prog$Race"
        }, {
                "full_name": "test_prog$Human"
        }, {
+               "full_name": "test_prog$Race"
+       }],
+       "intro_mclassdefs": [{
                "full_name": "test_prog$Dwarf"
        }, {
                "full_name": "test_prog$Elf"
+       }, {
+               "full_name": "test_prog$Human"
+       }, {
+               "full_name": "test_prog$Race"
        }],
        "redef_mclassdefs": [],
        "imports": [{
index 81a0cae..ef7ced3 100644 (file)
                "full_name": "test_prog>"
        },
        "mgroups": [{
-               "full_name": "test_prog>"
-       }, {
                "full_name": "test_prog>game>"
        }, {
                "full_name": "test_prog>platform>"
        }, {
                "full_name": "test_prog>rpg>"
+       }, {
+               "full_name": "test_prog>"
        }],
        "ini": {
                "upstream.issues": "https://github.com/nitlang/nit/issues",
index d61dd81..f3c8146 100644 (file)
                "full_name": "test_prog$Object"
        },
        "mpropdefs": [{
-               "full_name": "test_prog$Object$init"
+               "full_name": "test_prog$Elf$Object::init"
        }, {
                "full_name": "test_prog$Career$Object::init"
        }, {
        }, {
                "full_name": "test_prog$Dwarf$Object::init"
        }, {
-               "full_name": "test_prog$Elf$Object::init"
-       }, {
                "full_name": "test_prog$Character$Object::init"
+       }, {
+               "full_name": "test_prog$Object$init"
        }],
        "intro_mclass": {
                "full_name": "test_prog::Object"
index dbf93ab..31077c4 100644 (file)
@@ -69,6 +69,16 @@ class APIList
                return mentities
        end
 
+       # Sort mentities by lexicographic order
+       #
+       # TODO choose order from request
+       fun sort_mentities(req: HttpRequest, mentities: Array[MEntity]) : Array[MEntity] do
+               var sorted = mentities.to_a
+               var sorter = new MEntityNameSorter
+               sorter.sort(sorted)
+               return sorted
+       end
+
        # Limit mentities depending on the `n` parameter.
        fun limit_mentities(req: HttpRequest, mentities: Array[MEntity]): Array[MEntity] do
                var n = req.int_arg("n")
@@ -80,6 +90,7 @@ class APIList
 
        redef fun get(req, res) do
                var mentities = list_mentities(req)
+               mentities = sort_mentities(req, mentities)
                mentities = limit_mentities(req, mentities)
                res.json new JsonArray.from(mentities)
        end
@@ -173,25 +184,27 @@ end
 #
 # Example: `GET /defs/core::Array`
 class APIEntityDefs
-       super APIHandler
+       super APIList
 
        redef fun get(req, res) do
                var mentity = mentity_from_uri(req, res)
                if mentity == null then return
-               var arr = new JsonArray
+               var mentities: Array[MEntity]
                if mentity isa MModule then
-                       for mclassdef in mentity.mclassdefs do arr.add mclassdef
+                       mentities = mentity.mclassdefs
                else if mentity isa MClass then
-                       for mclassdef in mentity.mclassdefs do arr.add mclassdef
+                       mentities = mentity.mclassdefs
                else if mentity isa MClassDef then
-                       for mpropdef in mentity.mpropdefs do arr.add mpropdef
+                       mentities = mentity.mpropdefs
                else if mentity isa MProperty then
-                       for mpropdef in mentity.mpropdefs do arr.add mpropdef
+                       mentities = mentity.mpropdefs
                else
                        res.api_error(404, "No definition list for mentity `{mentity.full_name}`")
                        return
                end
-               res.json arr
+               mentities = sort_mentities(req, mentities)
+               mentities = limit_mentities(req, mentities)
+               res.json new JsonArray.from(mentities)
        end
 end