Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: mojo/public/tools/bindings/generators/java_templates/data_types_definition.tmpl

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 {% from "constant_definition.tmpl" import constant_def %}
2 {% from "enum_definition.tmpl" import enum_def %}
3
4 {%- macro equality(kind, v1, v2, ne=False) -%}
5 {%- if kind|is_reference_kind -%}
6 {%- if kind|is_array_kind -%}
7 {%- if kind.kind|is_reference_kind -%}
8 {% if ne %}!{% endif %}java.util.Arrays.deepEquals({{v1}}, {{v2}})
9 {%- else -%}
10 {% if ne %}!{% endif %}java.util.Arrays.equals({{v1}}, {{v2}})
11 {%- endif -%}
12 {%- else -%}
13 {% if ne %}!{% endif %}org.chromium.mojo.bindings.BindingsHelper.equals({{v1}}, {{v2}})
14 {%- endif -%}
15 {%- else -%}
16 {{v1}} {% if ne %}!={% else %}=={% endif %} {{v2}}
17 {%- endif -%}
18 {%- endmacro -%}
19
20 {%- macro hash(kind, v) -%}
21 {%- if kind|is_array_kind -%}
22 {%- if kind.kind|is_reference_kind -%}
23 java.util.Arrays.deepHashCode({{v}})
24 {%- else -%}
25 java.util.Arrays.hashCode({{v}})
26 {%- endif -%}
27 {%- else -%}
28 org.chromium.mojo.bindings.BindingsHelper.hashCode({{v}})
29 {%- endif -%}
30 {%- endmacro -%}
31
32 {%- macro array_element_size(kind) -%}
33 {%- if kind|is_union_kind %}
34 org.chromium.mojo.bindings.BindingsHelper.UNION_SIZE
35 {%- else -%}
36 org.chromium.mojo.bindings.BindingsHelper.POINTER_SIZE
37 {%- endif -%}
38 {%- endmacro -%}
39
40 {% macro encode(variable, kind, offset, bit, level=0, check_for_null=True) %}
41 {% if kind|is_pointer_array_kind or kind|is_union_array_kind %}
42 {% set sub_kind = kind.kind %}
43 {% if check_for_null %}
44 if ({{variable}} == null) {
45 encoder{{level}}.encodeNullPointer({{offset}}, {{kind|is_nullable_kind|java_ true_false}});
46 } else {
47 {% else %}
48 {
49 {% endif %}
50 {% if kind|is_pointer_array_kind %}
51 {% set encodePointer = 'encodePointerArray' %}
52 {% else %}
53 {% set encodePointer = 'encodeUnionArray' %}
54 {% endif %}
55 org.chromium.mojo.bindings.Encoder encoder{{level + 1}} = encoder{{level}}.{ {encodePointer}}({{variable}}.length, {{offset}}, {{kind|array_expected_length}} );
56 for (int i{{level}} = 0; i{{level}} < {{variable}}.length; ++i{{level}}) {
57 {{encode(variable~'[i'~level~']', sub_kind, 'org.chromium.mojo.bindings. DataHeader.HEADER_SIZE + ' ~ array_element_size(sub_kind) ~ ' * i'~level, 0, lev el+1)|indent(8)}}
58 }
59 }
60 {% elif kind|is_map_kind %}
61 if ({{variable}} == null) {
62 encoder{{level}}.encodeNullPointer({{offset}}, {{kind|is_nullable_kind|java_ true_false}});
63 } else {
64 org.chromium.mojo.bindings.Encoder encoder{{level + 1}} = encoder{{level}}.e ncoderForMap({{offset}});
65 int size{{level}} = {{variable}}.size();
66 {{kind.key_kind|java_type}}[] keys{{level}} = {{kind.key_kind|array|new_arra y('size'~level)}};
67 {{kind.value_kind|java_type}}[] values{{level}} = {{kind.value_kind|array|ne w_array('size'~level)}};
68 int index{{level}} = 0;
69 for (java.util.Map.Entry<{{kind.key_kind|java_type(true)}}, {{kind.value_kin d|java_type(true)}}> entry{{level}} : {{variable}}.entrySet()) {
70 keys{{level}}[index{{level}}] = entry{{level}}.getKey();
71 values{{level}}[index{{level}}] = entry{{level}}.getValue();
72 ++index{{level}};
73 }
74 {{encode('keys'~level, kind.key_kind|array, 'org.chromium.mojo.bindings.Data Header.HEADER_SIZE', 0, level+1, False)|indent(4)}}
75 {{encode('values'~level, kind.value_kind|array, 'org.chromium.mojo.bindings. DataHeader.HEADER_SIZE + org.chromium.mojo.bindings.BindingsHelper.POINTER_SIZE' , 0, level+1, False)|indent(4)}}
76 }
77 {% else %}
78 encoder{{level}}.{{kind|encode_method(variable, offset, bit)}};
79 {% endif %}
80 {% endmacro %}
81
82 {% macro decode(variable, kind, offset, bit, level=0) %}
83 {% if kind|is_struct_kind or
84 kind|is_pointer_array_kind or
85 kind|is_union_array_kind or
86 kind|is_map_kind %}
87 org.chromium.mojo.bindings.Decoder decoder{{level+1}} = decoder{{level}}.readPoi nter({{offset}}, {{kind|is_nullable_kind|java_true_false}});
88 {% if kind|is_struct_kind %}
89 {{variable}} = {{kind|java_type}}.decode(decoder{{level+1}});
90 {% else %}{# kind|is_pointer_array_kind or is_map_kind #}
91 {% if kind|is_nullable_kind %}
92 if (decoder{{level+1}} == null) {
93 {{variable}} = null;
94 } else {
95 {% else %}
96 {
97 {% endif %}
98 {% if kind|is_map_kind %}
99 decoder{{level+1}}.readDataHeaderForMap();
100 {{kind.key_kind|java_type}}[] keys{{level}};
101 {{kind.value_kind|java_type}}[] values{{level}};
102 {
103 {{decode('keys'~level, kind.key_kind|array, 'org.chromium.mojo.bindings. DataHeader.HEADER_SIZE', 0, level+1)|indent(8)}}
104 }
105 {
106 {{decode('values'~level, kind.value_kind|array('keys'~level~'.length'), 'org.chromium.mojo.bindings.DataHeader.HEADER_SIZE + org.chromium.mojo.bindings. BindingsHelper.POINTER_SIZE', 0, level+1)|indent(8)}}
107 }
108 {{variable}} = new java.util.HashMap<{{kind.key_kind|java_type(true)}}, {{ki nd.value_kind|java_type(true)}}>();
109 for (int index{{level}} = 0; index{{level}} < keys{{level}}.length; ++index{ {level}}) {
110 {{variable}}.put(keys{{level}}[index{{level}}], values{{level}}[index{{ level}}]);
111 }
112 {% else %}
113 org.chromium.mojo.bindings.DataHeader si{{level+1}} = decoder{{level+1}}.rea dDataHeaderForPointerArray({{kind|array_expected_length}});
114 {{variable}} = {{kind|new_array('si'~(level+1)~'.elementsOrVersion')}};
115 for (int i{{level+1}} = 0; i{{level+1}} < si{{level+1}}.elementsOrVersion; + +i{{level+1}}) {
116 {{decode(variable~'[i'~(level+1)~']', kind.kind, 'org.chromium.mojo.bind ings.DataHeader.HEADER_SIZE + ' ~ array_element_size(kind.kind) ~' * i'~(level+1 ), 0, level+1)|indent(8)}}
117 }
118 {% endif %}
119 }
120 {% endif %}
121 {% elif kind|is_union_kind %}
122 {{variable}} = {{kind|java_type}}.decode(decoder{{level}}, {{offset}});
123 {% if not kind|is_nullable_kind %}
124 if ({{variable}} == null) {
125 throw new org.chromium.mojo.bindings.DeserializationException("Trying to dec ode null union for a non-nullable type.");
126 }
127 {% endif %}
128 {% else %}
129 {{variable}} = decoder{{level}}.{{kind|decode_method(offset, bit)}};
130 {% endif %}
131 {% endmacro %}
132
133 {% macro struct_def(struct, inner_class=False) %}
134 {{'static' if inner_class else 'public'}} final class {{struct|name}} extends or g.chromium.mojo.bindings.Struct {
135
136 private static final int STRUCT_SIZE = {{struct.versions[-1].num_bytes}};
137 private static final org.chromium.mojo.bindings.DataHeader[] VERSION_ARRAY = new org.chromium.mojo.bindings.DataHeader[] {
138 {%- for version in struct.versions -%}
139 new org.chromium.mojo.bindings.DataHeader({{version.num_bytes}}, {{versi on.version}}){% if not loop.last %}, {% endif -%}
140 {%- endfor -%}
141 };
142 private static final org.chromium.mojo.bindings.DataHeader DEFAULT_STRUCT_IN FO = VERSION_ARRAY[{{struct.versions|length - 1}}];
143 {% for constant in struct.constants %}
144
145 {{constant_def(constant)|indent(4)}}
146 {% endfor %}
147 {% for enum in struct.enums %}
148
149 {{enum_def(enum, false)|indent(4)}}
150 {% endfor %}
151 {% if struct.fields %}
152
153 {% for field in struct.fields %}
154 public {{field.kind|java_type}} {{field|name}};
155 {% endfor %}
156 {% endif %}
157
158 private {{struct|name}}(int version) {
159 super(STRUCT_SIZE, version);
160 {% for field in struct.fields %}
161 {% if field.default %}
162 {{field|name}} = {{field|default_value}};
163 {% elif field.kind|is_any_handle_kind and not field.kind|is_interface_request_ kind %}
164 {{field|name}} = org.chromium.mojo.system.InvalidHandle.INSTANCE;
165 {% endif %}
166 {% endfor %}
167 }
168
169 public {{struct|name}}() {
170 this({{struct.versions[-1].version}});
171 }
172
173 public static {{struct|name}} deserialize(org.chromium.mojo.bindings.Message message) {
174 return decode(new org.chromium.mojo.bindings.Decoder(message));
175 }
176
177 @SuppressWarnings("unchecked")
178 public static {{struct|name}} decode(org.chromium.mojo.bindings.Decoder deco der0) {
179 if (decoder0 == null) {
180 return null;
181 }
182 org.chromium.mojo.bindings.DataHeader mainDataHeader = decoder0.readAndV alidateDataHeader(VERSION_ARRAY);
183 {{struct|name}} result = new {{struct|name}}(mainDataHeader.elementsOrVe rsion);
184 {% for byte in struct.bytes %}
185 {% for packed_field in byte.packed_fields %}
186 if (mainDataHeader.elementsOrVersion >= {{packed_field.min_version}}) {
187 {{decode('result.' ~ packed_field.field|name, packed_field.field.kin d, 8+packed_field.offset, packed_field.bit)|indent(12)}}
188 }
189 {% endfor %}
190 {% endfor %}
191 return result;
192 }
193
194 @SuppressWarnings("unchecked")
195 @Override
196 protected final void encode(org.chromium.mojo.bindings.Encoder encoder) {
197 {% if not struct.bytes %}
198 encoder.getEncoderAtDataOffset(DEFAULT_STRUCT_INFO);
199 {% else %}
200 org.chromium.mojo.bindings.Encoder encoder0 = encoder.getEncoderAtDataOf fset(DEFAULT_STRUCT_INFO);
201 {% endif %}
202 {% for byte in struct.bytes %}
203 {% for packed_field in byte.packed_fields %}
204 {{encode(packed_field.field|name, packed_field.field.kind, 8+packed_fiel d.offset, packed_field.bit)|indent(8)}}
205 {% endfor %}
206 {% endfor %}
207 }
208
209 /**
210 * @see Object#equals(Object)
211 */
212 @Override
213 public boolean equals(Object object) {
214 if (object == this)
215 return true;
216 if (object == null)
217 return false;
218 if (getClass() != object.getClass())
219 return false;
220 {% if struct.fields|length %}
221 {{struct|name}} other = ({{struct|name}}) object;
222 {% for field in struct.fields %}
223 if ({{equality(field.kind, 'this.'~field|name, 'other.'~field|name, True )}})
224 return false;
225 {% endfor %}
226 {% endif %}
227 return true;
228 }
229
230 /**
231 * @see Object#hashCode()
232 */
233 @Override
234 public int hashCode() {
235 final int prime = 31;
236 int result = prime + getClass().hashCode();
237 {% for field in struct.fields %}
238 result = prime * result + {{hash(field.kind, field|name)}};
239 {% endfor %}
240 return result;
241 }
242 }
243 {% endmacro %}
244
245
246 {% macro union_def(union) %}
247 public final class {{union|name}} extends org.chromium.mojo.bindings.Union {
248
249 public static final class Tag {
250 {% for field in union.fields %}
251 public static final int {{field|ucc}} = {{field.ordinal}};
252 {% endfor %}
253 };
254
255 private int mTag_ = -1;
256 {% for field in union.fields %}
257 private {{field.kind|java_type}} m{{field|ucc}};
258 {% endfor %}
259
260 public int which() {
261 return mTag_;
262 }
263
264 public boolean isUnknown() {
265 return mTag_ == -1;
266 }
267 {% for field in union.fields %}
268
269 public void set{{field|ucc}}({{field.kind|java_type}} {{field|name}}) {
270 mTag_ = {{field.ordinal}};
271 m{{field|ucc}} = {{field|name}};
272 }
273
274 public {{field.kind|java_type}} get{{field|ucc}}() {
275 assert mTag_ == {{field.ordinal}};
276 return m{{field|ucc}};
277 }
278 {% endfor %}
279
280
281 @Override
282 protected final void encode(org.chromium.mojo.bindings.Encoder encoder0, int offset) {
283 encoder0.encode(org.chromium.mojo.bindings.BindingsHelper.UNION_SIZE, of fset);
284 encoder0.encode(mTag_, offset + 4);
285 switch (mTag_) {
286 {% for field in union.fields %}
287 case {{field.ordinal}}: {
288 {% if field.kind|is_union_kind %}
289 if (m{{field|ucc}} == null) {
290 encoder0.encodeNullPointer(offset + 8, {{field.kind|is_nulla ble_kind|java_true_false}});
291 } else {
292 m{{field|ucc}}.encode(encoder0.encoderForUnionPointer(offset + 8), 0);
293 }
294 {% else %}
295 {{encode('m' ~ field|ucc, field.kind, 'offset + 8', 0)|indent(16 )}}
296 {% endif %}
297 break;
298 }
299 {% endfor %}
300 default: {
301 break;
302 }
303 }
304 }
305
306 public static {{union|name}} deserialize(org.chromium.mojo.bindings.Message message) {
307 return decode(new org.chromium.mojo.bindings.Decoder(message).decoderFor SerializedUnion(), 0);
308 }
309
310 public static final {{union|name}} decode(org.chromium.mojo.bindings.Decoder decoder0, int offset) {
311 org.chromium.mojo.bindings.DataHeader dataHeader = decoder0.readDataHead erForUnion(offset);
312 if (dataHeader.size == 0) {
313 return null;
314 }
315 {{union|name}} result = new {{union|name}}();
316 switch (dataHeader.elementsOrVersion) {
317 {% for field in union.fields %}
318 case {{field.ordinal}}: {
319 {% if field.kind|is_union_kind %}
320 org.chromium.mojo.bindings.Decoder decoder1 = decoder0.readPoint er(offset + org.chromium.mojo.bindings.DataHeader.HEADER_SIZE, {{field.kind|is_n ullable_kind|java_true_false}});
321 if (decoder1 != null) {
322 result.m{{field|ucc}} = {{field.kind|name}}.decode(decoder1, 0);
323 }
324 {% else %}
325 {{decode('result.m'~field|ucc, field.kind, 'offset + org.chromiu m.mojo.bindings.DataHeader.HEADER_SIZE', 0)|indent(16)}}
326 {% endif %}
327 result.mTag_ = {{field.ordinal}};
328 break;
329 }
330 {% endfor %}
331 default: {
332 break;
333 }
334 }
335 return result;
336 }
337
338 /**
339 * @see Object#equals(Object)
340 */
341 @Override
342 public boolean equals(Object object) {
343 if (object == this)
344 return true;
345 if (object == null)
346 return false;
347 if (getClass() != object.getClass())
348 return false;
349 {{union|name}} other = ({{union|name}}) object;
350 if (mTag_ != other.mTag_)
351 return false;
352 switch (mTag_) {
353 {% for field in union.fields %}
354 case {{field.ordinal}}:
355 return {{equality(field.kind, 'm'~field|ucc, 'other.m'~field|ucc )}};
356 {% endfor %}
357 default:
358 break;
359 }
360 return false;
361 }
362
363 /**
364 * @see Object#hashCode()
365 */
366 @Override
367 public int hashCode() {
368 final int prime = 31;
369 int result = prime + getClass().hashCode();
370 result = prime * result + org.chromium.mojo.bindings.BindingsHelper.hash Code(mTag_);
371 switch (mTag_) {
372 {% for field in union.fields %}
373 case {{field.ordinal}}: {
374 result = prime * result + {{hash(field.kind, 'm'~field|ucc)}};
375 break;
376 }
377 {% endfor %}
378 default: {
379 break;
380 }
381 }
382 return result;
383 }
384 }
385 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698