aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Duff <bduff@google.com>2013-06-28 17:23:51 -0700
committerBrian Duff <bduff@google.com>2013-07-08 22:29:51 -0700
commit19641419a381509bddfc2d0b5d60a411b67b105b (patch)
treeb1d4efef398e24b38285455a65aa2648cfffc884
parent0a1429cc5ee4865550bcdddfae681a30cef58a5a (diff)
downloadexternal_protobuf-19641419a381509bddfc2d0b5d60a411b67b105b.zip
external_protobuf-19641419a381509bddfc2d0b5d60a411b67b105b.tar.gz
external_protobuf-19641419a381509bddfc2d0b5d60a411b67b105b.tar.bz2
Make it possible to use MessageNano.mergeFrom without casting.
You can now do: MyMessage foo = MessageNano.mergeFrom(new MyMessage(), bytes); without having to cast the message returned from mergeFrom. Change-Id: Ibb2ad327f75855d45352ad304c7f054f20dd29c9
-rw-r--r--java/src/main/java/com/google/protobuf/nano/MessageNano.java6
-rw-r--r--java/src/test/java/com/google/protobuf/NanoTest.java9
-rw-r--r--src/google/protobuf/compiler/javanano/javanano_message.cc2
3 files changed, 13 insertions, 4 deletions
diff --git a/java/src/main/java/com/google/protobuf/nano/MessageNano.java b/java/src/main/java/com/google/protobuf/nano/MessageNano.java
index 5c1eb2f..8d4ec39 100644
--- a/java/src/main/java/com/google/protobuf/nano/MessageNano.java
+++ b/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);
diff --git a/java/src/test/java/com/google/protobuf/NanoTest.java b/java/src/test/java/com/google/protobuf/NanoTest.java
index 38fafb9..19f3957 100644
--- a/java/src/test/java/com/google/protobuf/NanoTest.java
+++ b/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);
diff --git a/src/google/protobuf/compiler/javanano/javanano_message.cc b/src/google/protobuf/compiler/javanano/javanano_message.cc
index 2740779..11fb452 100644
--- a/src/google/protobuf/compiler/javanano/javanano_message.cc
+++ b/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"