| Index: third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_dart_generator.py
|
| diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_dart_generator.py b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_dart_generator.py
|
| index 11e300cfadf99734e698ab6fe4e19eb2c3937a36..8c9a368a17fc8de65b98311a56dffecd267aca28 100644
|
| --- a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_dart_generator.py
|
| +++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_dart_generator.py
|
| @@ -136,6 +136,8 @@ def DartDefaultValue(field):
|
| return _kind_to_dart_default_value[field.kind]
|
| if mojom.IsStructKind(field.kind):
|
| return "null"
|
| + if mojom.IsUnionKind(field.kind):
|
| + return "null"
|
| if mojom.IsArrayKind(field.kind):
|
| return "null"
|
| if mojom.IsMapKind(field.kind):
|
| @@ -149,8 +151,10 @@ def DartDefaultValue(field):
|
| def DartDeclType(kind):
|
| if kind in mojom.PRIMITIVES:
|
| return _kind_to_dart_decl_type[kind]
|
| - if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind):
|
| + if mojom.IsStructKind(kind):
|
| return GetDartType(kind)
|
| + if mojom.IsUnionKind(kind):
|
| + return "%sWrapper" % GetDartType(kind)
|
| if mojom.IsArrayKind(kind):
|
| array_type = DartDeclType(kind.kind)
|
| return "List<" + array_type + ">"
|
| @@ -189,6 +193,9 @@ def ConstantStyle(name):
|
| components[0] = '_' + components[0]
|
| return '_'.join([x.upper() for x in components])
|
|
|
| +def DotToUnderscore(name):
|
| + return name.replace('.', '_')
|
| +
|
| def GetNameForElement(element):
|
| if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or
|
| mojom.IsStructKind(element) or mojom.IsUnionKind(element)):
|
| @@ -197,8 +204,10 @@ def GetNameForElement(element):
|
| return GetNameForElement(element.kind)
|
| if isinstance(element, (mojom.Method,
|
| mojom.Parameter,
|
| - mojom.Field)):
|
| + mojom.StructField)):
|
| return CamelCase(element.name)
|
| + if isinstance(element, mojom.UnionField):
|
| + return "f%s" % UpperCamelCase(element.name)
|
| if isinstance(element, mojom.EnumValue):
|
| return (GetNameForElement(element.enum) + '.' +
|
| ConstantStyle(element.name))
|
| @@ -208,6 +217,12 @@ def GetNameForElement(element):
|
| return ConstantStyle(element.name)
|
| raise Exception('Unexpected element: %s' % element)
|
|
|
| +def GetUnionFieldTagName(element):
|
| + if not isinstance(element, mojom.UnionField):
|
| + raise Exception('Unexpected element: %s is not a union field.' % element)
|
| +
|
| + return 'tag%s' % UpperCamelCase(element.name)
|
| +
|
| def GetInterfaceResponseName(method):
|
| return UpperCamelCase(method.name + 'Response')
|
|
|
| @@ -381,7 +396,9 @@ class Generator(generator.Generator):
|
| 'dart_true_false': GetDartTrueFalse,
|
| 'dart_type': DartDeclType,
|
| 'name': GetNameForElement,
|
| + 'tag_name': GetUnionFieldTagName,
|
| 'interface_response_name': GetInterfaceResponseName,
|
| + 'dot_to_underscore': DotToUnderscore,
|
| }
|
|
|
| def GetParameters(self, args):
|
| @@ -392,6 +409,7 @@ class Generator(generator.Generator):
|
| "enums": self.module.enums,
|
| "module": resolver.ResolveConstants(self.module, ExpressionToText),
|
| "structs": self.GetStructs() + self.GetStructsFromMethods(),
|
| + "unions": self.GetUnions(),
|
| "interfaces": self.GetInterfaces(),
|
| "imported_interfaces": self.GetImportedInterfaces(),
|
| "imported_from": self.ImportedFrom(),
|
|
|