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

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

Issue 1753013002: Mojom runtime type info: New implementation for Dart. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: No changes to sha1s Created 4 years, 9 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
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 dart source files from a mojom.Module.""" 5 """Generates dart source files from a mojom.Module."""
6 6
7 import errno 7 import errno
8 import os 8 import os
9 import re 9 import re
10 import shutil 10 import shutil
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 mojom.NULLABLE_DPPIPE: "core.MojoDataPipeProducer", 116 mojom.NULLABLE_DPPIPE: "core.MojoDataPipeProducer",
117 mojom.NULLABLE_MSGPIPE: "core.MojoMessagePipeEndpoint", 117 mojom.NULLABLE_MSGPIPE: "core.MojoMessagePipeEndpoint",
118 mojom.NULLABLE_SHAREDBUFFER: "core.MojoSharedBuffer", 118 mojom.NULLABLE_SHAREDBUFFER: "core.MojoSharedBuffer",
119 mojom.INT64: "int", 119 mojom.INT64: "int",
120 mojom.UINT64: "int", 120 mojom.UINT64: "int",
121 mojom.DOUBLE: "double", 121 mojom.DOUBLE: "double",
122 mojom.STRING: "String", 122 mojom.STRING: "String",
123 mojom.NULLABLE_STRING: "String" 123 mojom.NULLABLE_STRING: "String"
124 } 124 }
125 125
126 _kind_to_mojom_type = {
127 mojom.BOOL: "bool",
128 mojom.INT8: "int8",
129 mojom.UINT8: "uint8",
130 mojom.INT16: "int16",
131 mojom.UINT16: "uint16",
132 mojom.INT32: "int32",
133 mojom.UINT32: "uint32",
134 mojom.FLOAT: "float",
135 mojom.HANDLE: "unspecified",
136 mojom.DCPIPE: "dataPipeConsumer",
137 mojom.DPPIPE: "dataPipeProducer",
138 mojom.MSGPIPE: "messagePipe",
139 mojom.SHAREDBUFFER: "sharedBuffer",
140 mojom.NULLABLE_HANDLE: "unspecified",
141 mojom.NULLABLE_DCPIPE: "dataPipeConsumer",
142 mojom.NULLABLE_DPPIPE: "dataPipeProducer",
143 mojom.NULLABLE_MSGPIPE: "messagePipe",
144 mojom.NULLABLE_SHAREDBUFFER: "sharedBuffer",
145 mojom.INT64: "int64",
146 mojom.UINT64: "uint64",
147 mojom.DOUBLE: "double"
148 }
149
150 _spec_to_decode_method = { 126 _spec_to_decode_method = {
151 mojom.BOOL.spec: 'decodeBool', 127 mojom.BOOL.spec: 'decodeBool',
152 mojom.DCPIPE.spec: 'decodeConsumerHandle', 128 mojom.DCPIPE.spec: 'decodeConsumerHandle',
153 mojom.DOUBLE.spec: 'decodeDouble', 129 mojom.DOUBLE.spec: 'decodeDouble',
154 mojom.DPPIPE.spec: 'decodeProducerHandle', 130 mojom.DPPIPE.spec: 'decodeProducerHandle',
155 mojom.FLOAT.spec: 'decodeFloat', 131 mojom.FLOAT.spec: 'decodeFloat',
156 mojom.HANDLE.spec: 'decodeHandle', 132 mojom.HANDLE.spec: 'decodeHandle',
157 mojom.INT16.spec: 'decodeInt16', 133 mojom.INT16.spec: 'decodeInt16',
158 mojom.INT32.spec: 'decodeInt32', 134 mojom.INT32.spec: 'decodeInt32',
159 mojom.INT64.spec: 'decodeInt64', 135 mojom.INT64.spec: 'decodeInt64',
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 if mojom.IsMapKind(kind): 228 if mojom.IsMapKind(kind):
253 key_type = DartDeclType(kind.key_kind) 229 key_type = DartDeclType(kind.key_kind)
254 value_type = DartDeclType(kind.value_kind) 230 value_type = DartDeclType(kind.value_kind)
255 return "Map<"+ key_type + ", " + value_type + ">" 231 return "Map<"+ key_type + ", " + value_type + ">"
256 if mojom.IsInterfaceKind(kind) or \ 232 if mojom.IsInterfaceKind(kind) or \
257 mojom.IsInterfaceRequestKind(kind): 233 mojom.IsInterfaceRequestKind(kind):
258 return "Object" 234 return "Object"
259 if mojom.IsEnumKind(kind): 235 if mojom.IsEnumKind(kind):
260 return GetDartType(kind) 236 return GetDartType(kind)
261 237
262 def GetSimpleMojomTypeName(kind):
263 return _kind_to_mojom_type[kind]
264
265 def NameToComponent(name): 238 def NameToComponent(name):
266 # insert '_' between anything and a Title name (e.g, HTTPEntry2FooBar -> 239 # insert '_' between anything and a Title name (e.g, HTTPEntry2FooBar ->
267 # HTTP_Entry2_FooBar). Numbers terminate a string of lower-case characters. 240 # HTTP_Entry2_FooBar). Numbers terminate a string of lower-case characters.
268 name = re.sub('([^_])([A-Z][^A-Z1-9_]+)', r'\1_\2', name) 241 name = re.sub('([^_])([A-Z][^A-Z1-9_]+)', r'\1_\2', name)
269 # insert '_' between non upper and start of upper blocks (e.g., 242 # insert '_' between non upper and start of upper blocks (e.g.,
270 # HTTP_Entry2_FooBar -> HTTP_Entry2_Foo_Bar). 243 # HTTP_Entry2_FooBar -> HTTP_Entry2_Foo_Bar).
271 name = re.sub('([^A-Z_])([A-Z])', r'\1_\2', name) 244 name = re.sub('([^A-Z_])([A-Z])', r'\1_\2', name)
272 return [x.lower() for x in name.split('_')] 245 return [x.lower() for x in name.split('_')]
273 246
274 def UpperCamelCase(name): 247 def UpperCamelCase(name):
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 451
479 def GetImportUri(module): 452 def GetImportUri(module):
480 package = GetPackage(module); 453 package = GetPackage(module);
481 elements = module.namespace.split('.') 454 elements = module.namespace.split('.')
482 elements.append("%s" % module.name) 455 elements.append("%s" % module.name)
483 return os.path.join(package, *elements) 456 return os.path.join(package, *elements)
484 457
485 def RaiseHelper(msg): 458 def RaiseHelper(msg):
486 raise Exception(msg) 459 raise Exception(msg)
487 460
461 def GetSerializedRuntimeTypeInfoLiteral(module, enabled):
462 """ Constructs a string that represents a literal definition in Dart of
463 an array of bytes corresponding to |module.serialized_runtime_type_info|.
464
465 Args:
466 module: {mojom.Module} the module being processed.
467 enabled: {bool} Is this feature enabled.
468
469 Returns: A string of the form 'b0, b1, b2,...' where the 'bi' are
470 the decimal representation of the bytes of
471 |module.serialized_runtime_type_info| or the empty string if either
472 |enabled| is false or |module.serialized_runtime_type_info| is None.
473 Furthermore the returned string will have embedded newline characters inserted
474 every 1000 characters to make the generated source code more tractable.
475 """
476 if not enabled or not module.serialized_runtime_type_info:
477 return ''
478 return '%s' % ','.join('%s%d' %
479 ('\n' if index > 0 and index%1000 == 0 else '', b)
480 for index, b in enumerate(module.serialized_runtime_type_info))
481
488 class Generator(generator.Generator): 482 class Generator(generator.Generator):
489 483
490 dart_filters = { 484 dart_filters = {
491 'array_expected_length': GetArrayExpectedLength, 485 'array_expected_length': GetArrayExpectedLength,
492 'array': GetArrayKind, 486 'array': GetArrayKind,
493 'decode_method': DecodeMethod, 487 'decode_method': DecodeMethod,
494 'default_value': DartDefaultValue, 488 'default_value': DartDefaultValue,
495 'encode_method': EncodeMethod, 489 'encode_method': EncodeMethod,
496 'fullidentifier': mojom.GetMojomTypeFullIdentifier,
497 'simple_mojom_type_name': GetSimpleMojomTypeName,
498 'mojom_type_name': mojom.GetMojomTypeName,
499 'mojom_type_identifier': mojom.GetMojomTypeIdentifier,
500 'is_imported_kind': IsImportedKind, 490 'is_imported_kind': IsImportedKind,
501 'is_array_kind': mojom.IsArrayKind, 491 'is_array_kind': mojom.IsArrayKind,
502 'is_map_kind': mojom.IsMapKind, 492 'is_map_kind': mojom.IsMapKind,
503 'is_numerical_kind': mojom.IsNumericalKind, 493 'is_numerical_kind': mojom.IsNumericalKind,
504 'is_any_handle_kind': mojom.IsAnyHandleKind, 494 'is_any_handle_kind': mojom.IsAnyHandleKind,
505 'is_string_kind': mojom.IsStringKind, 495 'is_string_kind': mojom.IsStringKind,
506 'is_nullable_kind': mojom.IsNullableKind, 496 'is_nullable_kind': mojom.IsNullableKind,
507 'is_pointer_array_kind': IsPointerArrayKind, 497 'is_pointer_array_kind': IsPointerArrayKind,
508 'is_enum_array_kind': IsEnumArrayKind, 498 'is_enum_array_kind': IsEnumArrayKind,
509 'is_struct_kind': mojom.IsStructKind, 499 'is_struct_kind': mojom.IsStructKind,
(...skipping 28 matching lines...) Expand all
538 "namespace": self.module.namespace, 528 "namespace": self.module.namespace,
539 "imports": self.GetImports(args), 529 "imports": self.GetImports(args),
540 "kinds": self.module.kinds, 530 "kinds": self.module.kinds,
541 "enums": self.module.enums, 531 "enums": self.module.enums,
542 "module": resolver.ResolveConstants(self.module, ExpressionToText), 532 "module": resolver.ResolveConstants(self.module, ExpressionToText),
543 "structs": self.GetStructs() + self.GetStructsFromMethods(), 533 "structs": self.GetStructs() + self.GetStructsFromMethods(),
544 "unions": self.GetUnions(), 534 "unions": self.GetUnions(),
545 "interfaces": self.GetInterfaces(), 535 "interfaces": self.GetInterfaces(),
546 "imported_interfaces": self.GetImportedInterfaces(), 536 "imported_interfaces": self.GetImportedInterfaces(),
547 "imported_from": self.ImportedFrom(), 537 "imported_from": self.ImportedFrom(),
538 "serialized_runtime_type_info_literal" : (
539 GetSerializedRuntimeTypeInfoLiteral(self.module,
540 self.should_gen_mojom_types)),
548 "typepkg": '%s.' % _mojom_types_pkg_short, 541 "typepkg": '%s.' % _mojom_types_pkg_short,
549 "descpkg": '%s.' % _service_describer_pkg_short, 542 "descpkg": '%s.' % _service_describer_pkg_short,
550 "mojom_types_import": 'import \'%s\' as %s;' % \ 543 "mojom_types_import": 'import \'%s\' as %s;' % \
551 (_mojom_types_pkg, _mojom_types_pkg_short), 544 (_mojom_types_pkg, _mojom_types_pkg_short),
552 "service_describer_import": 'import \'%s\' as %s;' % \ 545 "service_describer_import": 'import \'%s\' as %s;' % \
553 (_service_describer_pkg, _service_describer_pkg_short), 546 (_service_describer_pkg, _service_describer_pkg_short),
554 "has_handles": has_handles, 547 "has_handles": has_handles,
555 } 548 }
556 549
557 # If this is the mojom types package, clear the import-related params. 550 # If this is the mojom types package, clear the import-related params.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 interface_to_import[name] = each_import["unique_name"] + "." + name 652 interface_to_import[name] = each_import["unique_name"] + "." + name
660 return interface_to_import 653 return interface_to_import
661 654
662 def ImportedFrom(self): 655 def ImportedFrom(self):
663 interface_to_import = {} 656 interface_to_import = {}
664 for each_import in self.module.imports: 657 for each_import in self.module.imports:
665 for each_interface in each_import["module"].interfaces: 658 for each_interface in each_import["module"].interfaces:
666 name = each_interface.name 659 name = each_interface.name
667 interface_to_import[name] = each_import["unique_name"] + "." 660 interface_to_import[name] = each_import["unique_name"] + "."
668 return interface_to_import 661 return interface_to_import
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698