OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Generates java source files from a mojom.Module.""" | 5 """Generates java source files from a mojom.Module.""" |
6 | 6 |
7 import argparse | 7 import argparse |
8 import ast | 8 import ast |
9 import contextlib | 9 import contextlib |
10 import os | 10 import os |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 """ Appends standard parameters shared between encode and decode calls. """ | 174 """ Appends standard parameters shared between encode and decode calls. """ |
175 params = list(initial_params) | 175 params = list(initial_params) |
176 if (kind == mojom.BOOL): | 176 if (kind == mojom.BOOL): |
177 params.append(str(bit)) | 177 params.append(str(bit)) |
178 if mojom.IsReferenceKind(kind): | 178 if mojom.IsReferenceKind(kind): |
179 if mojom.IsAnyArrayKind(kind): | 179 if mojom.IsAnyArrayKind(kind): |
180 params.append(GetArrayNullabilityFlags(kind)) | 180 params.append(GetArrayNullabilityFlags(kind)) |
181 else: | 181 else: |
182 params.append(GetJavaTrueFalse(mojom.IsNullableKind(kind))) | 182 params.append(GetJavaTrueFalse(mojom.IsNullableKind(kind))) |
183 if mojom.IsAnyArrayKind(kind): | 183 if mojom.IsAnyArrayKind(kind): |
184 if mojom.IsFixedArrayKind(kind): | 184 params.append(GetArrayExpectedLength(kind)) |
185 params.append(str(kind.length)) | |
186 else: | |
187 params.append( | |
188 'org.chromium.mojo.bindings.BindingsHelper.UNSPECIFIED_ARRAY_LENGTH'); | |
189 if mojom.IsInterfaceKind(kind): | 185 if mojom.IsInterfaceKind(kind): |
190 params.append('%s.MANAGER' % GetJavaType(context, kind)) | 186 params.append('%s.MANAGER' % GetJavaType(context, kind)) |
191 if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind): | 187 if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind): |
192 params.append('%s.MANAGER' % GetJavaType(context, kind.kind)) | 188 params.append('%s.MANAGER' % GetJavaType(context, kind.kind)) |
193 return params | 189 return params |
194 | 190 |
195 | 191 |
196 @contextfilter | 192 @contextfilter |
197 def DecodeMethod(context, kind, offset, bit): | 193 def DecodeMethod(context, kind, offset, bit): |
198 def _DecodeMethodName(kind): | 194 def _DecodeMethodName(kind): |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 | 242 |
247 @contextfilter | 243 @contextfilter |
248 def GetJavaType(context, kind, boxed=False): | 244 def GetJavaType(context, kind, boxed=False): |
249 if boxed: | 245 if boxed: |
250 return GetBoxedJavaType(context, kind) | 246 return GetBoxedJavaType(context, kind) |
251 if mojom.IsStructKind(kind) or mojom.IsInterfaceKind(kind): | 247 if mojom.IsStructKind(kind) or mojom.IsInterfaceKind(kind): |
252 return GetNameForKind(context, kind) | 248 return GetNameForKind(context, kind) |
253 if mojom.IsInterfaceRequestKind(kind): | 249 if mojom.IsInterfaceRequestKind(kind): |
254 return ('org.chromium.mojo.bindings.InterfaceRequest<%s>' % | 250 return ('org.chromium.mojo.bindings.InterfaceRequest<%s>' % |
255 GetNameForKind(context, kind.kind)) | 251 GetNameForKind(context, kind.kind)) |
| 252 if mojom.IsMapKind(kind): |
| 253 return 'java.util.Map<%s, %s>' % ( |
| 254 GetBoxedJavaType(context, kind.key_kind), |
| 255 GetBoxedJavaType(context, kind.value_kind)) |
256 if mojom.IsAnyArrayKind(kind): | 256 if mojom.IsAnyArrayKind(kind): |
257 return '%s[]' % GetJavaType(context, kind.kind) | 257 return '%s[]' % GetJavaType(context, kind.kind) |
258 if mojom.IsEnumKind(kind): | 258 if mojom.IsEnumKind(kind): |
259 return 'int' | 259 return 'int' |
260 return _spec_to_java_type[kind.spec] | 260 return _spec_to_java_type[kind.spec] |
261 | 261 |
262 @contextfilter | 262 @contextfilter |
263 def DefaultValue(context, field): | 263 def DefaultValue(context, field): |
264 assert field.default | 264 assert field.default |
265 if isinstance(field.kind, mojom.Struct): | 265 if isinstance(field.kind, mojom.Struct): |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 if token.value == 'double.NAN': | 316 if token.value == 'double.NAN': |
317 return 'java.lang.Double.NaN' | 317 return 'java.lang.Double.NaN' |
318 if token.value == 'float.INFINITY': | 318 if token.value == 'float.INFINITY': |
319 return 'java.lang.Float.POSITIVE_INFINITY' | 319 return 'java.lang.Float.POSITIVE_INFINITY' |
320 if token.value == 'float.NEGATIVE_INFINITY': | 320 if token.value == 'float.NEGATIVE_INFINITY': |
321 return 'java.lang.Float.NEGATIVE_INFINITY' | 321 return 'java.lang.Float.NEGATIVE_INFINITY' |
322 if token.value == 'float.NAN': | 322 if token.value == 'float.NAN': |
323 return 'java.lang.Float.NaN' | 323 return 'java.lang.Float.NaN' |
324 return token | 324 return token |
325 | 325 |
| 326 def GetArrayKind(kind, size = None): |
| 327 if size is None: |
| 328 return mojom.Array(kind) |
| 329 else: |
| 330 array = mojom.FixedArray(0, kind) |
| 331 array.java_map_size = size |
| 332 return array |
| 333 |
| 334 def GetArrayExpectedLength(kind): |
| 335 if mojom.IsFixedArrayKind(kind): |
| 336 return getattr(kind, 'java_map_size', str(kind.length)) |
| 337 else: |
| 338 return 'org.chromium.mojo.bindings.BindingsHelper.UNSPECIFIED_ARRAY_LENGTH' |
| 339 |
326 def IsPointerArrayKind(kind): | 340 def IsPointerArrayKind(kind): |
327 if not mojom.IsAnyArrayKind(kind): | 341 if not mojom.IsAnyArrayKind(kind): |
328 return False | 342 return False |
329 sub_kind = kind.kind | 343 sub_kind = kind.kind |
330 return mojom.IsObjectKind(sub_kind) | 344 return mojom.IsObjectKind(sub_kind) |
331 | 345 |
332 def GetResponseStructFromMethod(method): | 346 def GetResponseStructFromMethod(method): |
333 return generator.GetDataHeader( | 347 return generator.GetDataHeader( |
334 False, generator.GetResponseStructFromMethod(method)) | 348 False, generator.GetResponseStructFromMethod(method)) |
335 | 349 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 with zipfile.ZipFile(zip_filename, 'w') as zip_file: | 386 with zipfile.ZipFile(zip_filename, 'w') as zip_file: |
373 for dirname, _, files in os.walk(root): | 387 for dirname, _, files in os.walk(root): |
374 for filename in files: | 388 for filename in files: |
375 path = os.path.join(dirname, filename) | 389 path = os.path.join(dirname, filename) |
376 path_in_archive = os.path.relpath(path, root) | 390 path_in_archive = os.path.relpath(path, root) |
377 zip_file.write(path, path_in_archive) | 391 zip_file.write(path, path_in_archive) |
378 | 392 |
379 class Generator(generator.Generator): | 393 class Generator(generator.Generator): |
380 | 394 |
381 java_filters = { | 395 java_filters = { |
| 396 'array': GetArrayKind, |
| 397 'array_expected_length': GetArrayExpectedLength, |
382 'interface_response_name': GetInterfaceResponseName, | 398 'interface_response_name': GetInterfaceResponseName, |
383 'constant_value': ConstantValue, | 399 'constant_value': ConstantValue, |
384 'default_value': DefaultValue, | 400 'default_value': DefaultValue, |
385 'decode_method': DecodeMethod, | 401 'decode_method': DecodeMethod, |
386 'expression_to_text': ExpressionToText, | 402 'expression_to_text': ExpressionToText, |
387 'encode_method': EncodeMethod, | 403 'encode_method': EncodeMethod, |
388 'has_method_with_response': HasMethodWithResponse, | 404 'has_method_with_response': HasMethodWithResponse, |
389 'has_method_without_response': HasMethodWithoutResponse, | 405 'has_method_without_response': HasMethodWithoutResponse, |
390 'is_fixed_array_kind': mojom.IsFixedArrayKind, | 406 'is_fixed_array_kind': mojom.IsFixedArrayKind, |
391 'is_handle': mojom.IsNonInterfaceHandleKind, | 407 'is_handle': mojom.IsNonInterfaceHandleKind, |
| 408 'is_map_kind': mojom.IsMapKind, |
392 'is_nullable_kind': mojom.IsNullableKind, | 409 'is_nullable_kind': mojom.IsNullableKind, |
393 'is_pointer_array_kind': IsPointerArrayKind, | 410 'is_pointer_array_kind': IsPointerArrayKind, |
394 'is_struct_kind': mojom.IsStructKind, | 411 'is_struct_kind': mojom.IsStructKind, |
395 'java_type': GetJavaType, | 412 'java_type': GetJavaType, |
396 'java_true_false': GetJavaTrueFalse, | 413 'java_true_false': GetJavaTrueFalse, |
397 'method_ordinal_name': GetMethodOrdinalName, | 414 'method_ordinal_name': GetMethodOrdinalName, |
398 'name': GetNameForElement, | 415 'name': GetNameForElement, |
399 'new_array': NewArray, | 416 'new_array': NewArray, |
400 'response_struct_from_method': GetResponseStructFromMethod, | 417 'response_struct_from_method': GetResponseStructFromMethod, |
401 'struct_from_method': GetStructFromMethod, | 418 'struct_from_method': GetStructFromMethod, |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 return { | 512 return { |
496 'lstrip_blocks': True, | 513 'lstrip_blocks': True, |
497 'trim_blocks': True, | 514 'trim_blocks': True, |
498 } | 515 } |
499 | 516 |
500 def GetGlobals(self): | 517 def GetGlobals(self): |
501 return { | 518 return { |
502 'namespace': self.module.namespace, | 519 'namespace': self.module.namespace, |
503 'module': self.module, | 520 'module': self.module, |
504 } | 521 } |
OLD | NEW |