Index: mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl b/mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl |
index d95a4d42f140ef0240e41ecdab221bb01e4caaa3..05d1f752bfde2f33df2c45d416dc8f5e7c92799c 100644 |
--- a/mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl |
@@ -1,12 +1,16 @@ |
{% from "constant_definition.tmpl" import constant_def %} |
{% from "enum_definition.tmpl" import enum_def %} |
-{% macro encode(variable, kind, offset, bit, level=0) %} |
+{% macro encode(variable, kind, offset, bit, level=0, check_for_null=True) %} |
{% if kind|is_pointer_array_kind %} |
{% set sub_kind = kind.kind %} |
+{% if check_for_null %} |
if ({{variable}} == null) { |
encoder{{level}}.encodeNullPointer({{offset}}, {{kind|is_nullable_kind|java_true_false}}); |
} else { |
+{% else %} |
+{ |
+{% endif %} |
org.chromium.mojo.bindings.Encoder encoder{{level + 1}} = encoder{{level}}.encodePointerArray({{variable}}.length, {{offset}}, {{kind|array_expected_length}}); |
for (int i{{level}} = 0; i{{level}} < {{variable}}.length; ++i{{level}}) { |
{{encode(variable~'[i'~level~']', sub_kind, 'DataHeader.HEADER_SIZE + org.chromium.mojo.bindings.BindingsHelper.POINTER_SIZE * i'~level, 0, level+1)|indent(8)}} |
@@ -25,8 +29,8 @@ if ({{variable}} == null) { |
keys{{level}}[index{{level}}] = entry{{level}}.getKey(); |
values{{level}}[index{{level}}] = entry{{level}}.getValue(); |
} |
- {{encode('keys'~level, kind.key_kind|array, 'DataHeader.HEADER_SIZE', 0, level+1)|indent(4)}} |
- {{encode('values'~level, kind.value_kind|array, 'DataHeader.HEADER_SIZE + org.chromium.mojo.bindings.BindingsHelper.POINTER_SIZE', 0, level+1)|indent(4)}} |
+ {{encode('keys'~level, kind.key_kind|array, 'DataHeader.HEADER_SIZE', 0, level+1, False)|indent(4)}} |
+ {{encode('values'~level, kind.value_kind|array, 'DataHeader.HEADER_SIZE + org.chromium.mojo.bindings.BindingsHelper.POINTER_SIZE', 0, level+1, False)|indent(4)}} |
} |
{% else %} |
encoder{{level}}.{{kind|encode_method(variable, offset, bit)}}; |
@@ -39,9 +43,13 @@ org.chromium.mojo.bindings.Decoder decoder{{level+1}} = decoder{{level}}.readPoi |
{% if kind|is_struct_kind %} |
{{variable}} = {{kind|java_type}}.decode(decoder{{level+1}}); |
{% else %}{# kind|is_pointer_array_kind or is_map_kind #} |
+{% if kind|is_nullable_kind %} |
if (decoder{{level+1}} == null) { |
{{variable}} = null; |
} else { |
+{% else %} |
+{ |
+{% endif %} |
{% if kind|is_map_kind %} |
decoder{{level+1}}.readDataHeaderForMap(); |
{{kind.key_kind|java_type}}[] keys{{level}}; |