# See the License for the specific language governing permissions and
# limitations under the License.
-# Make model entities Jsonable.
+# Make model entities Serializable.
#
# To avoid cycles, every reference from a MEntity to another is replaced by a
# MEntityRef.
end
redef class MEntity
- super Jsonable
serialize
redef fun core_serialize_to(v) do
# Serialize the full version of `self` to JSON
#
# See: `FullJsonSerializer`
- fun serialize_to_full_json(plain, pretty: nullable Bool): String do
+ fun serialize_to_full_json(mainmodule: MModule, plain, pretty: nullable Bool): String do
var stream = new StringWriter
- var serializer = new FullJsonSerializer(stream)
+ var serializer = new FullJsonSerializer(stream, mainmodule)
serializer.plain_json = plain or else false
serializer.pretty_json = pretty or else false
serializer.serialize self
# By default, every reference to another MEntity is replaced by a pointer
# to the MEntity::json_id.
# Use this method to obtain a full object with mentities instead of pointers.
- fun to_full_json: String do return serialize_to_full_json(plain=true)
+ fun to_full_json(mainmodule: MModule): String do
+ return serialize_to_full_json(mainmodule, plain=true)
+ end
# 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)
+ fun to_pretty_full_json(mainmodule: MModule): String do
+ return serialize_to_full_json(mainmodule, plain=true, pretty=true)
+ end
+
+ # 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
- super Jsonable
serialize
redef fun core_serialize_to(v) do
end
end
-redef class Location
- super Jsonable
+redef class nitc::Location
serialize
redef fun core_serialize_to(v) do
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
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
redef fun core_serialize_to(v) do
super
if v isa FullJsonSerializer then
- var view = private_view
+ var view = new ModelView(model, v.mainmodule)
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
super
v.serialize_attribute("mparameters", mparameters)
if v isa FullJsonSerializer then
- var view = private_view
+ var filter = new ModelFilter(private_visibility)
+ var view = new ModelView(model, v.mainmodule, filter)
v.serialize_attribute("intro", to_mentity_ref(intro))
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
v.serialize_attribute("is_intro", is_intro)
v.serialize_attribute("mparameters", mclass.mparameters)
if v isa FullJsonSerializer then
- var view = private_view
+ var filter = new ModelFilter(private_visibility)
+ var view = new ModelView(model, v.mainmodule, filter)
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
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
# See MEntity::to_full_json.
class FullJsonSerializer
super JsonSerializer
+
+ # FIXME tmp use of the mainmodule, a PR is comming to clean all the JSON mess
+ var mainmodule: MModule
end