cebc7beb36bafca7defd81435e3256800c82a215
1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # Make model entities Jsonable.
17 # To avoid cycles, every reference from a MEntity to another is replaced by a
20 # How subobjects are retrieved using the MEntityRef is the responsability of the
21 # client. Json objects can be returned as this or inflated with concrete objet
22 # rather than the refs.
24 # TODO consider serialization module?
27 import model
::model_collect
31 # A reference to another mentity.
38 # Return `self` as a Json Object.
40 # By default, MEntity references contain only the `full_name` of the Mentity.
41 # You should redefine this method in your client to implement a different behavior.
43 var obj
= new JsonObject
44 obj
["full_name"] = mentity
.full_name
52 # Return `self` as a JsonObject.
54 # By default, every reference to another MEntity is replaced by a pointer
55 # to the MEntity::json_id.
56 fun json
: JsonObject do
57 var obj
= new JsonObject
59 obj
["class_name"] = class_name
60 obj
["full_name"] = full_name
61 obj
["mdoc"] = mdoc_or_fallback
62 obj
["visibility"] = visibility
63 var modifiers
= new JsonArray
64 for modifier
in collect_modifiers
do
65 modifiers
.add modifier
67 obj
["modifiers"] = modifiers
71 redef fun to_json
do return json
.to_json
77 # Return `self` as a JsonObject.
78 fun json
: JsonObject do
79 var obj
= new JsonObject
80 obj
["content"] = content
.join
("\n")
81 obj
["location"] = location
85 redef fun to_json
do return json
.to_json
91 # Return `self` as a JsonObject.
92 fun json
: JsonObject do
93 var obj
= new JsonObject
94 obj
["column_end"] = column_end
95 obj
["column_start"] = column_start
96 obj
["line_end"] = line_end
97 obj
["line_start"] = line_start
100 obj
["file"] = file
.filename
105 redef fun to_json
do return json
.to_json
108 redef class MVisibility
111 redef fun to_json
do return to_s
.to_json
119 obj
["ini"] = new JsonObject.from
(ini
.as(not null).to_map
)
121 obj
["root"] = to_mentity_ref
(root
)
122 obj
["mgroups"] = to_mentity_refs
(mgroups
)
130 obj
["is_root"] = is_root
131 obj
["mpackage"] = to_mentity_ref
(mpackage
)
132 obj
["default_mmodule"] = to_mentity_ref
(default_mmodule
)
133 obj
["parent"] = to_mentity_ref
(parent
)
134 obj
["mmodules"] = to_mentity_refs
(mmodules
)
135 obj
["mgroups"] = to_mentity_refs
(in_nesting
.direct_smallers
)
143 obj
["location"] = location
144 obj
["mpackage"] = to_mentity_ref
(mpackage
)
145 obj
["mgroup"] = to_mentity_ref
(mgroup
)
146 obj
["intro_mclasses"] = to_mentity_refs
(intro_mclasses
)
147 obj
["mclassdefs"] = to_mentity_refs
(mclassdefs
)
155 var arr
= new JsonArray
156 for mparameter
in mparameters
do arr
.add mparameter
157 obj
["mparameters"] = arr
158 obj
["intro"] = to_mentity_ref
(intro
)
159 obj
["intro_mmodule"] = to_mentity_ref
(intro_mmodule
)
160 obj
["mpackage"] = to_mentity_ref
(intro_mmodule
.mpackage
)
161 obj
["mclassdefs"] = to_mentity_refs
(mclassdefs
)
166 redef class MClassDef
169 obj
["location"] = location
170 obj
["is_intro"] = is_intro
171 var arr
= new JsonArray
172 for mparameter
in mclass
.mparameters
do arr
.add mparameter
173 obj
["mparameters"] = arr
174 obj
["mmodule"] = to_mentity_ref
(mmodule
)
175 obj
["mclass"] = to_mentity_ref
(mclass
)
176 obj
["mpropdefs"] = to_mentity_refs
(mpropdefs
)
177 obj
["intro_mproperties"] = to_mentity_refs
(intro_mproperties
)
182 redef class MProperty
185 obj
["intro"] = to_mentity_ref
(intro
)
186 obj
["intro_mclassdef"] = to_mentity_ref
(intro_mclassdef
)
187 obj
["mpropdefs"] = to_mentity_refs
(mpropdefs
)
195 obj
["is_init"] = is_init
196 obj
["msignature"] = intro
.msignature
201 redef class MAttribute
204 obj
["static_mtype"] = to_mentity_ref
(intro
.static_mtype
)
209 redef class MVirtualTypeProp
212 obj
["mvirtualtype"] = to_mentity_ref
(mvirtualtype
)
213 obj
["bound"] = to_mentity_ref
(intro
.bound
)
221 obj
["location"] = location
222 obj
["is_intro"] = is_intro
223 obj
["mclassdef"] = to_mentity_ref
(mclassdef
)
224 obj
["mproperty"] = to_mentity_ref
(mproperty
)
229 redef class MMethodDef
232 obj
["msignature"] = msignature
237 redef class MAttributeDef
240 obj
["static_mtype"] = to_mentity_ref
(static_mtype
)
245 redef class MVirtualTypeDef
248 obj
["bound"] = to_mentity_ref
(bound
)
249 obj
["is_fixed"] = is_fixed
254 redef class MSignature
256 var obj
= new JsonObject
258 var arr
= new JsonArray
259 for mparam
in mparameters
do arr
.add mparam
261 obj
["return_mtype"] = to_mentity_ref
(return_mtype
)
262 obj
["vararg_rank"] = vararg_rank
267 redef class MParameterType
269 var obj
= new JsonObject
272 obj
["mtype"] = to_mentity_ref
(mclass
.intro
.bound_mtype
.arguments
[rank
])
277 redef class MParameter
279 var obj
= new JsonObject
280 obj
["is_vararg"] = is_vararg
282 obj
["mtype"] = to_mentity_ref
(mtype
)
287 # Create a ref to a `mentity`.
288 fun to_mentity_ref
(mentity
: nullable MEntity): nullable MEntityRef do
289 if mentity
== null then return null
290 return new MEntityRef(mentity
)
293 # Return a collection of `mentities` as a JsonArray of MEntityRefs.
294 fun to_mentity_refs
(mentities
: Collection[MEntity]): JsonArray do
295 var array
= new JsonArray
296 for mentity
in mentities
do array
.add to_mentity_ref
(mentity
)