Index: third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_java_generator.py |
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_java_generator.py b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_java_generator.py |
index 78079f39bcda09eec06aa5c928b40ac86ef528f1..554db742aa085fca26985b6b01b841c7a5bb76c2 100644 |
--- a/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_java_generator.py |
+++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/mojom_java_generator.py |
@@ -116,7 +116,7 @@ def ConstantStyle(name): |
def GetNameForElement(element): |
if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or |
- mojom.IsStructKind(element)): |
+ mojom.IsStructKind(element) or mojom.IsUnionKind(element)): |
return UpperCamelCase(element.name) |
if mojom.IsInterfaceRequestKind(element): |
return GetNameForElement(element.kind) |
@@ -243,7 +243,9 @@ def GetBoxedJavaType(context, kind, with_generics=True): |
def GetJavaType(context, kind, boxed=False, with_generics=True): |
if boxed: |
return GetBoxedJavaType(context, kind) |
- if mojom.IsStructKind(kind) or mojom.IsInterfaceKind(kind): |
+ if (mojom.IsStructKind(kind) or |
+ mojom.IsInterfaceKind(kind) or |
+ mojom.IsUnionKind(kind)): |
return GetNameForKind(context, kind) |
if mojom.IsInterfaceRequestKind(kind): |
return ('org.chromium.mojo.bindings.InterfaceRequest<%s>' % |
@@ -344,7 +346,13 @@ def IsPointerArrayKind(kind): |
if not mojom.IsArrayKind(kind): |
return False |
sub_kind = kind.kind |
- return mojom.IsObjectKind(sub_kind) |
+ return mojom.IsObjectKind(sub_kind) and not mojom.IsUnionKind(sub_kind) |
+ |
+def IsUnionArrayKind(kind): |
+ if not mojom.IsArrayKind(kind): |
+ return False |
+ sub_kind = kind.kind |
+ return mojom.IsUnionKind(sub_kind) |
def GetConstantsMainEntityName(module): |
if module.attributes and 'JavaConstantsClassName' in module.attributes: |
@@ -406,11 +414,14 @@ class Generator(generator.Generator): |
'is_pointer_array_kind': IsPointerArrayKind, |
'is_reference_kind': mojom.IsReferenceKind, |
'is_struct_kind': mojom.IsStructKind, |
+ 'is_union_array_kind': IsUnionArrayKind, |
+ 'is_union_kind': mojom.IsUnionKind, |
'java_true_false': GetJavaTrueFalse, |
'java_type': GetJavaType, |
'method_ordinal_name': GetMethodOrdinalName, |
'name': GetNameForElement, |
'new_array': NewArray, |
+ 'ucc': lambda x: UpperCamelCase(x.name), |
} |
def GetJinjaExports(self): |
@@ -435,6 +446,12 @@ class Generator(generator.Generator): |
exports.update({'struct': struct}) |
return exports |
+ @UseJinja('java_templates/union.java.tmpl', filters=java_filters) |
+ def GenerateUnionSource(self, union): |
+ exports = self.GetJinjaExports() |
+ exports.update({'union': union}) |
+ return exports |
+ |
@UseJinja('java_templates/interface.java.tmpl', filters=java_filters) |
def GenerateInterfaceSource(self, interface): |
return self.GetJinjaExportsForInterface(interface) |
@@ -459,6 +476,10 @@ class Generator(generator.Generator): |
self.Write(self.GenerateStructSource(struct), |
'%s.java' % GetNameForElement(struct)) |
+ for union in self.module.unions: |
+ self.Write(self.GenerateUnionSource(union), |
+ '%s.java' % GetNameForElement(union)) |
+ |
for enum in self.module.enums: |
self.Write(self.GenerateEnumSource(enum), |
'%s.java' % GetNameForElement(enum)) |