Merge remote-tracking branch 'upstream/master' into init_auto
[nit.git] / src / model / model_json.nit
diff --git a/src/model/model_json.nit b/src/model/model_json.nit
deleted file mode 100644 (file)
index 1d8483c..0000000
+++ /dev/null
@@ -1,343 +0,0 @@
-# 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.
-
-# Make model entities Jsonable.
-#
-# To avoid cycles, every reference from a MEntity to another is replaced by a
-# MEntityRef.
-#
-# How subobjects are retrieved using the MEntityRef is the responsability of the
-# client. Json objects can be returned as this or inflated with concrete objet
-# rather than the refs.
-#
-# TODO consider serialization module?
-module model_json
-
-import model::model_collect
-import json::static
-import json
-import loader
-
-# A reference to another mentity.
-class MEntityRef
-       super MEntity
-
-       # 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
-       end
-end
-
-redef class MEntity
-       super Jsonable
-
-       # Return `self` as a JsonObject.
-       #
-       # 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
-       end
-
-       redef fun serialize_to(v) do json.serialize_to(v)
-
-       # Return `self` as a JsonObject 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
-
-       # Return `full_json` as a json string.
-       fun to_full_json: String do return full_json.to_json
-end
-
-redef class MDoc
-       super Jsonable
-
-       # Return `self` as a JsonObject.
-       fun json: JsonObject do
-               var obj = new JsonObject
-               obj["content"] = content.join("\n")
-               obj["location"] = location
-               return obj
-       end
-
-       redef fun serialize_to(v) do json.serialize_to(v)
-end
-
-redef class Location
-       super Jsonable
-
-       # 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
-               var file = self.file
-               if file != null then
-                       obj["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)
-               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
-       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
-       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
-       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
-       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
-       end
-end
-
-redef class MMethod
-       redef fun json do
-               var obj = super
-               obj["is_init"] = is_init
-               obj["msignature"] = intro.msignature
-               return obj
-       end
-end
-
-redef class MAttribute
-       redef fun json do
-               var obj = super
-               obj["static_mtype"] = to_mentity_ref(intro.static_mtype)
-               return obj
-       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
-       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
-       end
-end
-
-redef class MMethodDef
-       redef fun json do
-               var obj = super
-               obj["msignature"] = msignature
-               return obj
-       end
-end
-
-redef class MAttributeDef
-       redef fun json do
-               var obj = super
-               obj["static_mtype"] = to_mentity_ref(static_mtype)
-               return obj
-       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
-       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
-       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
-       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
-       end
-end
-
-# Create a ref to a `mentity`.
-fun to_mentity_ref(mentity: nullable MEntity): nullable MEntityRef do
-       if mentity == null then return null
-       return new MEntityRef(mentity)
-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)
-       return array
-end