# 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
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(sort_entities(intro_mclasses)))
super
v.serialize_attribute("mparameters", mparameters)
if v isa FullJsonSerializer then
- var view = private_view
+ var view = new ModelView(model, v.mainmodule)
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("is_intro", is_intro)
v.serialize_attribute("mparameters", mclass.mparameters)
if v isa FullJsonSerializer then
- var view = private_view
+ var view = new ModelView(model, v.mainmodule)
v.serialize_attribute("mmodule", to_mentity_ref(mmodule))
v.serialize_attribute("mclass", to_mentity_ref(mclass))
v.serialize_attribute("mpropdefs", to_mentity_refs(sort_entities(mpropdefs)))
# 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
var suite_path: String = "NIT_TESTING_PATH".environ
var lib_path: String = "{suite_path.dirname}/../../tests/test_prog"
+ var mainmodule: MModule is noinit
+
private var model: Model do
var toolcontext = new ToolContext
var model = new Model
if mmodules.is_empty then return model
mbuilder.run_phases
toolcontext.run_global_phases(mmodules)
+ mainmodule = mmodules.first
return model
end
mentities.add model.mmodules.first
mentities.add model.mclasses.first
for mentity in mentities do
- print ((new MEntityRef(mentity)).to_pretty_full_json)
+ print ((new MEntityRef(mentity)).to_pretty_full_json(mainmodule))
end
end
fun test_packages_to_full_json is test do
for mentity in model.mpackages do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
fun test_groups_to_full_json is test do
for mpackage in model.mpackages do
for mentity in mpackage.mgroups do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
end
fun test_modules_to_full_json is test do
for mentity in model.mmodules do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
fun test_classes_to_full_json is test do
for mentity in model.mclasses do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
fun test_classdefs_to_full_json is test do
for mclass in model.mclasses do
for mentity in mclass.mclassdefs do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
end
fun test_props_to_full_json is test do
for mentity in model.mproperties do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
fun test_propdefs_to_full_json is test do
for mprop in model.mproperties do
for mentity in mprop.mpropdefs do
- print mentity.to_pretty_full_json
+ print mentity.to_pretty_full_json(mainmodule)
end
end
end