fc4b101b67ccd3b9942d91006e58d1c7dacb5879
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 var modifiers
= new JsonArray
63 for modifier
in collect_modifiers
do
64 modifiers
.add modifier
66 obj
["modifiers"] = modifiers
70 redef fun to_json
do return json
.to_json
76 # Return `self` as a JsonObject.
77 fun json
: JsonObject do
78 var obj
= new JsonObject
79 obj
["content"] = content
.join
("\n")
80 obj
["location"] = location
84 redef fun to_json
do return json
.to_json
90 # Return `self` as a JsonObject.
91 fun json
: JsonObject do
92 var obj
= new JsonObject
93 obj
["column_end"] = column_end
94 obj
["column_start"] = column_start
95 obj
["line_end"] = line_end
96 obj
["line_start"] = line_start
99 obj
["file"] = file
.filename
104 redef fun to_json
do return json
.to_json
107 redef class MVisibility
110 redef fun to_json
do return to_s
.to_json
117 obj
["visibility"] = public_visibility
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
["visibility"] = public_visibility
131 obj
["is_root"] = is_root
132 obj
["mpackage"] = to_mentity_ref
(mpackage
)
133 obj
["default_mmodule"] = to_mentity_ref
(default_mmodule
)
134 obj
["parent"] = to_mentity_ref
(parent
)
135 obj
["mmodules"] = to_mentity_refs
(mmodules
)
136 obj
["mgroups"] = to_mentity_refs
(in_nesting
.direct_smallers
)
144 obj
["location"] = location
145 obj
["visibility"] = public_visibility
146 obj
["mpackage"] = to_mentity_ref
(mpackage
)
147 obj
["mgroup"] = to_mentity_ref
(mgroup
)
148 obj
["intro_mclasses"] = to_mentity_refs
(intro_mclasses
)
149 obj
["mclassdefs"] = to_mentity_refs
(mclassdefs
)
157 obj
["visibility"] = visibility
158 var arr
= new JsonArray
159 for mparameter
in mparameters
do arr
.add mparameter
160 obj
["mparameters"] = arr
161 obj
["intro"] = to_mentity_ref
(intro
)
162 obj
["intro_mmodule"] = to_mentity_ref
(intro_mmodule
)
163 obj
["mpackage"] = to_mentity_ref
(intro_mmodule
.mpackage
)
164 obj
["mclassdefs"] = to_mentity_refs
(mclassdefs
)
169 redef class MClassDef
172 obj
["visibility"] = mclass
.visibility
173 obj
["location"] = location
174 obj
["is_intro"] = is_intro
175 var arr
= new JsonArray
176 for mparameter
in mclass
.mparameters
do arr
.add mparameter
177 obj
["mparameters"] = arr
178 obj
["mmodule"] = to_mentity_ref
(mmodule
)
179 obj
["mclass"] = to_mentity_ref
(mclass
)
180 obj
["mpropdefs"] = to_mentity_refs
(mpropdefs
)
181 obj
["intro_mproperties"] = to_mentity_refs
(intro_mproperties
)
186 redef class MProperty
189 obj
["visibility"] = visibility
190 obj
["intro"] = to_mentity_ref
(intro
)
191 obj
["intro_mclassdef"] = to_mentity_ref
(intro_mclassdef
)
192 obj
["mpropdefs"] = to_mentity_refs
(mpropdefs
)
200 obj
["is_init"] = is_init
201 obj
["msignature"] = intro
.msignature
206 redef class MAttribute
209 obj
["static_mtype"] = to_mentity_ref
(intro
.static_mtype
)
214 redef class MVirtualTypeProp
217 obj
["mvirtualtype"] = to_mentity_ref
(mvirtualtype
)
218 obj
["bound"] = to_mentity_ref
(intro
.bound
)
226 obj
["visibility"] = mproperty
.visibility
227 obj
["location"] = location
228 obj
["is_intro"] = is_intro
229 obj
["mclassdef"] = to_mentity_ref
(mclassdef
)
230 obj
["mproperty"] = to_mentity_ref
(mproperty
)
235 redef class MMethodDef
238 obj
["msignature"] = msignature
243 redef class MAttributeDef
246 obj
["static_mtype"] = to_mentity_ref
(static_mtype
)
251 redef class MVirtualTypeDef
254 obj
["bound"] = to_mentity_ref
(bound
)
255 obj
["is_fixed"] = is_fixed
260 redef class MSignature
262 var obj
= new JsonObject
264 var arr
= new JsonArray
265 for mparam
in mparameters
do arr
.add mparam
267 obj
["return_mtype"] = to_mentity_ref
(return_mtype
)
268 obj
["vararg_rank"] = vararg_rank
273 redef class MParameterType
275 var obj
= new JsonObject
278 obj
["mtype"] = to_mentity_ref
(mclass
.intro
.bound_mtype
.arguments
[rank
])
283 redef class MParameter
285 var obj
= new JsonObject
286 obj
["is_vararg"] = is_vararg
288 obj
["mtype"] = to_mentity_ref
(mtype
)
293 # Create a ref to a `mentity`.
294 fun to_mentity_ref
(mentity
: nullable MEntity): nullable MEntityRef do
295 if mentity
== null then return null
296 return new MEntityRef(mentity
)
299 # Return a collection of `mentities` as a JsonArray of MEntityRefs.
300 fun to_mentity_refs
(mentities
: Collection[MEntity]): JsonArray do
301 var array
= new JsonArray
302 for mentity
in mentities
do array
.add to_mentity_ref
(mentity
)