am 9827c718: Merge "Fix roundtrip failure with groups when unknown fields are enabled."

* commit '9827c718c45cfa1744a3b0f8fc27dac9cd415603':
  Fix roundtrip failure with groups when unknown fields are enabled.
pull/91/head
Ulas Kirazci 11 years ago committed by Android Git Automerger
commit ba1b8baf00
  1. 9
      java/src/main/java/com/google/protobuf/nano/WireFormatNano.java
  2. 17
      java/src/test/java/com/google/protobuf/NanoTest.java
  3. 6
      src/google/protobuf/unittest_extension_nano.proto

@ -119,6 +119,9 @@ public final class WireFormatNano {
* <p>Generated messages will call this for unknown fields if the store_unknown_fields
* option is on.
*
* <p>Note that the tag might be a end-group tag (rather than the start of an unknown field) in
* which case we do not want to add an unknown field entry.
*
* @param data a Collection in which to store the data.
* @param input the input buffer.
* @param tag the tag of the field.
@ -130,11 +133,13 @@ public final class WireFormatNano {
final CodedInputByteBufferNano input,
final int tag) throws IOException {
int startPos = input.getPosition();
boolean skip = input.skipField(tag);
if (!input.skipField(tag)) {
return false; // This wasn't an unknown field, it's an end-group tag.
}
int endPos = input.getPosition();
byte[] bytes = input.getData(startPos, endPos - startPos);
data.add(new UnknownFieldData(tag, bytes));
return skip;
return true;
}
/**

@ -35,6 +35,7 @@ import com.google.protobuf.nano.EnumClassNanoMultiple;
import com.google.protobuf.nano.EnumClassNanos;
import com.google.protobuf.nano.Extensions;
import com.google.protobuf.nano.Extensions.AnotherMessage;
import com.google.protobuf.nano.Extensions.MessageWithGroup;
import com.google.protobuf.nano.FileScopeEnumMultiple;
import com.google.protobuf.nano.FileScopeEnumRefNano;
import com.google.protobuf.nano.InternalNano;
@ -505,6 +506,22 @@ public class NanoTest extends TestCase {
assertEquals(1, newMsg.optionalGroup.a);
}
public void testNanoOptionalGroupWithUnknownFieldsEnabled() throws Exception {
MessageWithGroup msg = new MessageWithGroup();
MessageWithGroup.Group grp = new MessageWithGroup.Group();
grp.a = 1;
msg.group = grp;
byte [] serialized = MessageNano.toByteArray(msg);
MessageWithGroup parsed = MessageWithGroup.parseFrom(serialized);
assertTrue(msg.group != null);
assertEquals(1, msg.group.a);
byte [] serialized2 = MessageNano.toByteArray(parsed);
assertEquals(serialized2.length, serialized.length);
MessageWithGroup parsed2 = MessageWithGroup.parseFrom(serialized2);
}
public void testNanoOptionalNestedMessage() throws Exception {
TestAllTypesNano msg = new TestAllTypesNano();
TestAllTypesNano.NestedMessage nestedMsg = new TestAllTypesNano.NestedMessage();

@ -42,3 +42,9 @@ message ContainerMessage {
optional bool another_thing = 100;
}
}
message MessageWithGroup {
optional group Group = 1 {
optional int32 a = 2;
}
}

Loading…
Cancel
Save