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

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_js_generator.py

Issue 2864543002: Mojo code generator: makes the filters member methods of generator if necessary. (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « mojo/public/tools/bindings/generators/mojom_java_generator.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 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 JavaScript source files from a mojom.Module.""" 5 """Generates JavaScript source files from a mojom.Module."""
6 6
7 import mojom.generate.generator as generator 7 import mojom.generate.generator as generator
8 import mojom.generate.module as mojom 8 import mojom.generate.module as mojom
9 import mojom.generate.pack as pack 9 import mojom.generate.pack as pack
10 import os 10 import os
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 return mojom.IsAnyHandleOrInterfaceKind(field.kind) 335 return mojom.IsAnyHandleOrInterfaceKind(field.kind)
336 336
337 def IsEnumField(field): 337 def IsEnumField(field):
338 return mojom.IsEnumKind(field.kind) 338 return mojom.IsEnumKind(field.kind)
339 339
340 def GetRelativePath(module, base_module): 340 def GetRelativePath(module, base_module):
341 return os.path.relpath(module.path, os.path.dirname(base_module.path)) 341 return os.path.relpath(module.path, os.path.dirname(base_module.path))
342 342
343 343
344 class Generator(generator.Generator): 344 class Generator(generator.Generator):
345 345 def _GetParameters(self):
346 js_filters = {
347 "decode_snippet": JavaScriptDecodeSnippet,
348 "default_value": JavaScriptDefaultValue,
349 "encode_snippet": JavaScriptEncodeSnippet,
350 "expression_to_text": ExpressionToText,
351 "field_offset": JavaScriptFieldOffset,
352 "has_callbacks": mojom.HasCallbacks,
353 "is_any_handle_or_interface_field": IsAnyHandleOrInterfaceField,
354 "is_array_pointer_field": IsArrayPointerField,
355 "is_associated_interface_field": IsAssociatedInterfaceField,
356 "is_associated_interface_request_field": IsAssociatedInterfaceRequestField,
357 "is_bool_field": IsBoolField,
358 "is_enum_field": IsEnumField,
359 "is_handle_field": IsHandleField,
360 "is_interface_field": IsInterfaceField,
361 "is_interface_request_field": IsInterfaceRequestField,
362 "is_map_pointer_field": IsMapPointerField,
363 "is_object_field": IsObjectField,
364 "is_string_pointer_field": IsStringPointerField,
365 "is_struct_pointer_field": IsStructPointerField,
366 "is_union_field": IsUnionField,
367 "js_type": JavaScriptType,
368 "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
369 "payload_size": JavaScriptPayloadSize,
370 "get_relative_path": GetRelativePath,
371 "stylize_method": generator.StudlyCapsToCamel,
372 "union_decode_snippet": JavaScriptUnionDecodeSnippet,
373 "union_encode_snippet": JavaScriptUnionEncodeSnippet,
374 "validate_array_params": JavaScriptValidateArrayParams,
375 "validate_enum_params": JavaScriptValidateEnumParams,
376 "validate_map_params": JavaScriptValidateMapParams,
377 "validate_nullable_params": JavaScriptNullableParam,
378 "validate_struct_params": JavaScriptValidateStructParams,
379 "validate_union_params": JavaScriptValidateUnionParams,
380 }
381
382 def GetParameters(self):
383 return { 346 return {
384 "namespace": self.module.namespace, 347 "namespace": self.module.namespace,
385 "imports": self.GetImports(), 348 "imports": self._GetImports(),
386 "kinds": self.module.kinds, 349 "kinds": self.module.kinds,
387 "enums": self.module.enums, 350 "enums": self.module.enums,
388 "module": self.module, 351 "module": self.module,
389 "structs": self.GetStructs() + self.GetStructsFromMethods(), 352 "structs": self.GetStructs() + self.GetStructsFromMethods(),
390 "unions": self.GetUnions(), 353 "unions": self.GetUnions(),
391 "use_new_js_bindings": self.use_new_js_bindings, 354 "use_new_js_bindings": self.use_new_js_bindings,
392 "interfaces": self.GetInterfaces(), 355 "interfaces": self.GetInterfaces(),
393 "imported_interfaces": self.GetImportedInterfaces(), 356 "imported_interfaces": self._GetImportedInterfaces(),
394 } 357 }
395 358
396 @staticmethod 359 @staticmethod
397 def GetTemplatePrefix(): 360 def GetTemplatePrefix():
398 return "js_templates" 361 return "js_templates"
399 362
400 @classmethod 363 def GetFilters(self):
401 def GetFilters(cls): 364 js_filters = {
402 return cls.js_filters 365 "decode_snippet": JavaScriptDecodeSnippet,
366 "default_value": JavaScriptDefaultValue,
367 "encode_snippet": JavaScriptEncodeSnippet,
368 "expression_to_text": ExpressionToText,
369 "field_offset": JavaScriptFieldOffset,
370 "has_callbacks": mojom.HasCallbacks,
371 "is_any_handle_or_interface_field": IsAnyHandleOrInterfaceField,
372 "is_array_pointer_field": IsArrayPointerField,
373 "is_associated_interface_field": IsAssociatedInterfaceField,
374 "is_associated_interface_request_field":
375 IsAssociatedInterfaceRequestField,
376 "is_bool_field": IsBoolField,
377 "is_enum_field": IsEnumField,
378 "is_handle_field": IsHandleField,
379 "is_interface_field": IsInterfaceField,
380 "is_interface_request_field": IsInterfaceRequestField,
381 "is_map_pointer_field": IsMapPointerField,
382 "is_object_field": IsObjectField,
383 "is_string_pointer_field": IsStringPointerField,
384 "is_struct_pointer_field": IsStructPointerField,
385 "is_union_field": IsUnionField,
386 "js_type": JavaScriptType,
387 "method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds,
388 "payload_size": JavaScriptPayloadSize,
389 "get_relative_path": GetRelativePath,
390 "stylize_method": generator.StudlyCapsToCamel,
391 "union_decode_snippet": JavaScriptUnionDecodeSnippet,
392 "union_encode_snippet": JavaScriptUnionEncodeSnippet,
393 "validate_array_params": JavaScriptValidateArrayParams,
394 "validate_enum_params": JavaScriptValidateEnumParams,
395 "validate_map_params": JavaScriptValidateMapParams,
396 "validate_nullable_params": JavaScriptNullableParam,
397 "validate_struct_params": JavaScriptValidateStructParams,
398 "validate_union_params": JavaScriptValidateUnionParams,
399 }
400 return js_filters
403 401
404 @UseJinja("module.amd.tmpl") 402 @UseJinja("module.amd.tmpl")
405 def GenerateAMDModule(self): 403 def _GenerateAMDModule(self):
406 return self.GetParameters() 404 return self._GetParameters()
407 405
408 def GenerateFiles(self, args): 406 def GenerateFiles(self, args):
409 if self.variant: 407 if self.variant:
410 raise Exception("Variants not supported in JavaScript bindings.") 408 raise Exception("Variants not supported in JavaScript bindings.")
411 409
412 self.Write(self.GenerateAMDModule(), 410 self.Write(self._GenerateAMDModule(),
413 self.MatchMojomFilePath("%s.js" % self.module.name)) 411 self.MatchMojomFilePath("%s.js" % self.module.name))
414 412
415 def GetImports(self): 413 def _GetImports(self):
416 used_names = set() 414 used_names = set()
417 for each_import in self.module.imports: 415 for each_import in self.module.imports:
418 simple_name = each_import["module_name"].split(".")[0] 416 simple_name = each_import["module_name"].split(".")[0]
419 417
420 # Since each import is assigned a variable in JS, they need to have unique 418 # Since each import is assigned a variable in JS, they need to have unique
421 # names. 419 # names.
422 unique_name = simple_name 420 unique_name = simple_name
423 counter = 0 421 counter = 0
424 while unique_name in used_names: 422 while unique_name in used_names:
425 counter += 1 423 counter += 1
426 unique_name = simple_name + str(counter) 424 unique_name = simple_name + str(counter)
427 425
428 used_names.add(unique_name) 426 used_names.add(unique_name)
429 each_import["unique_name"] = unique_name + "$" 427 each_import["unique_name"] = unique_name + "$"
430 counter += 1 428 counter += 1
431 return self.module.imports 429 return self.module.imports
432 430
433 def GetImportedInterfaces(self): 431 def _GetImportedInterfaces(self):
434 interface_to_import = {}; 432 interface_to_import = {};
435 for each_import in self.module.imports: 433 for each_import in self.module.imports:
436 for each_interface in each_import["module"].interfaces: 434 for each_interface in each_import["module"].interfaces:
437 name = each_interface.name 435 name = each_interface.name
438 interface_to_import[name] = each_import["unique_name"] + "." + name 436 interface_to_import[name] = each_import["unique_name"] + "." + name
439 return interface_to_import; 437 return interface_to_import;
440 438
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/generators/mojom_java_generator.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698