Mojo: Fix warnings when generating code for empty struct in java.

BUG=404873
R=ppi@chromium.org

Review URL: https://codereview.chromium.org/484983003

Cr-Commit-Position: refs/heads/master@{#290579}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290579 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 3e38f1f9ee9225a78bf89f836de1340f2208340d
diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
index d26955b..efb227c 100644
--- a/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
+++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
@@ -20,6 +20,7 @@
 import org.chromium.mojo.bindings.test.mojom.sample.Foo;
 import org.chromium.mojo.bindings.test.mojom.sample.InterfaceConstants;
 import org.chromium.mojo.bindings.test.mojom.sample.SampleServiceConstants;
+import org.chromium.mojo.bindings.test.mojom.test_structs.EmptyStruct;
 import org.chromium.mojo.system.DataPipe.ConsumerHandle;
 import org.chromium.mojo.system.DataPipe.ProducerHandle;
 import org.chromium.mojo.system.MessagePipeHandle;
@@ -237,4 +238,15 @@
         assertFooEquals(typicalFoo, deserializedFoo);
     }
 
+    /**
+     * Testing serialization of the EmptyStruct class.
+     */
+    @SmallTest
+    public void testEmptyStructSerialization() {
+        // Checking serialization and deserialization of a EmptyStruct object.
+        Message serializedStruct = new EmptyStruct().serialize(null);
+        EmptyStruct emptyStruct = EmptyStruct.deserialize(serializedStruct);
+        assertNotNull(emptyStruct);
+    }
+
 }
diff --git a/mojo/public/interfaces/bindings/tests/test_structs.mojom b/mojo/public/interfaces/bindings/tests/test_structs.mojom
index 8bc33b3..6c0c429 100644
--- a/mojo/public/interfaces/bindings/tests/test_structs.mojom
+++ b/mojo/public/interfaces/bindings/tests/test_structs.mojom
@@ -22,4 +22,7 @@
   Rect? second;
 };
 
+struct EmptyStruct {
+};
+
 }
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 623fa09..c878e02 100644
--- a/mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/java_templates/struct_definition.tmpl
@@ -78,7 +78,11 @@
             return null;
         }
         {{struct|name}} result = new {{struct|name}}();
+{% if not struct.bytes %}
+        decoder0.readDataHeader();
+{% else %}
         DataHeader mainDataHeader = decoder0.readDataHeader();
+{% endif %}
 {% for byte in struct.bytes %}
 {%   for packed_field in byte.packed_fields %}
         if (mainDataHeader.numFields > {{packed_field.ordinal}}) {
@@ -91,7 +95,11 @@
 
     @Override
     protected final void encode(org.chromium.mojo.bindings.Encoder encoder) {
+{% if not struct.bytes %}
+        encoder.getEncoderAtDataOffset(DEFAULT_STRUCT_INFO);
+{% else %}
         org.chromium.mojo.bindings.Encoder encoder0 = encoder.getEncoderAtDataOffset(DEFAULT_STRUCT_INFO);
+{% endif %}
 {% for byte in struct.bytes %}
 {%   for packed_field in byte.packed_fields %}
         {{encode(packed_field.field|name, packed_field.field.kind, 8+packed_field.offset, packed_field.bit)|indent(8)}}