am d20f0a42: Merge "Fix NPE when clearing an extension in nano protos"

* commit 'd20f0a4260763531acf5de677e4830afe0bfc53e':
  Fix NPE when clearing an extension in nano protos
This commit is contained in:
Jan-Willem Maarse 2014-05-01 18:36:30 +00:00 committed by Android Git Automerger
commit 3e46c9b5da
2 changed files with 15 additions and 1 deletions

View File

@ -268,7 +268,7 @@ public class Extension<M extends ExtendableMessageNano<M>, T> {
// After deletion or no-op addition (due to 'value' being an array of empty or
// null-only elements), unknownFields may be empty. Discard the ArrayList if so.
return (unknownFields.size() == 0) ? null : unknownFields;
return (unknownFields == null || unknownFields.isEmpty()) ? null : unknownFields;
}
protected UnknownFieldData writeData(Object value) {

View File

@ -2910,6 +2910,20 @@ public class NanoTest extends TestCase {
assertTrue(Arrays.equals(enums, message.getExtension(RepeatedExtensions.repeatedEnum)));
}
public void testNullExtensions() throws Exception {
// Check that clearing the extension on an empty message is a no-op.
Extensions.ExtendableMessage message = new Extensions.ExtendableMessage();
message.setExtension(SingularExtensions.someMessage, null);
assertEquals(0, MessageNano.toByteArray(message).length);
// Check that the message is empty after setting and clearing an extension.
AnotherMessage another = new AnotherMessage();
message.setExtension(SingularExtensions.someMessage, another);
assertTrue(MessageNano.toByteArray(message).length > 0);
message.setExtension(SingularExtensions.someMessage, null);
assertEquals(0, MessageNano.toByteArray(message).length);
}
public void testUnknownFields() throws Exception {
// Check that we roundtrip (serialize and deserialize) unrecognized fields.
AnotherMessage message = new AnotherMessage();