Selaa lähdekoodia

Merge "Make it possible to use MessageNano.mergeFrom without casting."

Ulas Kirazci 12 vuotta sitten
vanhempi
commit
b8f5dad1c7

+ 3 - 3
java/src/main/java/com/google/protobuf/nano/MessageNano.java

@@ -101,7 +101,7 @@ public abstract class MessageNano {
      * Parse {@code data} as a message of this type and merge it with the
      * message being built.
      */
-    public static final MessageNano mergeFrom(MessageNano msg, final byte[] data)
+    public static final <T extends MessageNano> T mergeFrom(T msg, final byte[] data)
         throws InvalidProtocolBufferNanoException {
         return mergeFrom(msg, data, 0, data.length);
     }
@@ -110,8 +110,8 @@ public abstract class MessageNano {
      * Parse {@code data} as a message of this type and merge it with the
      * message being built.
      */
-    public static final MessageNano mergeFrom(MessageNano msg, final byte[] data, final int off,
-        final int len) throws InvalidProtocolBufferNanoException {
+    public static final <T extends MessageNano> T mergeFrom(T msg, final byte[] data,
+            final int off, final int len) throws InvalidProtocolBufferNanoException {
         try {
             final CodedInputByteBufferNano input =
                 CodedInputByteBufferNano.newInstance(data, off, len);

+ 9 - 0
java/src/test/java/com/google/protobuf/NanoTest.java

@@ -2241,6 +2241,15 @@ public class NanoTest extends TestCase {
     assertEquals(0, MessageNano.toByteArray(deserialized).length);
   }
 
+  public void testMergeFrom() throws Exception {
+    SimpleMessageNano message = new SimpleMessageNano();
+    message.d = 123;
+    byte[] bytes = MessageNano.toByteArray(message);
+
+    SimpleMessageNano newMessage = MessageNano.mergeFrom(new SimpleMessageNano(), bytes);
+    assertEquals(message.d, newMessage.d);
+  }
+
   private <T> List<T> list(T first, T... remaining) {
     List<T> list = new ArrayList<T>();
     list.add(first);

+ 1 - 1
src/google/protobuf/compiler/javanano/javanano_message.cc

@@ -362,7 +362,7 @@ GenerateParseFromMethods(io::Printer* printer) {
   printer->Print(
     "public $static$ $classname$ parseFrom(byte[] data)\n"
     "    throws com.google.protobuf.nano.InvalidProtocolBufferNanoException {\n"
-    "  return ($classname$) com.google.protobuf.nano.MessageNano.mergeFrom(new $classname$(), data);\n"
+    "  return com.google.protobuf.nano.MessageNano.mergeFrom(new $classname$(), data);\n"
     "}\n"
     "\n"
     "public $static$ $classname$ parseFrom(\n"