diff --git a/src/model/model_json.nit b/src/model/model_json.nit index 1d8483cd7a..ddd70232fb 100644 --- a/src/model/model_json.nit +++ b/src/model/model_json.nit @@ -26,7 +26,7 @@ module model_json import model::model_collect import json::static -import json +import json::serialization_write import loader # A reference to another mentity. @@ -36,296 +36,251 @@ class MEntityRef # MEntity to link to. var mentity: MEntity - # Return `self` as a Json Object. - # - # By default, MEntity references contain only the `full_name` of the Mentity. - # You should redefine this method in your client to implement a different behavior. - redef fun json do - var obj = new JsonObject - obj["full_name"] = mentity.full_name - return obj + redef fun core_serialize_to(v) do + v.serialize_attribute("full_name", mentity.full_name) end end redef class MEntity super Jsonable + serialize + + redef fun core_serialize_to(v) do + v.serialize_attribute("name", name) + v.serialize_attribute("class_name", class_name) + v.serialize_attribute("full_name", full_name) + v.serialize_attribute("mdoc", mdoc_or_fallback) + v.serialize_attribute("visibility", visibility.to_s) + v.serialize_attribute("modifiers", collect_modifiers) + v.serialize_attribute("location", location) + end - # Return `self` as a JsonObject. + # Serialize the full version of `self` to JSON # - # By default, every reference to another MEntity is skipped. - # Use full_json for a full representation. - fun json: JsonObject do - var obj = new JsonObject - obj["name"] = name - obj["class_name"] = class_name - obj["full_name"] = full_name - obj["mdoc"] = mdoc_or_fallback - obj["visibility"] = visibility - var modifiers = new JsonArray - for modifier in collect_modifiers do - modifiers.add modifier - end - obj["modifiers"] = modifiers - return obj + # See: `FullJsonSerializer` + fun serialize_to_full_json(plain, pretty: nullable Bool): String do + var stream = new StringWriter + var serializer = new FullJsonSerializer(stream) + serializer.plain_json = plain or else false + serializer.pretty_json = pretty or else false + serializer.serialize self + stream.close + return stream.to_s end - redef fun serialize_to(v) do json.serialize_to(v) - - # Return `self` as a JsonObject with references. + # Return the full json representation of `self` with references. # # By default, every reference to another MEntity is replaced by a pointer # to the MEntity::json_id. - fun full_json: JsonObject do - var obj = json - obj["location"] = location - return obj - end + # 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) - # Return `full_json` as a json string. - fun to_full_json: String do return full_json.to_json + # 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) end redef class MDoc super Jsonable + serialize - # Return `self` as a JsonObject. - fun json: JsonObject do - var obj = new JsonObject - obj["content"] = content.join("\n") - obj["location"] = location - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("content", content.join("\n")) + v.serialize_attribute("location", location) end - - redef fun serialize_to(v) do json.serialize_to(v) end redef class Location super Jsonable + serialize - # Return `self` as a JsonObject. - fun json: JsonObject do - var obj = new JsonObject - obj["column_end"] = column_end - obj["column_start"] = column_start - obj["line_end"] = line_end - obj["line_start"] = line_start + redef fun core_serialize_to(v) do + v.serialize_attribute("column_end", column_end) + v.serialize_attribute("column_start", column_start) + v.serialize_attribute("line_end", line_end) + v.serialize_attribute("line_start", line_start) var file = self.file if file != null then - obj["file"] = file.filename + v.serialize_attribute("file", file.filename) end - return obj end - - redef fun serialize_to(v) do json.serialize_to(v) -end - -redef class MVisibility - super Jsonable - - redef fun serialize_to(v) do to_s.serialize_to(v) end redef class MPackage - - redef fun full_json do - var obj = super - if ini != null then - obj["ini"] = new JsonObject.from(ini.as(not null).to_map) + 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)) + var ini = self.ini + if ini != null then v.serialize_attribute("ini", ini.to_map) end - obj["root"] = to_mentity_ref(root) - obj["mgroups"] = to_mentity_refs(mgroups) - return obj end end redef class MGroup - redef fun json do - var obj = super - obj["is_root"] = is_root - return obj - end - - redef fun full_json do - var obj = super - obj["mpackage"] = to_mentity_ref(mpackage) - obj["default_mmodule"] = to_mentity_ref(default_mmodule) - obj["parent"] = to_mentity_ref(parent) - obj["mmodules"] = to_mentity_refs(mmodules) - obj["mgroups"] = to_mentity_refs(in_nesting.direct_smallers) - return obj + redef fun core_serialize_to(v) do + super + if v isa FullJsonSerializer then + v.serialize_attribute("is_root", is_root) + 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)) + end end end redef class MModule - redef fun full_json do - var obj = super - obj["mpackage"] = to_mentity_ref(mpackage) - obj["mgroup"] = to_mentity_ref(mgroup) - obj["intro_mclasses"] = to_mentity_refs(intro_mclasses) - obj["mclassdefs"] = to_mentity_refs(mclassdefs) - obj["intro_mclassdefs"] = to_mentity_refs(collect_intro_mclassdefs(private_view)) - obj["redef_mclassdefs"] = to_mentity_refs(collect_redef_mclassdefs(private_view)) - obj["imports"] = to_mentity_refs(in_importation.direct_greaters) - return obj + redef fun core_serialize_to(v) do + super + if v isa FullJsonSerializer then + 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("imports", to_mentity_refs(in_importation.direct_greaters)) + end end end redef class MClass - redef fun json do - var obj = super - obj["mparameters"] = new JsonArray.from(mparameters) - return obj - end - - redef fun full_json do - var obj = super - obj["intro"] = to_mentity_ref(intro) - obj["intro_mmodule"] = to_mentity_ref(intro_mmodule) - obj["mpackage"] = to_mentity_ref(intro_mmodule.mpackage) - obj["mclassdefs"] = to_mentity_refs(mclassdefs) - obj["all_mproperties"] = to_mentity_refs(collect_accessible_mproperties(private_view)) - obj["intro_mproperties"] = to_mentity_refs(collect_intro_mproperties(private_view)) - obj["redef_mproperties"] = to_mentity_refs(collect_redef_mproperties(private_view)) - obj["parents"] = to_mentity_refs(collect_parents(private_view)) - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("mparameters", mparameters) + if v isa FullJsonSerializer then + var view = private_view + 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))) + end end end redef class MClassDef - redef fun json do - var obj = super - obj["is_intro"] = is_intro - obj["mparameters"] = new JsonArray.from(mclass.mparameters) - return obj - end - - redef fun full_json do - var obj = super - obj["mmodule"] = to_mentity_ref(mmodule) - obj["mclass"] = to_mentity_ref(mclass) - obj["mpropdefs"] = to_mentity_refs(mpropdefs) - obj["intro_mproperties"] = to_mentity_refs(intro_mproperties) - obj["intro"] = to_mentity_ref(mclass.intro) - obj["mpackage"] = to_mentity_ref(mmodule.mpackage) - obj["intro_mpropdefs"] = to_mentity_refs(collect_intro_mpropdefs(private_view)) - obj["redef_mpropdefs"] = to_mentity_refs(collect_redef_mpropdefs(private_view)) - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("is_intro", is_intro) + v.serialize_attribute("mparameters", mclass.mparameters) + if v isa FullJsonSerializer then + 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("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))) + end end end redef class MProperty - redef fun full_json do - var obj = super - obj["intro"] = to_mentity_ref(intro) - obj["intro_mclassdef"] = to_mentity_ref(intro_mclassdef) - obj["mpropdefs"] = to_mentity_refs(mpropdefs) - obj["intro_mclass"] = to_mentity_ref(intro_mclassdef.mclass) - obj["mpackage"] = to_mentity_ref(intro_mclassdef.mmodule.mpackage) - return obj + redef fun core_serialize_to(v) do + super + 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("intro_mclass", to_mentity_ref(intro_mclassdef.mclass)) + v.serialize_attribute("mpackage", to_mentity_ref(intro_mclassdef.mmodule.mpackage)) + end end end redef class MMethod - redef fun json do - var obj = super - obj["is_init"] = is_init - obj["msignature"] = intro.msignature - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("is_init", is_init) + v.serialize_attribute("msignature", intro.msignature) end end redef class MAttribute - redef fun json do - var obj = super - obj["static_mtype"] = to_mentity_ref(intro.static_mtype) - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("static_mtype", to_mentity_ref(intro.static_mtype)) end end redef class MVirtualTypeProp - redef fun json do - var obj = super - obj["mvirtualtype"] = to_mentity_ref(mvirtualtype) - obj["bound"] = to_mentity_ref(intro.bound) - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("mvirtualtype", to_mentity_ref(mvirtualtype)) + v.serialize_attribute("bound", to_mentity_ref(intro.bound)) end end redef class MPropDef - redef fun json do - var obj = super - obj["is_intro"] = is_intro - return obj - end - - redef fun full_json do - var obj = super - obj["mclassdef"] = to_mentity_ref(mclassdef) - obj["mproperty"] = to_mentity_ref(mproperty) - obj["intro"] = to_mentity_ref(mproperty.intro) - obj["intro_mclassdef"] = to_mentity_ref(mproperty.intro.mclassdef) - obj["mmodule"] = to_mentity_ref(mclassdef.mmodule) - obj["mgroup"] = to_mentity_ref(mclassdef.mmodule.mgroup) - obj["mpackage"] = to_mentity_ref(mclassdef.mmodule.mpackage) - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("is_intro", is_intro) + if v isa FullJsonSerializer then + v.serialize_attribute("mclassdef", to_mentity_ref(mclassdef)) + v.serialize_attribute("mproperty", to_mentity_ref(mproperty)) + v.serialize_attribute("intro", to_mentity_ref(mproperty.intro)) + v.serialize_attribute("intro_mclassdef", to_mentity_ref(mproperty.intro.mclassdef)) + v.serialize_attribute("mmodule", to_mentity_ref(mclassdef.mmodule)) + v.serialize_attribute("mgroup", to_mentity_ref(mclassdef.mmodule.mgroup)) + v.serialize_attribute("mpackage", to_mentity_ref(mclassdef.mmodule.mpackage)) + end end end redef class MMethodDef - redef fun json do - var obj = super - obj["msignature"] = msignature - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("msignature", msignature) end end redef class MAttributeDef - redef fun json do - var obj = super - obj["static_mtype"] = to_mentity_ref(static_mtype) - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("static_mtype", to_mentity_ref(static_mtype)) end end redef class MVirtualTypeDef - redef fun json do - var obj = super - obj["bound"] = to_mentity_ref(bound) - obj["is_fixed"] = is_fixed - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("bound", to_mentity_ref(bound)) + v.serialize_attribute("is_fixed", is_fixed) end end redef class MSignature - redef fun json do - var obj = new JsonObject - obj["arity"] = arity - var arr = new JsonArray - for mparam in mparameters do arr.add mparam - obj["mparams"] = arr - obj["return_mtype"] = to_mentity_ref(return_mtype) - obj["vararg_rank"] = vararg_rank - return obj + redef fun core_serialize_to(v) do + v.serialize_attribute("arity", arity) + v.serialize_attribute("mparams", mparameters) + v.serialize_attribute("return_mtype", to_mentity_ref(return_mtype)) + v.serialize_attribute("vararg_rank", vararg_rank) end end redef class MParameterType - redef fun json do - var obj = new JsonObject - obj["name"] = name - obj["rank"] = rank - obj["mtype"] = to_mentity_ref(mclass.intro.bound_mtype.arguments[rank]) - return obj + redef fun core_serialize_to(v) do + v.serialize_attribute("name", name) + v.serialize_attribute("rank", rank) + v.serialize_attribute("mtype", to_mentity_ref(mclass.intro.bound_mtype.arguments[rank])) end end redef class MParameter - redef fun json do - var obj = new JsonObject - obj["is_vararg"] = is_vararg - obj["name"] = name - obj["mtype"] = to_mentity_ref(mtype) - return obj + redef fun core_serialize_to(v) do + v.serialize_attribute("is_vararg", is_vararg) + v.serialize_attribute("name", name) + v.serialize_attribute("mtype", to_mentity_ref(mtype)) end end @@ -336,8 +291,19 @@ fun to_mentity_ref(mentity: nullable MEntity): nullable MEntityRef do end # Return a collection of `mentities` as a JsonArray of MEntityRefs. -fun to_mentity_refs(mentities: Collection[MEntity]): JsonArray do - var array = new JsonArray - for mentity in mentities do array.add to_mentity_ref(mentity) +fun to_mentity_refs(mentities: Collection[MEntity]): Array[MEntityRef] do + var array = new Array[MEntityRef] + for mentity in mentities do + var ref = to_mentity_ref(mentity) + if ref == null then continue + array.add ref + end return array end + +# Use the FullJsonSerializer to generate the full json representation of a MEntity. +# +# See MEntity::to_full_json. +class FullJsonSerializer + super JsonSerializer +end diff --git a/src/model/test_model_json.nit b/src/model/test_model_json.nit new file mode 100644 index 0000000000..4a71d0cd73 --- /dev/null +++ b/src/model/test_model_json.nit @@ -0,0 +1,110 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +module test_model_json is test_suite + +import test_suite +import model_json +import frontend + +class TestModelSerialization + super TestSuite + + var lib_path: String = "../../tests/test_prog" + + private var model: Model do + var toolcontext = new ToolContext + var model = new Model + var mbuilder = new ModelBuilder(model, toolcontext) + var mmodules = mbuilder.parse_full([lib_path]) + if mmodules.is_empty then return model + mbuilder.run_phases + toolcontext.run_global_phases(mmodules) + return model + end + + fun test_refs_to_full_json do + var mentities = new Array[MEntity] + mentities.add model.mpackages.first + mentities.add model.mmodules.first + mentities.add model.mclasses.first + for mentity in mentities do + print ((new MEntityRef(mentity)).to_pretty_full_json) + end + end + + fun test_packages_to_full_json do + for mentity in model.mpackages do + print mentity.to_pretty_full_json + end + end + + fun test_groups_to_full_json do + for mpackage in model.mpackages do + for mentity in mpackage.mgroups do + print mentity.to_pretty_full_json + end + end + end + + fun test_modules_to_full_json do + for mentity in model.mmodules do + print mentity.to_pretty_full_json + end + end + + fun test_classes_to_full_json do + for mentity in model.mclasses do + print mentity.to_pretty_full_json + end + end + + fun test_classdefs_to_full_json do + for mclass in model.mclasses do + for mentity in mclass.mclassdefs do + print mentity.to_pretty_full_json + end + end + end + + fun test_props_to_full_json do + for mentity in model.mproperties do + print mentity.to_pretty_full_json + end + end + + fun test_propdefs_to_full_json do + for mprop in model.mproperties do + for mentity in mprop.mpropdefs do + print mentity.to_pretty_full_json + end + end + end +end + +redef class Location + serialize + + # Avoid diff on location absolute path + redef fun core_serialize_to(v) do + v.serialize_attribute("column_end", column_end) + v.serialize_attribute("column_start", column_start) + v.serialize_attribute("line_end", line_end) + v.serialize_attribute("line_start", line_start) + var file = self.file + if file != null then + v.serialize_attribute("file", "test_location") + end + end +end diff --git a/src/model/test_model_json.sav/test_classdefs_to_full_json.res b/src/model/test_model_json.sav/test_classdefs_to_full_json.res new file mode 100644 index 0000000000..2dd320b64e --- /dev/null +++ b/src/model/test_model_json.sav/test_classdefs_to_full_json.res @@ -0,0 +1,1376 @@ +{ + "name": "Object", + "class_name": "MClassDef", + "full_name": "test_prog$Object", + "mdoc": { + "content": "Root of everything.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 21, + "line_start": 20, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 30, + "line_start": 20, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::platform" + }, + "mclass": { + "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$init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }, { + "full_name": "test_prog::Object::init" + }], + "intro": { + "full_name": "test_prog$Object" + }, + "mpackage": { + "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$init" + }], + "redef_mpropdefs": [] +} +{ + "name": "Int", + "class_name": "MClassDef", + "full_name": "test_prog$Int", + "mdoc": { + "content": "Some services about Integers.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 33, + "line_start": 32, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 41, + "line_start": 32, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::platform" + }, + "mclass": { + "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$to_f" + }], + "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::to_f" + }], + "intro": { + "full_name": "test_prog$Int" + }, + "mpackage": { + "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$to_f" + }], + "redef_mpropdefs": [] +} +{ + "name": "Float", + "class_name": "MClassDef", + "full_name": "test_prog$Float", + "mdoc": { + "content": "Some services about Floats.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 44, + "line_start": 43, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 50, + "line_start": 43, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::platform" + }, + "mclass": { + "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$>" + }], + "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::>" + }], + "intro": { + "full_name": "test_prog$Float" + }, + "mpackage": { + "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$>" + }], + "redef_mpropdefs": [] +} +{ + "name": "Bool", + "class_name": "MClassDef", + "full_name": "test_prog$Bool", + "mdoc": { + "content": "Booleans, `true` or `false`.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 53, + "line_start": 52, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 14, + "column_start": 1, + "line_end": 53, + "line_start": 52, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::platform" + }, + "mclass": { + "full_name": "test_prog::Bool" + }, + "mpropdefs": [], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Bool" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [] +} +{ + "name": "String", + "class_name": "MClassDef", + "full_name": "test_prog$String", + "mdoc": { + "content": "Strings (there is no chars...).", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 56, + "line_start": 55, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 16, + "column_start": 1, + "line_end": 56, + "line_start": 55, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::platform" + }, + "mclass": { + "full_name": "test_prog::String" + }, + "mpropdefs": [], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$String" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [] +} +{ + "name": "List", + "class_name": "MClassDef", + "full_name": "test_prog$List", + "mdoc": { + "content": "List of things.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 59, + "line_start": 58, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 17, + "column_start": 1, + "line_end": 59, + "line_start": 58, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [{ + "name": "E", + "rank": 0, + "mtype": { + "full_name": "nullable test_prog::Object" + } + }], + "mmodule": { + "full_name": "test_prog::platform" + }, + "mclass": { + "full_name": "test_prog::List" + }, + "mpropdefs": [], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$List" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [] +} +{ + "name": "Career", + "class_name": "MClassDef", + "full_name": "test_prog$Career", + "mdoc": { + "content": "A `Career` gives a characteristic bonus or malus to the character.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 30, + "line_start": 29, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 36, + "line_start": 29, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::careers" + }, + "mclass": { + "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$strength_bonus=" + }, { + "full_name": "test_prog$Career$_endurance_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$Object::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::careers::Career::_strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus=" + }, { + "full_name": "test_prog::careers::Career::_endurance_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=" + }], + "intro": { + "full_name": "test_prog$Career" + }, + "mpackage": { + "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$strength_bonus=" + }, { + "full_name": "test_prog$Career$_endurance_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=" + }], + "redef_mpropdefs": [{ + "full_name": "test_prog$Career$Object::init" + }] +} +{ + "name": "Warrior", + "class_name": "MClassDef", + "full_name": "test_prog$Warrior", + "mdoc": { + "content": "Warriors are good for fighting.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 47, + "line_start": 38, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::careers" + }, + "mclass": { + "full_name": "test_prog::Warrior" + }, + "mpropdefs": [{ + "full_name": "test_prog$Warrior$Object::init" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Warrior" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog$Warrior$Object::init" + }] +} +{ + "name": "Magician", + "class_name": "MClassDef", + "full_name": "test_prog$Magician", + "mdoc": { + "content": "Magicians know magic and how to use it.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 50, + "line_start": 49, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 58, + "line_start": 49, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::careers" + }, + "mclass": { + "full_name": "test_prog::Magician" + }, + "mpropdefs": [{ + "full_name": "test_prog$Magician$Object::init" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Magician" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog$Magician$Object::init" + }] +} +{ + "name": "Alcoholic", + "class_name": "MClassDef", + "full_name": "test_prog$Alcoholic", + "mdoc": { + "content": "Alcoholics are good to nothing escept taking punches.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 61, + "line_start": 60, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 69, + "line_start": 60, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::careers" + }, + "mclass": { + "full_name": "test_prog::Alcoholic" + }, + "mpropdefs": [{ + "full_name": "test_prog$Alcoholic$Object::init" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Alcoholic" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog$Alcoholic$Object::init" + }] +} +{ + "name": "Race", + "class_name": "MClassDef", + "full_name": "test_prog$Race", + "mdoc": { + "content": "Race determines basic characteristics and what the character will be able to do in life.\n\nThese are base characteristics, they cannot be changed\nbut you can add new ones if needed using refinement.\nObjects and spells cannot change those characteristics.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 33, + "line_start": 28, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 45, + "line_start": 28, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::races" + }, + "mclass": { + "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_strength=" + }, { + "full_name": "test_prog$Race$_base_endurance" + }, { + "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$Object::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::races::Race::_base_strength" + }, { + "full_name": "test_prog::Race::base_strength" + }, { + "full_name": "test_prog::Race::base_strength=" + }, { + "full_name": "test_prog::races::Race::_base_endurance" + }, { + "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=" + }], + "intro": { + "full_name": "test_prog$Race" + }, + "mpackage": { + "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_strength=" + }, { + "full_name": "test_prog$Race$_base_endurance" + }, { + "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=" + }], + "redef_mpropdefs": [{ + "full_name": "test_prog$Race$Object::init" + }] +} +{ + "name": "Human", + "class_name": "MClassDef", + "full_name": "test_prog$Human", + "mdoc": { + "content": "Humans are able to do everithing.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 48, + "line_start": 47, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 56, + "line_start": 47, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::races" + }, + "mclass": { + "full_name": "test_prog::Human" + }, + "mpropdefs": [{ + "full_name": "test_prog$Human$Object::init" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Human" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog$Human$Object::init" + }] +} +{ + "name": "Dwarf", + "class_name": "MClassDef", + "full_name": "test_prog$Dwarf", + "mdoc": { + "content": "Dwarves make strong warriors.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 59, + "line_start": 58, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 67, + "line_start": 58, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::races" + }, + "mclass": { + "full_name": "test_prog::Dwarf" + }, + "mpropdefs": [{ + "full_name": "test_prog$Dwarf$Object::init" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Dwarf" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog$Dwarf$Object::init" + }] +} +{ + "name": "Dwarf", + "class_name": "MClassDef", + "full_name": "test_prog::combat$Dwarf", + "mdoc": { + "content": "Dwarves can be used as weapons.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 62, + "line_start": 61, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["redef", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 67, + "line_start": 61, + "file": "test_location" + }, + "is_intro": false, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::combat" + }, + "mclass": { + "full_name": "test_prog::Dwarf" + }, + "mpropdefs": [{ + "full_name": "test_prog::combat$Dwarf$Weapon::dps" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Dwarf" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog::combat$Dwarf$Weapon::dps" + }] +} +{ + "name": "Elf", + "class_name": "MClassDef", + "full_name": "test_prog$Elf", + "mdoc": { + "content": "Elves make good magicians.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 70, + "line_start": 69, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 78, + "line_start": 69, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::races" + }, + "mclass": { + "full_name": "test_prog::Elf" + }, + "mpropdefs": [{ + "full_name": "test_prog$Elf$Object::init" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Elf" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog$Elf$Object::init" + }] +} +{ + "name": "Character", + "class_name": "MClassDef", + "full_name": "test_prog$Character", + "mdoc": { + "content": "Characters can be played by both the human or the machine.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 22, + "line_start": 21, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 68, + "line_start": 21, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::character" + }, + "mclass": { + "full_name": "test_prog::Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_race" + }, { + "full_name": "test_prog$Character$race" + }, { + "full_name": "test_prog$Character$race=" + }, { + "full_name": "test_prog$Character$_career" + }, { + "full_name": "test_prog$Character$career" + }, { + "full_name": "test_prog$Character$career=" + }, { + "full_name": "test_prog$Character$quit" + }, { + "full_name": "test_prog$Character$_name" + }, { + "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$age=" + }, { + "full_name": "test_prog$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$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$Object::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::character::Character::_race" + }, { + "full_name": "test_prog::Character::race" + }, { + "full_name": "test_prog::Character::race=" + }, { + "full_name": "test_prog::character::Character::_career" + }, { + "full_name": "test_prog::Character::career" + }, { + "full_name": "test_prog::Character::career=" + }, { + "full_name": "test_prog::Character::quit" + }, { + "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::_age" + }, { + "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::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=" + }], + "intro": { + "full_name": "test_prog$Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [{ + "full_name": "test_prog$Character$_race" + }, { + "full_name": "test_prog$Character$race" + }, { + "full_name": "test_prog$Character$race=" + }, { + "full_name": "test_prog$Character$_career" + }, { + "full_name": "test_prog$Character$career" + }, { + "full_name": "test_prog$Character$career=" + }, { + "full_name": "test_prog$Character$quit" + }, { + "full_name": "test_prog$Character$_name" + }, { + "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$age=" + }, { + "full_name": "test_prog$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$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=" + }], + "redef_mpropdefs": [{ + "full_name": "test_prog$Character$Object::init" + }] +} +{ + "name": "Character", + "class_name": "MClassDef", + "full_name": "test_prog::combat$Character", + "mdoc": { + "content": "Characters are now `Comabatable`", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 54, + "line_start": 53, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["redef", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 59, + "line_start": 53, + "file": "test_location" + }, + "is_intro": false, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::combat" + }, + "mclass": { + "full_name": "test_prog::Character" + }, + "mpropdefs": [{ + "full_name": "test_prog::combat$Character$Combatable::hit_points" + }], + "intro_mproperties": [], + "intro": { + "full_name": "test_prog$Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [], + "redef_mpropdefs": [{ + "full_name": "test_prog::combat$Character$Combatable::hit_points" + }] +} +{ + "name": "Weapon", + "class_name": "MClassDef", + "full_name": "test_prog$Weapon", + "mdoc": { + "content": "Something that can be used to attack someone and inflict damage.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 21, + "line_start": 20, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 24, + "line_start": 20, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::combat" + }, + "mclass": { + "full_name": "test_prog::Weapon" + }, + "mpropdefs": [{ + "full_name": "test_prog$Weapon$dps" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Weapon::dps" + }], + "intro": { + "full_name": "test_prog$Weapon" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [{ + "full_name": "test_prog$Weapon$dps" + }], + "redef_mpropdefs": [] +} +{ + "name": "Combatable", + "class_name": "MClassDef", + "full_name": "test_prog$Combatable", + "mdoc": { + "content": "Something that can be combatted, it can `attack` and `defend`.\n\nWorld items can also be `Combatable`.\n`defend` method is then used to determines how the object react to an attack\nSome magical items can even `attack`.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 31, + "line_start": 26, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 51, + "line_start": 26, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::combat" + }, + "mclass": { + "full_name": "test_prog::Combatable" + }, + "mpropdefs": [{ + "full_name": "test_prog$Combatable$hit_points" + }, { + "full_name": "test_prog$Combatable$attack" + }, { + "full_name": "test_prog$Combatable$direct_attack" + }, { + "full_name": "test_prog$Combatable$defend" + }, { + "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::direct_attack" + }, { + "full_name": "test_prog::Combatable::defend" + }, { + "full_name": "test_prog::Combatable::is_dead" + }], + "intro": { + "full_name": "test_prog$Combatable" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [{ + "full_name": "test_prog$Combatable$hit_points" + }, { + "full_name": "test_prog$Combatable$attack" + }, { + "full_name": "test_prog$Combatable$direct_attack" + }, { + "full_name": "test_prog$Combatable$defend" + }, { + "full_name": "test_prog$Combatable$is_dead" + }], + "redef_mpropdefs": [] +} +{ + "name": "Game", + "class_name": "MClassDef", + "full_name": "test_prog$Game", + "mdoc": { + "content": "This is the interface you have to implement to use ure gaming platform.\n\nsee http://our.platform.com", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 23, + "line_start": 20, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 45, + "line_start": 20, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::game" + }, + "mclass": { + "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$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::stop_game" + }], + "intro": { + "full_name": "test_prog$Game" + }, + "mpackage": { + "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$stop_game" + }], + "redef_mpropdefs": [] +} +{ + "name": "Starter", + "class_name": "MClassDef", + "full_name": "test_prog$Starter", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 23, + "line_start": 21, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::test_prog" + }, + "mclass": { + "full_name": "test_prog::Starter" + }, + "mpropdefs": [{ + "full_name": "test_prog$Starter$start" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Starter::start" + }], + "intro": { + "full_name": "test_prog$Starter" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [{ + "full_name": "test_prog$Starter$start" + }], + "redef_mpropdefs": [] +} +{ + "name": "Sys", + "class_name": "MClassDef", + "full_name": "test_prog$Sys", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 13, + "column_start": 1, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "is_intro": true, + "mparameters": [], + "mmodule": { + "full_name": "test_prog::test_prog" + }, + "mclass": { + "full_name": "test_prog::Sys" + }, + "mpropdefs": [{ + "full_name": "test_prog$Sys$main" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Sys::main" + }], + "intro": { + "full_name": "test_prog$Sys" + }, + "mpackage": { + "full_name": "test_prog" + }, + "intro_mpropdefs": [{ + "full_name": "test_prog$Sys$main" + }], + "redef_mpropdefs": [] +} diff --git a/src/model/test_model_json.sav/test_classes_to_full_json.res b/src/model/test_model_json.sav/test_classes_to_full_json.res new file mode 100644 index 0000000000..2fc7104943 --- /dev/null +++ b/src/model/test_model_json.sav/test_classes_to_full_json.res @@ -0,0 +1,1428 @@ +{ + "name": "Object", + "class_name": "MClass", + "full_name": "test_prog::Object", + "mdoc": { + "content": "Root of everything.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 21, + "line_start": 20, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 30, + "line_start": 20, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Object" + }, + "intro_mmodule": { + "full_name": "test_prog::platform" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }, { + "full_name": "test_prog::Object::init" + }], + "redef_mproperties": [], + "parents": [] +} +{ + "name": "Int", + "class_name": "MClass", + "full_name": "test_prog::Int", + "mdoc": { + "content": "Some services about Integers.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 33, + "line_start": 32, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 41, + "line_start": 32, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Int" + }, + "intro_mmodule": { + "full_name": "test_prog::platform" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Int" + }], + "all_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::to_f" + }, { + "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::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::to_f" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Float", + "class_name": "MClass", + "full_name": "test_prog::Float", + "mdoc": { + "content": "Some services about Floats.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 44, + "line_start": 43, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 50, + "line_start": 43, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Float" + }, + "intro_mmodule": { + "full_name": "test_prog::platform" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Float" + }], + "all_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::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::>" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Bool", + "class_name": "MClass", + "full_name": "test_prog::Bool", + "mdoc": { + "content": "Booleans, `true` or `false`.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 53, + "line_start": 52, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 14, + "column_start": 1, + "line_end": 53, + "line_start": 52, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Bool" + }, + "intro_mmodule": { + "full_name": "test_prog::platform" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "String", + "class_name": "MClass", + "full_name": "test_prog::String", + "mdoc": { + "content": "Strings (there is no chars...).", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 56, + "line_start": 55, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 16, + "column_start": 1, + "line_end": 56, + "line_start": 55, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$String" + }, + "intro_mmodule": { + "full_name": "test_prog::platform" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "List", + "class_name": "MClass", + "full_name": "test_prog::List", + "mdoc": { + "content": "List of things.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 59, + "line_start": 58, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 17, + "column_start": 1, + "line_end": 59, + "line_start": 58, + "file": "test_location" + }, + "mparameters": [{ + "name": "E", + "rank": 0, + "mtype": { + "full_name": "nullable test_prog::Object" + } + }], + "intro": { + "full_name": "test_prog$List" + }, + "intro_mmodule": { + "full_name": "test_prog::platform" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Career", + "class_name": "MClass", + "full_name": "test_prog::Career", + "mdoc": { + "content": "A `Career` gives a characteristic bonus or malus to the character.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 30, + "line_start": 29, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 36, + "line_start": 29, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Career" + }, + "intro_mmodule": { + "full_name": "test_prog::careers" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Career" + }], + "all_mproperties": [{ + "full_name": "test_prog::careers::Career::_strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus=" + }, { + "full_name": "test_prog::careers::Career::_endurance_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::Object::init" + }, { + "full_name": "test_prog::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [{ + "full_name": "test_prog::careers::Career::_strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus=" + }, { + "full_name": "test_prog::careers::Career::_endurance_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=" + }], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Warrior", + "class_name": "MClass", + "full_name": "test_prog::Warrior", + "mdoc": { + "content": "Warriors are good for fighting.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 47, + "line_start": 38, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Warrior" + }, + "intro_mmodule": { + "full_name": "test_prog::careers" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::Career::strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus=" + }, { + "full_name": "test_prog::careers::Career::_endurance_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::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Career" + }] +} +{ + "name": "Magician", + "class_name": "MClass", + "full_name": "test_prog::Magician", + "mdoc": { + "content": "Magicians know magic and how to use it.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 50, + "line_start": 49, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 58, + "line_start": 49, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Magician" + }, + "intro_mmodule": { + "full_name": "test_prog::careers" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::Career::strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus=" + }, { + "full_name": "test_prog::careers::Career::_endurance_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::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Career" + }] +} +{ + "name": "Alcoholic", + "class_name": "MClass", + "full_name": "test_prog::Alcoholic", + "mdoc": { + "content": "Alcoholics are good to nothing escept taking punches.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 61, + "line_start": 60, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 69, + "line_start": 60, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Alcoholic" + }, + "intro_mmodule": { + "full_name": "test_prog::careers" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::Career::strength_bonus" + }, { + "full_name": "test_prog::Career::strength_bonus=" + }, { + "full_name": "test_prog::careers::Career::_endurance_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::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Career" + }] +} +{ + "name": "Race", + "class_name": "MClass", + "full_name": "test_prog::Race", + "mdoc": { + "content": "Race determines basic characteristics and what the character will be able to do in life.\n\nThese are base characteristics, they cannot be changed\nbut you can add new ones if needed using refinement.\nObjects and spells cannot change those characteristics.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 33, + "line_start": 28, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 45, + "line_start": 28, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Race" + }, + "intro_mmodule": { + "full_name": "test_prog::races" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Race" + }], + "all_mproperties": [{ + "full_name": "test_prog::races::Race::_base_strength" + }, { + "full_name": "test_prog::Race::base_strength" + }, { + "full_name": "test_prog::Race::base_strength=" + }, { + "full_name": "test_prog::races::Race::_base_endurance" + }, { + "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::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [{ + "full_name": "test_prog::races::Race::_base_strength" + }, { + "full_name": "test_prog::Race::base_strength" + }, { + "full_name": "test_prog::Race::base_strength=" + }, { + "full_name": "test_prog::races::Race::_base_endurance" + }, { + "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=" + }], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Human", + "class_name": "MClass", + "full_name": "test_prog::Human", + "mdoc": { + "content": "Humans are able to do everithing.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 48, + "line_start": 47, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 56, + "line_start": 47, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Human" + }, + "intro_mmodule": { + "full_name": "test_prog::races" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::Race::base_strength" + }, { + "full_name": "test_prog::Race::base_strength=" + }, { + "full_name": "test_prog::races::Race::_base_endurance" + }, { + "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::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Race" + }] +} +{ + "name": "Dwarf", + "class_name": "MClass", + "full_name": "test_prog::Dwarf", + "mdoc": { + "content": "Dwarves make strong warriors.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 59, + "line_start": 58, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 67, + "line_start": 58, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Dwarf" + }, + "intro_mmodule": { + "full_name": "test_prog::races" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Dwarf" + }, { + "full_name": "test_prog::combat$Dwarf" + }], + "all_mproperties": [{ + "full_name": "test_prog::Object::init" + }, { + "full_name": "test_prog::Weapon::dps" + }, { + "full_name": "test_prog::races::Race::_base_strength" + }, { + "full_name": "test_prog::Race::base_strength" + }, { + "full_name": "test_prog::Race::base_strength=" + }, { + "full_name": "test_prog::races::Race::_base_endurance" + }, { + "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::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }, { + "full_name": "test_prog::Weapon::dps" + }], + "parents": [{ + "full_name": "test_prog::Race" + }, { + "full_name": "test_prog::Weapon" + }] +} +{ + "name": "Elf", + "class_name": "MClass", + "full_name": "test_prog::Elf", + "mdoc": { + "content": "Elves make good magicians.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 70, + "line_start": 69, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 78, + "line_start": 69, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Elf" + }, + "intro_mmodule": { + "full_name": "test_prog::races" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::Race::base_strength" + }, { + "full_name": "test_prog::Race::base_strength=" + }, { + "full_name": "test_prog::races::Race::_base_endurance" + }, { + "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::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }], + "intro_mproperties": [], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }], + "parents": [{ + "full_name": "test_prog::Race" + }] +} +{ + "name": "Character", + "class_name": "MClass", + "full_name": "test_prog::Character", + "mdoc": { + "content": "Characters can be played by both the human or the machine.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 22, + "line_start": 21, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 68, + "line_start": 21, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Character" + }, + "intro_mmodule": { + "full_name": "test_prog::character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Character" + }, { + "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::Character::race=" + }, { + "full_name": "test_prog::character::Character::_career" + }, { + "full_name": "test_prog::Character::career" + }, { + "full_name": "test_prog::Character::career=" + }, { + "full_name": "test_prog::Character::quit" + }, { + "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::_age" + }, { + "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::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::Object::init" + }, { + "full_name": "test_prog::Combatable::hit_points" + }, { + "full_name": "test_prog::Object::OTHER" + }, { + "full_name": "test_prog::Object::==" + }, { + "full_name": "test_prog::Object::!=" + }, { + "full_name": "test_prog::Combatable::attack" + }, { + "full_name": "test_prog::Combatable::direct_attack" + }, { + "full_name": "test_prog::Combatable::defend" + }, { + "full_name": "test_prog::Combatable::is_dead" + }], + "intro_mproperties": [{ + "full_name": "test_prog::character::Character::_race" + }, { + "full_name": "test_prog::Character::race" + }, { + "full_name": "test_prog::Character::race=" + }, { + "full_name": "test_prog::character::Character::_career" + }, { + "full_name": "test_prog::Character::career" + }, { + "full_name": "test_prog::Character::career=" + }, { + "full_name": "test_prog::Character::quit" + }, { + "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::_age" + }, { + "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::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=" + }], + "redef_mproperties": [{ + "full_name": "test_prog::Object::init" + }, { + "full_name": "test_prog::Combatable::hit_points" + }], + "parents": [{ + "full_name": "test_prog::Object" + }, { + "full_name": "test_prog::Combatable" + }] +} +{ + "name": "Weapon", + "class_name": "MClass", + "full_name": "test_prog::Weapon", + "mdoc": { + "content": "Something that can be used to attack someone and inflict damage.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 21, + "line_start": 20, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 24, + "line_start": 20, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Weapon" + }, + "intro_mmodule": { + "full_name": "test_prog::combat" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Weapon::dps" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Combatable", + "class_name": "MClass", + "full_name": "test_prog::Combatable", + "mdoc": { + "content": "Something that can be combatted, it can `attack` and `defend`.\n\nWorld items can also be `Combatable`.\n`defend` method is then used to determines how the object react to an attack\nSome magical items can even `attack`.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 31, + "line_start": 26, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 51, + "line_start": 26, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Combatable" + }, + "intro_mmodule": { + "full_name": "test_prog::combat" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Combatable" + }], + "all_mproperties": [{ + "full_name": "test_prog::Combatable::hit_points" + }, { + "full_name": "test_prog::Combatable::attack" + }, { + "full_name": "test_prog::Combatable::direct_attack" + }, { + "full_name": "test_prog::Combatable::defend" + }, { + "full_name": "test_prog::Combatable::is_dead" + }, { + "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::Combatable::hit_points" + }, { + "full_name": "test_prog::Combatable::attack" + }, { + "full_name": "test_prog::Combatable::direct_attack" + }, { + "full_name": "test_prog::Combatable::defend" + }, { + "full_name": "test_prog::Combatable::is_dead" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Game", + "class_name": "MClass", + "full_name": "test_prog::Game", + "mdoc": { + "content": "This is the interface you have to implement to use ure gaming platform.\n\nsee http://our.platform.com", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 23, + "line_start": 20, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "interface"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 45, + "line_start": 20, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Game" + }, + "intro_mmodule": { + "full_name": "test_prog::game" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "full_name": "test_prog$Game" + }], + "all_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::stop_game" + }, { + "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::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::stop_game" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Starter", + "class_name": "MClass", + "full_name": "test_prog::Starter", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 23, + "line_start": 21, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Starter" + }, + "intro_mmodule": { + "full_name": "test_prog::test_prog" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Starter::start" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} +{ + "name": "Sys", + "class_name": "MClass", + "full_name": "test_prog::Sys", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "class"], + "location": { + "column_end": 13, + "column_start": 1, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "mparameters": [], + "intro": { + "full_name": "test_prog$Sys" + }, + "intro_mmodule": { + "full_name": "test_prog::test_prog" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mclassdefs": [{ + "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::init" + }], + "intro_mproperties": [{ + "full_name": "test_prog::Sys::main" + }], + "redef_mproperties": [], + "parents": [{ + "full_name": "test_prog::Object" + }] +} diff --git a/src/model/test_model_json.sav/test_groups_to_full_json.res b/src/model/test_model_json.sav/test_groups_to_full_json.res new file mode 100644 index 0000000000..3e9fd9fe23 --- /dev/null +++ b/src/model/test_model_json.sav/test_groups_to_full_json.res @@ -0,0 +1,191 @@ +{ + "name": "test_prog", + "class_name": "MGroup", + "full_name": "test_prog>", + "mdoc": { + "content": "Test program for model tools.\n\nThis program creates a fake model that can be used to test tools like:\n\n* `nitdoc`\n* `nitmetrics`\n* `nitx`\n* or others `modelbuilder`.\n\nAn image:\n\n![Tinks3D](../../contrib/tinks/doc/tinks3d.png)", + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 12, + "line_start": 1, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["group"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "is_root": true, + "mpackage": { + "full_name": "test_prog" + }, + "default_mmodule": { + "full_name": "test_prog::test_prog" + }, + "parent": null, + "mmodules": [{ + "full_name": "test_prog::test_prog" + }], + "mgroups": [{ + "full_name": "test_prog>game>" + }, { + "full_name": "test_prog>platform>" + }, { + "full_name": "test_prog>rpg>" + }] +} +{ + "name": "game", + "class_name": "MGroup", + "full_name": "test_prog>game>", + "mdoc": { + "content": "Gaming group", + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 1, + "line_start": 1, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["group"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "is_root": false, + "mpackage": { + "full_name": "test_prog" + }, + "default_mmodule": { + "full_name": "test_prog::game" + }, + "parent": { + "full_name": "test_prog>" + }, + "mmodules": [{ + "full_name": "test_prog::game" + }], + "mgroups": [] +} +{ + "name": "platform", + "class_name": "MGroup", + "full_name": "test_prog>platform>", + "mdoc": { + "content": "Fictive Crappy Platform.", + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 1, + "line_start": 1, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["group"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "is_root": false, + "mpackage": { + "full_name": "test_prog" + }, + "default_mmodule": { + "full_name": "test_prog::platform" + }, + "parent": { + "full_name": "test_prog>" + }, + "mmodules": [{ + "full_name": "test_prog::platform" + }], + "mgroups": [] +} +{ + "name": "rpg", + "class_name": "MGroup", + "full_name": "test_prog>rpg>", + "mdoc": { + "content": "Role Playing Game group", + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 1, + "line_start": 1, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["group"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "is_root": false, + "mpackage": { + "full_name": "test_prog" + }, + "default_mmodule": { + "full_name": "test_prog::rpg" + }, + "parent": { + "full_name": "test_prog>" + }, + "mmodules": [{ + "full_name": "test_prog::careers" + }, { + "full_name": "test_prog::character" + }, { + "full_name": "test_prog::combat" + }, { + "full_name": "test_prog::races" + }, { + "full_name": "test_prog::rpg" + }], + "mgroups": [] +} +{ + "name": "excluded", + "class_name": "MGroup", + "full_name": "excluded>", + "mdoc": null, + "visibility": "public", + "modifiers": ["group"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "is_root": true, + "mpackage": { + "full_name": "excluded" + }, + "default_mmodule": { + "full_name": "excluded::excluded" + }, + "parent": null, + "mmodules": [{ + "full_name": "excluded::excluded" + }], + "mgroups": [] +} diff --git a/src/model/test_model_json.sav/test_modules_to_full_json.res b/src/model/test_model_json.sav/test_modules_to_full_json.res new file mode 100644 index 0000000000..92690d1030 --- /dev/null +++ b/src/model/test_model_json.sav/test_modules_to_full_json.res @@ -0,0 +1,474 @@ +{ + "name": "excluded", + "class_name": "MModule", + "full_name": "excluded::excluded", + "mdoc": null, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "mpackage": { + "full_name": "excluded" + }, + "mgroup": { + "full_name": "excluded>" + }, + "intro_mclasses": [], + "mclassdefs": [], + "intro_mclassdefs": [], + "redef_mclassdefs": [], + "imports": [] +} +{ + "name": "game", + "class_name": "MModule", + "full_name": "test_prog::game", + "mdoc": { + "content": "A game abstraction for RPG.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 16, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 45, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>game>" + }, + "intro_mclasses": [{ + "full_name": "test_prog::Game" + }], + "mclassdefs": [{ + "full_name": "test_prog$Game" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Game" + }], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::rpg" + }] +} +{ + "name": "platform", + "class_name": "MModule", + "full_name": "test_prog::platform", + "mdoc": { + "content": "Declares base types allowed on the platform.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 16, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 17, + "column_start": 1, + "line_end": 59, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "intro_mclasses": [{ + "full_name": "test_prog::Object" + }, { + "full_name": "test_prog::Int" + }, { + "full_name": "test_prog::Float" + }, { + "full_name": "test_prog::Bool" + }, { + "full_name": "test_prog::String" + }, { + "full_name": "test_prog::List" + }], + "mclassdefs": [{ + "full_name": "test_prog$Object" + }, { + "full_name": "test_prog$Int" + }, { + "full_name": "test_prog$Float" + }, { + "full_name": "test_prog$Bool" + }, { + "full_name": "test_prog$String" + }, { + "full_name": "test_prog$List" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Object" + }, { + "full_name": "test_prog$Int" + }, { + "full_name": "test_prog$Float" + }, { + "full_name": "test_prog$Bool" + }, { + "full_name": "test_prog$String" + }, { + "full_name": "test_prog$List" + }], + "redef_mclassdefs": [], + "imports": [] +} +{ + "name": "careers", + "class_name": "MModule", + "full_name": "test_prog::careers", + "mdoc": { + "content": "Careers of the game.\n\nAll characters can have a `Career`.\nA character can also quit its current career and start a new one.\n\nAvailable careers:\n\n * `Warrior`\n * `Magician`\n * `Alcoholic`", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 25, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 69, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "intro_mclasses": [{ + "full_name": "test_prog::Career" + }, { + "full_name": "test_prog::Warrior" + }, { + "full_name": "test_prog::Magician" + }, { + "full_name": "test_prog::Alcoholic" + }], + "mclassdefs": [{ + "full_name": "test_prog$Career" + }, { + "full_name": "test_prog$Warrior" + }, { + "full_name": "test_prog$Magician" + }, { + "full_name": "test_prog$Alcoholic" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Career" + }, { + "full_name": "test_prog$Warrior" + }, { + "full_name": "test_prog$Magician" + }, { + "full_name": "test_prog$Alcoholic" + }], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::platform" + }] +} +{ + "name": "character", + "class_name": "MModule", + "full_name": "test_prog::character", + "mdoc": { + "content": "Characters are playable entity in the world.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 16, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 68, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "intro_mclasses": [{ + "full_name": "test_prog::Character" + }], + "mclassdefs": [{ + "full_name": "test_prog$Character" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Character" + }], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::races" + }, { + "full_name": "test_prog::careers" + }] +} +{ + "name": "combat", + "class_name": "MModule", + "full_name": "test_prog::combat", + "mdoc": { + "content": "COmbat interactions between characters.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 16, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 67, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "intro_mclasses": [{ + "full_name": "test_prog::Weapon" + }, { + "full_name": "test_prog::Combatable" + }], + "mclassdefs": [{ + "full_name": "test_prog$Weapon" + }, { + "full_name": "test_prog$Combatable" + }, { + "full_name": "test_prog::combat$Character" + }, { + "full_name": "test_prog::combat$Dwarf" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Weapon" + }, { + "full_name": "test_prog$Combatable" + }], + "redef_mclassdefs": [{ + "full_name": "test_prog::combat$Character" + }, { + "full_name": "test_prog::combat$Dwarf" + }], + "imports": [{ + "full_name": "test_prog::character" + }] +} +{ + "name": "races", + "class_name": "MModule", + "full_name": "test_prog::races", + "mdoc": { + "content": "Races of the game.\n\nAll characters belong to a `Race`.\n\nAvailable races:\n\n * `Human`\n * `Dwarf`\n * `Elf`", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 24, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 78, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "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$Dwarf" + }, { + "full_name": "test_prog$Elf" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Race" + }, { + "full_name": "test_prog$Human" + }, { + "full_name": "test_prog$Dwarf" + }, { + "full_name": "test_prog$Elf" + }], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::platform" + }] +} +{ + "name": "rpg", + "class_name": "MModule", + "full_name": "test_prog::rpg", + "mdoc": { + "content": "A worlg RPG abstraction.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 16, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 13, + "column_start": 1, + "line_end": 21, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "intro_mclasses": [], + "mclassdefs": [], + "intro_mclassdefs": [], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::combat" + }] +} +{ + "name": "test_prog", + "class_name": "MModule", + "full_name": "test_prog::test_prog", + "mdoc": { + "content": "A test program with a fake model to check model tools.", + "location": { + "column_end": 0, + "column_start": 1, + "line_end": 16, + "line_start": 15, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 13, + "column_start": 1, + "line_end": 26, + "line_start": 15, + "file": "test_location" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mgroup": { + "full_name": "test_prog>" + }, + "intro_mclasses": [{ + "full_name": "test_prog::Starter" + }, { + "full_name": "test_prog::Sys" + }], + "mclassdefs": [{ + "full_name": "test_prog$Starter" + }, { + "full_name": "test_prog$Sys" + }], + "intro_mclassdefs": [{ + "full_name": "test_prog$Starter" + }, { + "full_name": "test_prog$Sys" + }], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::game" + }] +} +{ + "name": "test_prog-m", + "class_name": "MModule", + "full_name": "test_prog-m", + "mdoc": null, + "visibility": "public", + "modifiers": ["module"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "mpackage": null, + "mgroup": null, + "intro_mclasses": [], + "mclassdefs": [], + "intro_mclassdefs": [], + "redef_mclassdefs": [], + "imports": [{ + "full_name": "test_prog::test_prog" + }] +} diff --git a/src/model/test_model_json.sav/test_packages_to_full_json.res b/src/model/test_model_json.sav/test_packages_to_full_json.res new file mode 100644 index 0000000000..81a0caed18 --- /dev/null +++ b/src/model/test_model_json.sav/test_packages_to_full_json.res @@ -0,0 +1,70 @@ +{ + "name": "test_prog", + "class_name": "MPackage", + "full_name": "test_prog", + "mdoc": { + "content": "Test program for model tools.\n\nThis program creates a fake model that can be used to test tools like:\n\n* `nitdoc`\n* `nitmetrics`\n* `nitx`\n* or others `modelbuilder`.\n\nAn image:\n\n![Tinks3D](../../contrib/tinks/doc/tinks3d.png)", + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 12, + "line_start": 1, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["package"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "root": { + "full_name": "test_prog>" + }, + "mgroups": [{ + "full_name": "test_prog>" + }, { + "full_name": "test_prog>game>" + }, { + "full_name": "test_prog>platform>" + }, { + "full_name": "test_prog>rpg>" + }], + "ini": { + "upstream.issues": "https://github.com/nitlang/nit/issues", + "upstream.homepage": "http://nitlanguage.org", + "upstream.git.directory": "tests/test_prog", + "upstream.browse": "https://github.com/nitlang/nit/tree/master/tests/test_prog", + "source.exclude": "game/excluded.nit:game/excluded_dir", + "package.license": "Apache-2.0", + "package.more_contributors": "Riri , Fifi (http://www.example.com/~fifi), Loulou", + "package.maintainer": "John Doe (http://www.example.com/~jdoe), Spider-Man", + "package.tags": "test,game", + "package.version": "0.1", + "package.name": "test_prog" + } +} +{ + "name": "excluded", + "class_name": "MPackage", + "full_name": "excluded", + "mdoc": null, + "visibility": "public", + "modifiers": ["package"], + "location": { + "column_end": 0, + "column_start": 0, + "line_end": 0, + "line_start": 0, + "file": "test_location" + }, + "root": { + "full_name": "excluded>" + }, + "mgroups": [{ + "full_name": "excluded>" + }] +} diff --git a/src/model/test_model_json.sav/test_propdefs_to_full_json.res b/src/model/test_model_json.sav/test_propdefs_to_full_json.res new file mode 100644 index 0000000000..167ec94a85 --- /dev/null +++ b/src/model/test_model_json.sav/test_propdefs_to_full_json.res @@ -0,0 +1,4032 @@ +{ + "name": "OTHER", + "class_name": "MVirtualTypeDef", + "full_name": "test_prog$Object$OTHER", + "mdoc": { + "content": "Used for comparisons.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "type"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Object" + }, + "mproperty": { + "full_name": "test_prog::Object::OTHER" + }, + "intro": { + "full_name": "test_prog$Object$OTHER" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "bound": { + "full_name": "nullable test_prog::Object" + }, + "is_fixed": false +} +{ + "name": "==", + "class_name": "MMethodDef", + "full_name": "test_prog$Object$==", + "mdoc": { + "content": "Is `other` equqls to `self`?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 37, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Object" + }, + "mproperty": { + "full_name": "test_prog::Object::==" + }, + "intro": { + "full_name": "test_prog$Object$==" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "other", + "mtype": { + "full_name": "test_prog::Object::OTHER" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "!=", + "class_name": "MMethodDef", + "full_name": "test_prog$Object$!=", + "mdoc": { + "content": "Is `other` different from `self`?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 55, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Object" + }, + "mproperty": { + "full_name": "test_prog::Object::!=" + }, + "intro": { + "full_name": "test_prog$Object$!=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "other", + "mtype": { + "full_name": "test_prog::Object::OTHER" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Object$init", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "init"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 30, + "line_start": 20, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Object" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 12, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Warrior$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 46, + "line_start": 42, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Warrior" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Magician$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 57, + "line_start": 53, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Magician" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Alcoholic$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 68, + "line_start": 64, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Alcoholic" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 12, + "column_start": 2, + "line_end": 44, + "line_start": 44, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Human$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 55, + "line_start": 51, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Human" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Dwarf$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 66, + "line_start": 62, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Dwarf" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Elf$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 77, + "line_start": 73, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Elf" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["redef", "init"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 68, + "line_start": 21, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Object::init" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "unary -", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$unary -", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 21, + "column_start": 2, + "line_end": 34, + "line_start": 34, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::unary -" + }, + "intro": { + "full_name": "test_prog$Int$unary -" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "+", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$+", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::+" + }, + "intro": { + "full_name": "test_prog$Int$+" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "-", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$-", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::-" + }, + "intro": { + "full_name": "test_prog$Int$-" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "*", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$*", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::*" + }, + "intro": { + "full_name": "test_prog$Int$*" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "/", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$/", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 38, + "line_start": 38, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::/" + }, + "intro": { + "full_name": "test_prog$Int$/" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": ">", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$>", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 30, + "column_start": 2, + "line_end": 39, + "line_start": 39, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::>" + }, + "intro": { + "full_name": "test_prog$Int$>" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "to_f", + "class_name": "MMethodDef", + "full_name": "test_prog$Int$to_f", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 26, + "column_start": 2, + "line_end": 40, + "line_start": 40, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Int" + }, + "mproperty": { + "full_name": "test_prog::Int::to_f" + }, + "intro": { + "full_name": "test_prog$Int$to_f" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "+", + "class_name": "MMethodDef", + "full_name": "test_prog$Float$+", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 45, + "line_start": 45, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Float" + }, + "mproperty": { + "full_name": "test_prog::Float::+" + }, + "intro": { + "full_name": "test_prog$Float$+" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "-", + "class_name": "MMethodDef", + "full_name": "test_prog$Float$-", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 46, + "line_start": 46, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Float" + }, + "mproperty": { + "full_name": "test_prog::Float::-" + }, + "intro": { + "full_name": "test_prog$Float$-" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "*", + "class_name": "MMethodDef", + "full_name": "test_prog$Float$*", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 47, + "line_start": 47, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Float" + }, + "mproperty": { + "full_name": "test_prog::Float::*" + }, + "intro": { + "full_name": "test_prog$Float$*" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "/", + "class_name": "MMethodDef", + "full_name": "test_prog$Float$/", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 48, + "line_start": 48, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Float" + }, + "mproperty": { + "full_name": "test_prog::Float::/" + }, + "intro": { + "full_name": "test_prog$Float$/" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": ">", + "class_name": "MMethodDef", + "full_name": "test_prog$Float$>", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 32, + "column_start": 2, + "line_end": 49, + "line_start": 49, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Float" + }, + "mproperty": { + "full_name": "test_prog::Float::>" + }, + "intro": { + "full_name": "test_prog$Float$>" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mmodule": { + "full_name": "test_prog::platform" + }, + "mgroup": { + "full_name": "test_prog>platform>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "_strength_bonus", + "class_name": "MAttributeDef", + "full_name": "test_prog$Career$_strength_bonus", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 31, + "line_start": 31, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::careers::Career::_strength_bonus" + }, + "intro": { + "full_name": "test_prog$Career$_strength_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "strength_bonus", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$strength_bonus", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 31, + "line_start": 31, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Career::strength_bonus" + }, + "intro": { + "full_name": "test_prog$Career$strength_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "strength_bonus=", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$strength_bonus=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 31, + "line_start": 31, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Career::strength_bonus=" + }, + "intro": { + "full_name": "test_prog$Career$strength_bonus=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "strength_bonus", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_endurance_bonus", + "class_name": "MAttributeDef", + "full_name": "test_prog$Career$_endurance_bonus", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 25, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::careers::Career::_endurance_bonus" + }, + "intro": { + "full_name": "test_prog$Career$_endurance_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "endurance_bonus", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$endurance_bonus", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 25, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Career::endurance_bonus" + }, + "intro": { + "full_name": "test_prog$Career$endurance_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "endurance_bonus=", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$endurance_bonus=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 25, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Career::endurance_bonus=" + }, + "intro": { + "full_name": "test_prog$Career$endurance_bonus=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "endurance_bonus", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_intelligence_bonus", + "class_name": "MAttributeDef", + "full_name": "test_prog$Career$_intelligence_bonus", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 33, + "line_start": 33, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::careers::Career::_intelligence_bonus" + }, + "intro": { + "full_name": "test_prog$Career$_intelligence_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "intelligence_bonus", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$intelligence_bonus", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 33, + "line_start": 33, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Career::intelligence_bonus" + }, + "intro": { + "full_name": "test_prog$Career$intelligence_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "intelligence_bonus=", + "class_name": "MMethodDef", + "full_name": "test_prog$Career$intelligence_bonus=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 33, + "line_start": 33, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Career" + }, + "mproperty": { + "full_name": "test_prog::Career::intelligence_bonus=" + }, + "intro": { + "full_name": "test_prog$Career$intelligence_bonus=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mmodule": { + "full_name": "test_prog::careers" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "intelligence_bonus", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_base_strength", + "class_name": "MAttributeDef", + "full_name": "test_prog$Race$_base_strength", + "mdoc": { + "content": "Used to represents how strong the race is.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 23, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::races::Race::_base_strength" + }, + "intro": { + "full_name": "test_prog$Race$_base_strength" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "base_strength", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$base_strength", + "mdoc": { + "content": "Used to represents how strong the race is.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 23, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Race::base_strength" + }, + "intro": { + "full_name": "test_prog$Race$base_strength" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "base_strength=", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$base_strength=", + "mdoc": { + "content": "Used to represents how strong the race is.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 23, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Race::base_strength=" + }, + "intro": { + "full_name": "test_prog$Race$base_strength=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "base_strength", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_base_endurance", + "class_name": "MAttributeDef", + "full_name": "test_prog$Race$_base_endurance", + "mdoc": { + "content": "Used to represents how the race can absorb damage.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::races::Race::_base_endurance" + }, + "intro": { + "full_name": "test_prog$Race$_base_endurance" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "base_endurance", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$base_endurance", + "mdoc": { + "content": "Used to represents how the race can absorb damage.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Race::base_endurance" + }, + "intro": { + "full_name": "test_prog$Race$base_endurance" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "base_endurance=", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$base_endurance=", + "mdoc": { + "content": "Used to represents how the race can absorb damage.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Race::base_endurance=" + }, + "intro": { + "full_name": "test_prog$Race$base_endurance=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "base_endurance", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_base_intelligence", + "class_name": "MAttributeDef", + "full_name": "test_prog$Race$_base_intelligence", + "mdoc": { + "content": "Is this race smart?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::races::Race::_base_intelligence" + }, + "intro": { + "full_name": "test_prog$Race$_base_intelligence" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "base_intelligence", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$base_intelligence", + "mdoc": { + "content": "Is this race smart?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Race::base_intelligence" + }, + "intro": { + "full_name": "test_prog$Race$base_intelligence" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "base_intelligence=", + "class_name": "MMethodDef", + "full_name": "test_prog$Race$base_intelligence=", + "mdoc": { + "content": "Is this race smart?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Race" + }, + "mproperty": { + "full_name": "test_prog::Race::base_intelligence=" + }, + "intro": { + "full_name": "test_prog$Race$base_intelligence=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mmodule": { + "full_name": "test_prog::races" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "base_intelligence", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_race", + "class_name": "MAttributeDef", + "full_name": "test_prog$Character$_race", + "mdoc": { + "content": "The `Race` of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 15, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::character::Character::_race" + }, + "intro": { + "full_name": "test_prog$Character$_race" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Race" + } +} +{ + "name": "race", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$race", + "mdoc": { + "content": "The `Race` of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 15, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::race" + }, + "intro": { + "full_name": "test_prog$Character$race" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Race" + }, + "vararg_rank": -1 + } +} +{ + "name": "race=", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$race=", + "mdoc": { + "content": "The `Race` of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 15, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::race=" + }, + "intro": { + "full_name": "test_prog$Character$race=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "race", + "mtype": { + "full_name": "test_prog::Race" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_career", + "class_name": "MAttributeDef", + "full_name": "test_prog$Character$_career", + "mdoc": { + "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 47, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::character::Character::_career" + }, + "intro": { + "full_name": "test_prog$Character$_career" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "nullable test_prog::Career" + } +} +{ + "name": "career", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$career", + "mdoc": { + "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 47, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::career" + }, + "intro": { + "full_name": "test_prog$Character$career" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "nullable test_prog::Career" + }, + "vararg_rank": -1 + } +} +{ + "name": "career=", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$career=", + "mdoc": { + "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 47, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::career=" + }, + "intro": { + "full_name": "test_prog$Character$career=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "career", + "mtype": { + "full_name": "nullable test_prog::Career" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "quit", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$quit", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 33, + "line_start": 31, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::quit" + }, + "intro": { + "full_name": "test_prog$Character$quit" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_name", + "class_name": "MAttributeDef", + "full_name": "test_prog$Character$_name", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::character::Character::_name" + }, + "intro": { + "full_name": "test_prog$Character$_name" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::String" + } +} +{ + "name": "name", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$name", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::name" + }, + "intro": { + "full_name": "test_prog$Character$name" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::String" + }, + "vararg_rank": -1 + } +} +{ + "name": "name=", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$name=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::name=" + }, + "intro": { + "full_name": "test_prog$Character$name=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "name", + "mtype": { + "full_name": "test_prog::String" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_age", + "class_name": "MAttributeDef", + "full_name": "test_prog$Character$_age", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 13, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::character::Character::_age" + }, + "intro": { + "full_name": "test_prog$Character$_age" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "age", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$age", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 13, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::age" + }, + "intro": { + "full_name": "test_prog$Character$age" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "age=", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$age=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 13, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::age=" + }, + "intro": { + "full_name": "test_prog$Character$age=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "age", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_sex", + "class_name": "MAttributeDef", + "full_name": "test_prog$Character$_sex", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 14, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::character::Character::_sex" + }, + "intro": { + "full_name": "test_prog$Character$_sex" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Bool" + } +} +{ + "name": "sex", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$sex", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 14, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::sex" + }, + "intro": { + "full_name": "test_prog$Character$sex" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "sex=", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$sex=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 14, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::sex=" + }, + "intro": { + "full_name": "test_prog$Character$sex=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "sex", + "mtype": { + "full_name": "test_prog::Bool" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "total_strengh", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$total_strengh", + "mdoc": { + "content": "The actual strength of the character.\n\nReturns `race.base_strength + career.strength_bonus` or just `race.base_strength` is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 39, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 45, + "line_start": 39, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::total_strengh" + }, + "intro": { + "full_name": "test_prog$Character$total_strengh" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "total_endurance", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$total_endurance", + "mdoc": { + "content": "The actual endurance of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 48, + "line_start": 47, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 51, + "line_start": 47, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::total_endurance" + }, + "intro": { + "full_name": "test_prog$Character$total_endurance" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "total_intelligence", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$total_intelligence", + "mdoc": { + "content": "The acutal intelligence of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 54, + "line_start": 53, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 57, + "line_start": 53, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::total_intelligence" + }, + "intro": { + "full_name": "test_prog$Character$total_intelligence" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "max_health", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$max_health", + "mdoc": { + "content": "Maximum health of the character.\n\nBased on `total endurance * 10`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 62, + "line_start": 59, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 51, + "column_start": 2, + "line_end": 62, + "line_start": 59, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::max_health" + }, + "intro": { + "full_name": "test_prog$Character$max_health" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "_health", + "class_name": "MAttributeDef", + "full_name": "test_prog$Character$_health", + "mdoc": { + "content": "The current `health` of the character.\n\nStarts at `max_health`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::character::Character::_health" + }, + "intro": { + "full_name": "test_prog$Character$_health" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "health", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$health", + "mdoc": { + "content": "The current `health` of the character.\n\nStarts at `max_health`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::health" + }, + "intro": { + "full_name": "test_prog$Character$health" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "health=", + "class_name": "MMethodDef", + "full_name": "test_prog$Character$health=", + "mdoc": { + "content": "The current `health` of the character.\n\nStarts at `max_health`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Character" + }, + "mproperty": { + "full_name": "test_prog::Character::health=" + }, + "intro": { + "full_name": "test_prog$Character$health=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mmodule": { + "full_name": "test_prog::character" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "health", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "dps", + "class_name": "MMethodDef", + "full_name": "test_prog$Weapon$dps", + "mdoc": { + "content": "Damage per second inflicted by this weapon.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Weapon" + }, + "mproperty": { + "full_name": "test_prog::Weapon::dps" + }, + "intro": { + "full_name": "test_prog$Weapon$dps" + }, + "intro_mclassdef": { + "full_name": "test_prog$Weapon" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "dps", + "class_name": "MMethodDef", + "full_name": "test_prog::combat$Dwarf$Weapon::dps", + "mdoc": { + "content": "Dwarf `dps` are based on the dwarf `base_endurance` (represents weight here)", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 66, + "line_start": 65, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["redef", "fun"], + "location": { + "column_end": 51, + "column_start": 2, + "line_end": 66, + "line_start": 65, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog::combat$Dwarf" + }, + "mproperty": { + "full_name": "test_prog::Weapon::dps" + }, + "intro": { + "full_name": "test_prog$Weapon$dps" + }, + "intro_mclassdef": { + "full_name": "test_prog$Weapon" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "hit_points", + "class_name": "MMethodDef", + "full_name": "test_prog$Combatable$hit_points", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 32, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mproperty": { + "full_name": "test_prog::Combatable::hit_points" + }, + "intro": { + "full_name": "test_prog$Combatable$hit_points" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "hit_points", + "class_name": "MMethodDef", + "full_name": "test_prog::combat$Character$Combatable::hit_points", + "mdoc": { + "content": "Use character `health` to determines hit_points.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 58, + "line_start": 57, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["redef", "fun"], + "location": { + "column_end": 38, + "column_start": 2, + "line_end": 58, + "line_start": 57, + "file": "test_location" + }, + "is_intro": false, + "mclassdef": { + "full_name": "test_prog::combat$Character" + }, + "mproperty": { + "full_name": "test_prog::Combatable::hit_points" + }, + "intro": { + "full_name": "test_prog$Combatable$hit_points" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "attack", + "class_name": "MMethodDef", + "full_name": "test_prog$Combatable$attack", + "mdoc": { + "content": "A `Combatable` can attack a `target` that is also a `Combatable`.\n\nAttack the `target` using `wepaon` and returns the number of inflicted hit points.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 37, + "line_start": 34, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 64, + "column_start": 2, + "line_end": 37, + "line_start": 34, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mproperty": { + "full_name": "test_prog::Combatable::attack" + }, + "intro": { + "full_name": "test_prog$Combatable$attack" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 2, + "mparams": [{ + "is_vararg": false, + "name": "target", + "mtype": { + "full_name": "test_prog::Combatable" + } + }, { + "is_vararg": false, + "name": "weapon", + "mtype": { + "full_name": "test_prog::Weapon" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "direct_attack", + "class_name": "MMethodDef", + "full_name": "test_prog$Combatable$direct_attack", + "mdoc": { + "content": "Like `attack` but cannot be defended.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 40, + "line_start": 39, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 71, + "column_start": 2, + "line_end": 40, + "line_start": 39, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mproperty": { + "full_name": "test_prog::Combatable::direct_attack" + }, + "intro": { + "full_name": "test_prog$Combatable$direct_attack" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 2, + "mparams": [{ + "is_vararg": false, + "name": "target", + "mtype": { + "full_name": "test_prog::Combatable" + } + }, { + "is_vararg": false, + "name": "weapon", + "mtype": { + "full_name": "test_prog::Weapon" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "defend", + "class_name": "MMethodDef", + "full_name": "test_prog$Combatable$defend", + "mdoc": { + "content": "`Combatable` can defend against attacks.\n\nDefends against a number of received hit points and return the number of pared hit points.\n\n@param hit: damage received.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 47, + "line_start": 42, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 38, + "column_start": 2, + "line_end": 47, + "line_start": 42, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mproperty": { + "full_name": "test_prog::Combatable::defend" + }, + "intro": { + "full_name": "test_prog$Combatable$defend" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "hit", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "is_dead", + "class_name": "MMethodDef", + "full_name": "test_prog$Combatable$is_dead", + "mdoc": { + "content": "Is the character still have hit_points?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 50, + "line_start": 49, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 43, + "column_start": 2, + "line_end": 50, + "line_start": 49, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mproperty": { + "full_name": "test_prog::Combatable::is_dead" + }, + "intro": { + "full_name": "test_prog$Combatable$is_dead" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mmodule": { + "full_name": "test_prog::combat" + }, + "mgroup": { + "full_name": "test_prog>rpg>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "player_characters", + "class_name": "MMethodDef", + "full_name": "test_prog$Game$player_characters", + "mdoc": { + "content": "Characters played by human players.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 51, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Game" + }, + "mproperty": { + "full_name": "test_prog::Game::player_characters" + }, + "intro": { + "full_name": "test_prog$Game$player_characters" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mmodule": { + "full_name": "test_prog::game" + }, + "mgroup": { + "full_name": "test_prog>game>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::List[test_prog::Character]" + }, + "vararg_rank": -1 + } +} +{ + "name": "computer_characters", + "class_name": "MMethodDef", + "full_name": "test_prog$Game$computer_characters", + "mdoc": { + "content": "Characters players by computer.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 53, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Game" + }, + "mproperty": { + "full_name": "test_prog::Game::computer_characters" + }, + "intro": { + "full_name": "test_prog$Game$computer_characters" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mmodule": { + "full_name": "test_prog::game" + }, + "mgroup": { + "full_name": "test_prog>game>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::List[test_prog::Character]" + }, + "vararg_rank": -1 + } +} +{ + "name": "start_game", + "class_name": "MMethodDef", + "full_name": "test_prog$Game$start_game", + "mdoc": { + "content": "Start the game.\n\nYou have to implement that method!", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 34, + "line_start": 31, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 34, + "line_start": 31, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Game" + }, + "mproperty": { + "full_name": "test_prog::Game::start_game" + }, + "intro": { + "full_name": "test_prog$Game$start_game" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mmodule": { + "full_name": "test_prog::game" + }, + "mgroup": { + "full_name": "test_prog>game>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "pause_game", + "class_name": "MMethodDef", + "full_name": "test_prog$Game$pause_game", + "mdoc": { + "content": "Pause the game.\n\nYou have to implement that method!", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 36, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 39, + "line_start": 36, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Game" + }, + "mproperty": { + "full_name": "test_prog::Game::pause_game" + }, + "intro": { + "full_name": "test_prog$Game$pause_game" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mmodule": { + "full_name": "test_prog::game" + }, + "mgroup": { + "full_name": "test_prog>game>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "stop_game", + "class_name": "MMethodDef", + "full_name": "test_prog$Game$stop_game", + "mdoc": { + "content": "Stop the game.\n\nYou have to implement that method!", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 44, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 26, + "column_start": 2, + "line_end": 44, + "line_start": 41, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Game" + }, + "mproperty": { + "full_name": "test_prog::Game::stop_game" + }, + "intro": { + "full_name": "test_prog$Game$stop_game" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mmodule": { + "full_name": "test_prog::game" + }, + "mgroup": { + "full_name": "test_prog>game>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "start", + "class_name": "MMethodDef", + "full_name": "test_prog$Starter$start", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 22, + "line_start": 22, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Starter" + }, + "mproperty": { + "full_name": "test_prog::Starter::start" + }, + "intro": { + "full_name": "test_prog$Starter$start" + }, + "intro_mclassdef": { + "full_name": "test_prog$Starter" + }, + "mmodule": { + "full_name": "test_prog::test_prog" + }, + "mgroup": { + "full_name": "test_prog>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "main", + "class_name": "MMethodDef", + "full_name": "test_prog$Sys$main", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 13, + "column_start": 1, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "is_intro": true, + "mclassdef": { + "full_name": "test_prog$Sys" + }, + "mproperty": { + "full_name": "test_prog::Sys::main" + }, + "intro": { + "full_name": "test_prog$Sys$main" + }, + "intro_mclassdef": { + "full_name": "test_prog$Sys" + }, + "mmodule": { + "full_name": "test_prog::test_prog" + }, + "mgroup": { + "full_name": "test_prog>" + }, + "mpackage": { + "full_name": "test_prog" + }, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} diff --git a/src/model/test_model_json.sav/test_props_to_full_json.res b/src/model/test_model_json.sav/test_props_to_full_json.res new file mode 100644 index 0000000000..d61dd810a9 --- /dev/null +++ b/src/model/test_model_json.sav/test_props_to_full_json.res @@ -0,0 +1,3128 @@ +{ + "name": "OTHER", + "class_name": "MVirtualTypeProp", + "full_name": "test_prog::Object::OTHER", + "mdoc": { + "content": "Used for comparisons.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "type"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Object$OTHER" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mpropdefs": [{ + "full_name": "test_prog$Object$OTHER" + }], + "intro_mclass": { + "full_name": "test_prog::Object" + }, + "mpackage": { + "full_name": "test_prog" + }, + "mvirtualtype": { + "full_name": "test_prog::Object::OTHER" + }, + "bound": { + "full_name": "nullable test_prog::Object" + } +} +{ + "name": "==", + "class_name": "MMethod", + "full_name": "test_prog::Object::==", + "mdoc": { + "content": "Is `other` equqls to `self`?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 37, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Object$==" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mpropdefs": [{ + "full_name": "test_prog$Object$==" + }], + "intro_mclass": { + "full_name": "test_prog::Object" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "other", + "mtype": { + "full_name": "test_prog::Object::OTHER" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "!=", + "class_name": "MMethod", + "full_name": "test_prog::Object::!=", + "mdoc": { + "content": "Is `other` different from `self`?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 55, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Object$!=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mpropdefs": [{ + "full_name": "test_prog$Object$!=" + }], + "intro_mclass": { + "full_name": "test_prog::Object" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "other", + "mtype": { + "full_name": "test_prog::Object::OTHER" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "init", + "class_name": "MMethod", + "full_name": "test_prog::Object::init", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "init"], + "location": { + "column_end": 3, + "column_start": 1, + "line_end": 30, + "line_start": 20, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Object$init" + }, + "intro_mclassdef": { + "full_name": "test_prog$Object" + }, + "mpropdefs": [{ + "full_name": "test_prog$Object$init" + }, { + "full_name": "test_prog$Career$Object::init" + }, { + "full_name": "test_prog$Warrior$Object::init" + }, { + "full_name": "test_prog$Magician$Object::init" + }, { + "full_name": "test_prog$Alcoholic$Object::init" + }, { + "full_name": "test_prog$Race$Object::init" + }, { + "full_name": "test_prog$Human$Object::init" + }, { + "full_name": "test_prog$Dwarf$Object::init" + }, { + "full_name": "test_prog$Elf$Object::init" + }, { + "full_name": "test_prog$Character$Object::init" + }], + "intro_mclass": { + "full_name": "test_prog::Object" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": true, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "unary -", + "class_name": "MMethod", + "full_name": "test_prog::Int::unary -", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 21, + "column_start": 2, + "line_end": 34, + "line_start": 34, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$unary -" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$unary -" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "+", + "class_name": "MMethod", + "full_name": "test_prog::Int::+", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$+" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$+" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "-", + "class_name": "MMethod", + "full_name": "test_prog::Int::-", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$-" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$-" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "*", + "class_name": "MMethod", + "full_name": "test_prog::Int::*", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$*" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$*" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "/", + "class_name": "MMethod", + "full_name": "test_prog::Int::/", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 38, + "line_start": 38, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$/" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$/" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": ">", + "class_name": "MMethod", + "full_name": "test_prog::Int::>", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 30, + "column_start": 2, + "line_end": 39, + "line_start": 39, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$>" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$>" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "i", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "to_f", + "class_name": "MMethod", + "full_name": "test_prog::Int::to_f", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 26, + "column_start": 2, + "line_end": 40, + "line_start": 40, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Int$to_f" + }, + "intro_mclassdef": { + "full_name": "test_prog$Int" + }, + "mpropdefs": [{ + "full_name": "test_prog$Int$to_f" + }], + "intro_mclass": { + "full_name": "test_prog::Int" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "+", + "class_name": "MMethod", + "full_name": "test_prog::Float::+", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 45, + "line_start": 45, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Float$+" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mpropdefs": [{ + "full_name": "test_prog$Float$+" + }], + "intro_mclass": { + "full_name": "test_prog::Float" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "-", + "class_name": "MMethod", + "full_name": "test_prog::Float::-", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 46, + "line_start": 46, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Float$-" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mpropdefs": [{ + "full_name": "test_prog$Float$-" + }], + "intro_mclass": { + "full_name": "test_prog::Float" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "*", + "class_name": "MMethod", + "full_name": "test_prog::Float::*", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 47, + "line_start": 47, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Float$*" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mpropdefs": [{ + "full_name": "test_prog$Float$*" + }], + "intro_mclass": { + "full_name": "test_prog::Float" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "/", + "class_name": "MMethod", + "full_name": "test_prog::Float::/", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 33, + "column_start": 2, + "line_end": 48, + "line_start": 48, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Float$/" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mpropdefs": [{ + "full_name": "test_prog$Float$/" + }], + "intro_mclass": { + "full_name": "test_prog::Float" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": ">", + "class_name": "MMethod", + "full_name": "test_prog::Float::>", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "intern", "fun"], + "location": { + "column_end": 32, + "column_start": 2, + "line_end": 49, + "line_start": 49, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Float$>" + }, + "intro_mclassdef": { + "full_name": "test_prog$Float" + }, + "mpropdefs": [{ + "full_name": "test_prog$Float$>" + }], + "intro_mclass": { + "full_name": "test_prog::Float" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "f", + "mtype": { + "full_name": "test_prog::Float" + } + }], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "_strength_bonus", + "class_name": "MAttribute", + "full_name": "test_prog::careers::Career::_strength_bonus", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 31, + "line_start": 31, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$_strength_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$_strength_bonus" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "strength_bonus", + "class_name": "MMethod", + "full_name": "test_prog::Career::strength_bonus", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 31, + "line_start": 31, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$strength_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$strength_bonus" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "strength_bonus=", + "class_name": "MMethod", + "full_name": "test_prog::Career::strength_bonus=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 31, + "line_start": 31, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$strength_bonus=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$strength_bonus=" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "strength_bonus", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_endurance_bonus", + "class_name": "MAttribute", + "full_name": "test_prog::careers::Career::_endurance_bonus", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 25, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$_endurance_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$_endurance_bonus" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "endurance_bonus", + "class_name": "MMethod", + "full_name": "test_prog::Career::endurance_bonus", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 25, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$endurance_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$endurance_bonus" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "endurance_bonus=", + "class_name": "MMethod", + "full_name": "test_prog::Career::endurance_bonus=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 25, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$endurance_bonus=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$endurance_bonus=" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "endurance_bonus", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_intelligence_bonus", + "class_name": "MAttribute", + "full_name": "test_prog::careers::Career::_intelligence_bonus", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 33, + "line_start": 33, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$_intelligence_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$_intelligence_bonus" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "intelligence_bonus", + "class_name": "MMethod", + "full_name": "test_prog::Career::intelligence_bonus", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 33, + "line_start": 33, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$intelligence_bonus" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$intelligence_bonus" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "intelligence_bonus=", + "class_name": "MMethod", + "full_name": "test_prog::Career::intelligence_bonus=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 28, + "column_start": 2, + "line_end": 33, + "line_start": 33, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Career$intelligence_bonus=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Career" + }, + "mpropdefs": [{ + "full_name": "test_prog$Career$intelligence_bonus=" + }], + "intro_mclass": { + "full_name": "test_prog::Career" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "intelligence_bonus", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_base_strength", + "class_name": "MAttribute", + "full_name": "test_prog::races::Race::_base_strength", + "mdoc": { + "content": "Used to represents how strong the race is.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 23, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$_base_strength" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$_base_strength" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "base_strength", + "class_name": "MMethod", + "full_name": "test_prog::Race::base_strength", + "mdoc": { + "content": "Used to represents how strong the race is.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 23, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$base_strength" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$base_strength" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "base_strength=", + "class_name": "MMethod", + "full_name": "test_prog::Race::base_strength=", + "mdoc": { + "content": "Used to represents how strong the race is.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 23, + "column_start": 2, + "line_end": 36, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$base_strength=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$base_strength=" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "base_strength", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_base_endurance", + "class_name": "MAttribute", + "full_name": "test_prog::races::Race::_base_endurance", + "mdoc": { + "content": "Used to represents how the race can absorb damage.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$_base_endurance" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$_base_endurance" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "base_endurance", + "class_name": "MMethod", + "full_name": "test_prog::Race::base_endurance", + "mdoc": { + "content": "Used to represents how the race can absorb damage.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$base_endurance" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$base_endurance" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "base_endurance=", + "class_name": "MMethod", + "full_name": "test_prog::Race::base_endurance=", + "mdoc": { + "content": "Used to represents how the race can absorb damage.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 24, + "column_start": 2, + "line_end": 39, + "line_start": 38, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$base_endurance=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$base_endurance=" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "base_endurance", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_base_intelligence", + "class_name": "MAttribute", + "full_name": "test_prog::races::Race::_base_intelligence", + "mdoc": { + "content": "Is this race smart?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$_base_intelligence" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$_base_intelligence" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "base_intelligence", + "class_name": "MMethod", + "full_name": "test_prog::Race::base_intelligence", + "mdoc": { + "content": "Is this race smart?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$base_intelligence" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$base_intelligence" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "base_intelligence=", + "class_name": "MMethod", + "full_name": "test_prog::Race::base_intelligence=", + "mdoc": { + "content": "Is this race smart?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 42, + "line_start": 41, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Race$base_intelligence=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Race" + }, + "mpropdefs": [{ + "full_name": "test_prog$Race$base_intelligence=" + }], + "intro_mclass": { + "full_name": "test_prog::Race" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "base_intelligence", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_race", + "class_name": "MAttribute", + "full_name": "test_prog::character::Character::_race", + "mdoc": { + "content": "The `Race` of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 15, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$_race" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_race" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Race" + } +} +{ + "name": "race", + "class_name": "MMethod", + "full_name": "test_prog::Character::race", + "mdoc": { + "content": "The `Race` of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 15, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$race" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$race" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Race" + }, + "vararg_rank": -1 + } +} +{ + "name": "race=", + "class_name": "MMethod", + "full_name": "test_prog::Character::race=", + "mdoc": { + "content": "The `Race` of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 15, + "column_start": 2, + "line_end": 25, + "line_start": 24, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$race=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$race=" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "race", + "mtype": { + "full_name": "test_prog::Race" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_career", + "class_name": "MAttribute", + "full_name": "test_prog::character::Character::_career", + "mdoc": { + "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 47, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$_career" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_career" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "nullable test_prog::Career" + } +} +{ + "name": "career", + "class_name": "MMethod", + "full_name": "test_prog::Character::career", + "mdoc": { + "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 47, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$career" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$career" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "nullable test_prog::Career" + }, + "vararg_rank": -1 + } +} +{ + "name": "career=", + "class_name": "MMethod", + "full_name": "test_prog::Character::career=", + "mdoc": { + "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 47, + "column_start": 2, + "line_end": 29, + "line_start": 27, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$career=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$career=" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "career", + "mtype": { + "full_name": "nullable test_prog::Career" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "quit", + "class_name": "MMethod", + "full_name": "test_prog::Character::quit", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 33, + "line_start": 31, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$quit" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$quit" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_name", + "class_name": "MAttribute", + "full_name": "test_prog::character::Character::_name", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$_name" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_name" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::String" + } +} +{ + "name": "name", + "class_name": "MMethod", + "full_name": "test_prog::Character::name", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$name" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$name" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::String" + }, + "vararg_rank": -1 + } +} +{ + "name": "name=", + "class_name": "MMethod", + "full_name": "test_prog::Character::name=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 35, + "line_start": 35, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$name=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$name=" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "name", + "mtype": { + "full_name": "test_prog::String" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_age", + "class_name": "MAttribute", + "full_name": "test_prog::character::Character::_age", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 13, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$_age" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_age" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "age", + "class_name": "MMethod", + "full_name": "test_prog::Character::age", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 13, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$age" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$age" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "age=", + "class_name": "MMethod", + "full_name": "test_prog::Character::age=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 13, + "column_start": 2, + "line_end": 36, + "line_start": 36, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$age=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$age=" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "age", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "_sex", + "class_name": "MAttribute", + "full_name": "test_prog::character::Character::_sex", + "mdoc": null, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 14, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$_sex" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_sex" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Bool" + } +} +{ + "name": "sex", + "class_name": "MMethod", + "full_name": "test_prog::Character::sex", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 14, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$sex" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$sex" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "sex=", + "class_name": "MMethod", + "full_name": "test_prog::Character::sex=", + "mdoc": null, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 14, + "column_start": 2, + "line_end": 37, + "line_start": 37, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$sex=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$sex=" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "sex", + "mtype": { + "full_name": "test_prog::Bool" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "total_strengh", + "class_name": "MMethod", + "full_name": "test_prog::Character::total_strengh", + "mdoc": { + "content": "The actual strength of the character.\n\nReturns `race.base_strength + career.strength_bonus` or just `race.base_strength` is unemployed.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 42, + "line_start": 39, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 45, + "line_start": 39, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$total_strengh" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$total_strengh" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "total_endurance", + "class_name": "MMethod", + "full_name": "test_prog::Character::total_endurance", + "mdoc": { + "content": "The actual endurance of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 48, + "line_start": 47, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 51, + "line_start": 47, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$total_endurance" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$total_endurance" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "total_intelligence", + "class_name": "MMethod", + "full_name": "test_prog::Character::total_intelligence", + "mdoc": { + "content": "The acutal intelligence of the character.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 54, + "line_start": 53, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 4, + "column_start": 2, + "line_end": 57, + "line_start": 53, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$total_intelligence" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$total_intelligence" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "max_health", + "class_name": "MMethod", + "full_name": "test_prog::Character::max_health", + "mdoc": { + "content": "Maximum health of the character.\n\nBased on `total endurance * 10`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 62, + "line_start": 59, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 51, + "column_start": 2, + "line_end": 62, + "line_start": 59, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$max_health" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$max_health" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "_health", + "class_name": "MAttribute", + "full_name": "test_prog::character::Character::_health", + "mdoc": { + "content": "The current `health` of the character.\n\nStarts at `max_health`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + } + }, + "visibility": "private", + "modifiers": ["private", "var"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$_health" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$_health" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "static_mtype": { + "full_name": "test_prog::Int" + } +} +{ + "name": "health", + "class_name": "MMethod", + "full_name": "test_prog::Character::health", + "mdoc": { + "content": "The current `health` of the character.\n\nStarts at `max_health`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$health" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$health" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "health=", + "class_name": "MMethod", + "full_name": "test_prog::Character::health=", + "mdoc": { + "content": "The current `health` of the character.\n\nStarts at `max_health`.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + } + }, + "visibility": "protected", + "modifiers": ["protected", "fun"], + "location": { + "column_end": 29, + "column_start": 2, + "line_end": 67, + "line_start": 64, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Character$health=" + }, + "intro_mclassdef": { + "full_name": "test_prog$Character" + }, + "mpropdefs": [{ + "full_name": "test_prog$Character$health=" + }], + "intro_mclass": { + "full_name": "test_prog::Character" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "health", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "dps", + "class_name": "MMethod", + "full_name": "test_prog::Weapon::dps", + "mdoc": { + "content": "Damage per second inflicted by this weapon.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 23, + "line_start": 22, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Weapon$dps" + }, + "intro_mclassdef": { + "full_name": "test_prog$Weapon" + }, + "mpropdefs": [{ + "full_name": "test_prog$Weapon$dps" + }, { + "full_name": "test_prog::combat$Dwarf$Weapon::dps" + }], + "intro_mclass": { + "full_name": "test_prog::Weapon" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Float" + }, + "vararg_rank": -1 + } +} +{ + "name": "hit_points", + "class_name": "MMethod", + "full_name": "test_prog::Combatable::hit_points", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 32, + "column_start": 2, + "line_end": 32, + "line_start": 32, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Combatable$hit_points" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mpropdefs": [{ + "full_name": "test_prog$Combatable$hit_points" + }, { + "full_name": "test_prog::combat$Character$Combatable::hit_points" + }], + "intro_mclass": { + "full_name": "test_prog::Combatable" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "attack", + "class_name": "MMethod", + "full_name": "test_prog::Combatable::attack", + "mdoc": { + "content": "A `Combatable` can attack a `target` that is also a `Combatable`.\n\nAttack the `target` using `wepaon` and returns the number of inflicted hit points.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 37, + "line_start": 34, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 64, + "column_start": 2, + "line_end": 37, + "line_start": 34, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Combatable$attack" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mpropdefs": [{ + "full_name": "test_prog$Combatable$attack" + }], + "intro_mclass": { + "full_name": "test_prog::Combatable" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 2, + "mparams": [{ + "is_vararg": false, + "name": "target", + "mtype": { + "full_name": "test_prog::Combatable" + } + }, { + "is_vararg": false, + "name": "weapon", + "mtype": { + "full_name": "test_prog::Weapon" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "direct_attack", + "class_name": "MMethod", + "full_name": "test_prog::Combatable::direct_attack", + "mdoc": { + "content": "Like `attack` but cannot be defended.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 40, + "line_start": 39, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 71, + "column_start": 2, + "line_end": 40, + "line_start": 39, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Combatable$direct_attack" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mpropdefs": [{ + "full_name": "test_prog$Combatable$direct_attack" + }], + "intro_mclass": { + "full_name": "test_prog::Combatable" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 2, + "mparams": [{ + "is_vararg": false, + "name": "target", + "mtype": { + "full_name": "test_prog::Combatable" + } + }, { + "is_vararg": false, + "name": "weapon", + "mtype": { + "full_name": "test_prog::Weapon" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "defend", + "class_name": "MMethod", + "full_name": "test_prog::Combatable::defend", + "mdoc": { + "content": "`Combatable` can defend against attacks.\n\nDefends against a number of received hit points and return the number of pared hit points.\n\n@param hit: damage received.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 47, + "line_start": 42, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 38, + "column_start": 2, + "line_end": 47, + "line_start": 42, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Combatable$defend" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mpropdefs": [{ + "full_name": "test_prog$Combatable$defend" + }], + "intro_mclass": { + "full_name": "test_prog::Combatable" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 1, + "mparams": [{ + "is_vararg": false, + "name": "hit", + "mtype": { + "full_name": "test_prog::Int" + } + }], + "return_mtype": { + "full_name": "test_prog::Int" + }, + "vararg_rank": -1 + } +} +{ + "name": "is_dead", + "class_name": "MMethod", + "full_name": "test_prog::Combatable::is_dead", + "mdoc": { + "content": "Is the character still have hit_points?", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 50, + "line_start": 49, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 43, + "column_start": 2, + "line_end": 50, + "line_start": 49, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Combatable$is_dead" + }, + "intro_mclassdef": { + "full_name": "test_prog$Combatable" + }, + "mpropdefs": [{ + "full_name": "test_prog$Combatable$is_dead" + }], + "intro_mclass": { + "full_name": "test_prog::Combatable" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::Bool" + }, + "vararg_rank": -1 + } +} +{ + "name": "player_characters", + "class_name": "MMethod", + "full_name": "test_prog::Game::player_characters", + "mdoc": { + "content": "Characters played by human players.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 51, + "column_start": 2, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Game$player_characters" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mpropdefs": [{ + "full_name": "test_prog$Game$player_characters" + }], + "intro_mclass": { + "full_name": "test_prog::Game" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::List[test_prog::Character]" + }, + "vararg_rank": -1 + } +} +{ + "name": "computer_characters", + "class_name": "MMethod", + "full_name": "test_prog::Game::computer_characters", + "mdoc": { + "content": "Characters players by computer.", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 53, + "column_start": 2, + "line_end": 29, + "line_start": 28, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Game$computer_characters" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mpropdefs": [{ + "full_name": "test_prog$Game$computer_characters" + }], + "intro_mclass": { + "full_name": "test_prog::Game" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": { + "full_name": "test_prog::List[test_prog::Character]" + }, + "vararg_rank": -1 + } +} +{ + "name": "start_game", + "class_name": "MMethod", + "full_name": "test_prog::Game::start_game", + "mdoc": { + "content": "Start the game.\n\nYou have to implement that method!", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 34, + "line_start": 31, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 34, + "line_start": 31, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Game$start_game" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mpropdefs": [{ + "full_name": "test_prog$Game$start_game" + }], + "intro_mclass": { + "full_name": "test_prog::Game" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "pause_game", + "class_name": "MMethod", + "full_name": "test_prog::Game::pause_game", + "mdoc": { + "content": "Pause the game.\n\nYou have to implement that method!", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 39, + "line_start": 36, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 27, + "column_start": 2, + "line_end": 39, + "line_start": 36, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Game$pause_game" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mpropdefs": [{ + "full_name": "test_prog$Game$pause_game" + }], + "intro_mclass": { + "full_name": "test_prog::Game" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "stop_game", + "class_name": "MMethod", + "full_name": "test_prog::Game::stop_game", + "mdoc": { + "content": "Stop the game.\n\nYou have to implement that method!", + "location": { + "column_end": 0, + "column_start": 2, + "line_end": 44, + "line_start": 41, + "file": "test_location" + } + }, + "visibility": "public", + "modifiers": ["public", "abstract", "fun"], + "location": { + "column_end": 26, + "column_start": 2, + "line_end": 44, + "line_start": 41, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Game$stop_game" + }, + "intro_mclassdef": { + "full_name": "test_prog$Game" + }, + "mpropdefs": [{ + "full_name": "test_prog$Game$stop_game" + }], + "intro_mclass": { + "full_name": "test_prog::Game" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "start", + "class_name": "MMethod", + "full_name": "test_prog::Starter::start", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 17, + "column_start": 2, + "line_end": 22, + "line_start": 22, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Starter$start" + }, + "intro_mclassdef": { + "full_name": "test_prog$Starter" + }, + "mpropdefs": [{ + "full_name": "test_prog$Starter$start" + }], + "intro_mclass": { + "full_name": "test_prog::Starter" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} +{ + "name": "main", + "class_name": "MMethod", + "full_name": "test_prog::Sys::main", + "mdoc": null, + "visibility": "public", + "modifiers": ["public", "fun"], + "location": { + "column_end": 13, + "column_start": 1, + "line_end": 26, + "line_start": 25, + "file": "test_location" + }, + "intro": { + "full_name": "test_prog$Sys$main" + }, + "intro_mclassdef": { + "full_name": "test_prog$Sys" + }, + "mpropdefs": [{ + "full_name": "test_prog$Sys$main" + }], + "intro_mclass": { + "full_name": "test_prog::Sys" + }, + "mpackage": { + "full_name": "test_prog" + }, + "is_init": false, + "msignature": { + "arity": 0, + "mparams": [], + "return_mtype": null, + "vararg_rank": -1 + } +} diff --git a/src/model/test_model_json.sav/test_refs_to_full_json.res b/src/model/test_model_json.sav/test_refs_to_full_json.res new file mode 100644 index 0000000000..60e70df79b --- /dev/null +++ b/src/model/test_model_json.sav/test_refs_to_full_json.res @@ -0,0 +1,9 @@ +{ + "full_name": "test_prog" +} +{ + "full_name": "excluded::excluded" +} +{ + "full_name": "test_prog::Object" +} diff --git a/src/web/api_metrics.nit b/src/web/api_metrics.nit index 8c01c0dfb9..cc57e40567 100644 --- a/src/web/api_metrics.nit +++ b/src/web/api_metrics.nit @@ -154,82 +154,74 @@ end redef class MetricSet super Jsonable - fun json: JsonObject do - var obj = new JsonObject + redef fun core_serialize_to(v) do for metric in metrics do - obj[metric.name] = metric + v.serialize_attribute(metric.name, metric) end - return obj end - - redef fun serialize_to(v) do json.serialize_to(v) end redef class Metric super Jsonable - fun json: JsonObject do - var obj = new JsonObject - obj["name"] = name - obj["desc"] = desc - obj["empty"] = values.is_empty - if values.not_empty then obj["avg"] = avg - if values.not_empty then obj["std_dev"] = std_dev - if values.not_empty then obj["threshold"] = threshold - return obj + redef fun core_serialize_to(v) do + v.serialize_attribute("name", name) + v.serialize_attribute("desc", desc) + v.serialize_attribute("empty", values.is_empty) + if values.not_empty then v.serialize_attribute("avg", avg) + if values.not_empty then v.serialize_attribute("std_dev", std_dev) + if values.not_empty then v.serialize_attribute("threshold", threshold) end - - redef fun serialize_to(v) do json.serialize_to(v) end redef class IntMetric - redef fun json do - var obj = super - if values.not_empty then obj["sum"] = sum - return obj + redef fun core_serialize_to(v) do + super + if values.not_empty then v.serialize_attribute("sum", sum) end end redef class FloatMetric - redef fun json do - var obj = super - if values.not_empty then obj["sum"] = sum - return obj + redef fun core_serialize_to(v) do + super + if values.not_empty then v.serialize_attribute("sum", sum) end end redef class MModuleMetric - redef fun json do - var obj = super - if values.not_empty then obj["min"] = min - if values.not_empty then obj["max"] = max + redef fun core_serialize_to(v) do + super + if values.not_empty then v.serialize_attribute("min", min) + if values.not_empty then v.serialize_attribute("max", max) var values = new JsonObject for value in sort do - var v = self[value] - var vobj = new JsonObject - vobj["mentity"] = value - vobj["value"] = if v isa Jsonable then v else v.to_s - values[value.full_name] = vobj + values[value.full_name] = new MetricEntry(value, self[value]) end - obj["values"] = values - return obj + v.serialize_attribute("values", values) end end redef class MClassMetric - redef fun json do - var obj = super - if values.not_empty then obj["min"] = min - if values.not_empty then obj["max"] = max + redef fun core_serialize_to(v) do + super + if values.not_empty then v.serialize_attribute("min", min) + if values.not_empty then v.serialize_attribute("max", max) var values = new JsonObject for value in sort do - var v = self[value] - var vobj = new JsonObject - vobj["mentity"] = value - vobj["value"] = if v isa Jsonable then v else v.to_s - values[value.full_name] = vobj + values[value.full_name] = new MetricEntry(value, self[value]) end - obj["values"] = values - return obj + v.serialize_attribute("values", values) + end +end + +private class MetricEntry + super Jsonable + + var mentity: MEntity + var value: Object + + redef fun core_serialize_to(v) do + v.serialize_attribute("mentity", mentity) + v.serialize_attribute("value", if value isa JsonObject then value else value.to_s) end end diff --git a/src/web/api_model.nit b/src/web/api_model.nit index 4f85161dfa..db4072cba8 100644 --- a/src/web/api_model.nit +++ b/src/web/api_model.nit @@ -132,7 +132,7 @@ class APIEntity redef fun get(req, res) do var mentity = mentity_from_uri(req, res) if mentity == null then return - res.json mentity.api_json(self) + res.raw_json mentity.to_full_json end end @@ -164,7 +164,7 @@ class APIEntityLinearization return end var mentities = new JsonArray - for e in lin do mentities.add e.full_json + for e in lin do mentities.add e res.json mentities end end diff --git a/src/web/web_base.nit b/src/web/web_base.nit index 60f7f2b5a1..587be653b1 100644 --- a/src/web/web_base.nit +++ b/src/web/web_base.nit @@ -102,6 +102,16 @@ redef class HttpResponse fun api_error(status: Int, message: String) do json(new APIError(status, message), status) end + + # Write data as JSON and set the right content type header. + fun raw_json(json: nullable String, status: nullable Int) do + header["Content-Type"] = media_types["json"].as(not null) + if json == null then + send(null, status) + else + send(json, status) + end + end end # An error returned by the API. @@ -109,22 +119,13 @@ end # Can be serialized to json. class APIError super Jsonable + serialize # Reponse status var status: Int # Response error message var message: String - - # Json Object for this error - var json: JsonObject is lazy do - var obj = new JsonObject - obj["status"] = status - obj["message"] = message - return obj - end - - redef fun serialize_to(v) do json.serialize_to(v) end # Fullname representation that can be used to build decorated links @@ -160,12 +161,10 @@ class NSRef # The mentity to link to/ var mentity: MEntity - redef fun serialize_to(v) do - var obj = new JsonObject - obj["web_url"] = mentity.web_url - obj["api_url"] = mentity.api_url - obj["name"] = mentity.name - obj.serialize_to(v) + redef fun core_serialize_to(v) do + v.serialize_attribute("web_url", mentity.web_url) + v.serialize_attribute("api_url", mentity.api_url) + v.serialize_attribute("name", mentity.name) end end @@ -184,17 +183,13 @@ redef class MEntity # URL to `self` within the JSON api. fun api_url: String do return "/api/entity/" / full_name - redef fun json do - var obj = super - obj["namespace"] = namespace - obj["web_url"] = web_url - obj["api_url"] = api_url - return obj + redef fun core_serialize_to(v) do + super + v.serialize_attribute("namespace", namespace) + v.serialize_attribute("web_url", web_url) + v.serialize_attribute("api_url", api_url) end - # Get the full json repesentation of `self` with MEntityRefs resolved. - fun api_json(handler: APIHandler): JsonObject do return full_json - # Return `self.full_name` as an object that can be serialized to json. fun namespace: nullable Namespace do return null @@ -203,47 +198,35 @@ redef class MEntity end redef class MEntityRef - redef fun json do - var obj = super - obj["namespace"] = mentity.namespace - obj["web_url"] = mentity.web_url - obj["api_url"] = mentity.api_url - obj["name"] = mentity.name - obj["mdoc"] = mentity.mdoc_or_fallback - obj["visibility"] = mentity.visibility - var modifiers = new JsonArray - for modifier in mentity.collect_modifiers do - modifiers.add modifier - end - obj["modifiers"] = modifiers + redef fun core_serialize_to(v) do + super + v.serialize_attribute("namespace", mentity.namespace) + v.serialize_attribute("web_url", mentity.web_url) + v.serialize_attribute("api_url", mentity.api_url) + v.serialize_attribute("name", mentity.name) + v.serialize_attribute("mdoc", mentity.mdoc_or_fallback) + v.serialize_attribute("visibility", mentity.visibility.to_s) + v.serialize_attribute("modifiers", mentity.collect_modifiers) var mentity = self.mentity if mentity isa MMethod then - obj["msignature"] = mentity.intro.msignature + v.serialize_attribute("msignature", mentity.intro.msignature) else if mentity isa MMethodDef then - obj["msignature"] = mentity.msignature + v.serialize_attribute("msignature", mentity.msignature) else if mentity isa MVirtualTypeProp then - obj["bound"] = to_mentity_ref(mentity.intro.bound) + v.serialize_attribute("bound", to_mentity_ref(mentity.intro.bound)) else if mentity isa MVirtualTypeDef then - obj["bound"] = to_mentity_ref(mentity.bound) + v.serialize_attribute("bound", to_mentity_ref(mentity.bound)) end - return obj - end - - redef fun full_json do - var obj = super - obj["location"] = mentity.location - return obj + v.serialize_attribute("location", mentity.location) end end redef class MDoc # Add doc down processing - redef fun json do - var obj = new JsonObject - obj["html_synopsis"] = html_synopsis.write_to_string - obj["html_documentation"] = html_documentation.write_to_string - return obj + redef fun core_serialize_to(v) do + v.serialize_attribute("html_synopsis", html_synopsis.write_to_string) + v.serialize_attribute("html_documentation", html_documentation.write_to_string) end end @@ -355,16 +338,11 @@ end redef class POSetElement[E] super Jsonable - # Return JSON representation of `self`. - fun json: JsonObject do + redef fun serialize_to(v) do assert self isa POSetElement[MEntity] - var obj = new JsonObject - obj["greaters"] = to_mentity_refs(greaters) - obj["direct_greaters"] = to_mentity_refs(direct_greaters) - obj["direct_smallers"] = to_mentity_refs(direct_smallers) - obj["smallers"] = to_mentity_refs(smallers) - return obj + v.serialize_attribute("greaters", to_mentity_refs(greaters)) + v.serialize_attribute("direct_greaters", to_mentity_refs(direct_greaters)) + v.serialize_attribute("direct_smallers", to_mentity_refs(direct_smallers)) + v.serialize_attribute("smallers", to_mentity_refs(smallers)) end - - redef fun serialize_to(v) do json.serialize_to(v) end