|  | @@ -2677,13 +2677,63 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |      assertHasWireData(message, false);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  public void testNullRepeatedFields() throws Exception {
 | 
	
		
			
				|  |  | +    // Check that serialization after explicitly setting a repeated field
 | 
	
		
			
				|  |  | +    // to null doesn't NPE.
 | 
	
		
			
				|  |  | +    TestAllTypesNano message = new TestAllTypesNano();
 | 
	
		
			
				|  |  | +    message.repeatedInt32 = null;
 | 
	
		
			
				|  |  | +    MessageNano.toByteArray(message);  // should not NPE
 | 
	
		
			
				|  |  | +    message.toString(); // should not NPE
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    message = new TestAllTypesNano();
 | 
	
		
			
				|  |  | +    message.repeatedNestedEnum = null;
 | 
	
		
			
				|  |  | +    MessageNano.toByteArray(message);  // should not NPE
 | 
	
		
			
				|  |  | +    message.toString(); // should not NPE
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    message = new TestAllTypesNano();
 | 
	
		
			
				|  |  | +    message.repeatedBytes = null;
 | 
	
		
			
				|  |  | +    MessageNano.toByteArray(message); // should not NPE
 | 
	
		
			
				|  |  | +    message.toString(); // should not NPE
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    message = new TestAllTypesNano();
 | 
	
		
			
				|  |  | +    message.repeatedNestedMessage = null;
 | 
	
		
			
				|  |  | +    MessageNano.toByteArray(message); // should not NPE
 | 
	
		
			
				|  |  | +    message.toString(); // should not NPE
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Create a second message to merge into message.
 | 
	
		
			
				|  |  | +    TestAllTypesNano secondMessage = new TestAllTypesNano();
 | 
	
		
			
				|  |  | +    TestAllTypesNano.NestedMessage nested =
 | 
	
		
			
				|  |  | +        new TestAllTypesNano.NestedMessage();
 | 
	
		
			
				|  |  | +    nested.bb = 55;
 | 
	
		
			
				|  |  | +    secondMessage.repeatedNestedMessage =
 | 
	
		
			
				|  |  | +        new TestAllTypesNano.NestedMessage[] { nested };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Should not NPE
 | 
	
		
			
				|  |  | +    message.mergeFrom(CodedInputByteBufferNano.newInstance(
 | 
	
		
			
				|  |  | +        MessageNano.toByteArray(secondMessage)));
 | 
	
		
			
				|  |  | +    assertEquals(55, message.repeatedNestedMessage[0].bb);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    private void assertHasWireData(MessageNano message, boolean expected) {
 | 
	
		
			
				|  |  | -    int wireLength = MessageNano.toByteArray(message).length;
 | 
	
		
			
				|  |  | +    byte[] bytes = MessageNano.toByteArray(message);
 | 
	
		
			
				|  |  | +    int wireLength = bytes.length;
 | 
	
		
			
				|  |  |      if (expected) {
 | 
	
		
			
				|  |  |        assertFalse(wireLength == 0);
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -      assertEquals(0, wireLength);
 | 
	
		
			
				|  |  | +      if (wireLength != 0) {
 | 
	
		
			
				|  |  | +        fail("Expected no wire data for message \n" + message
 | 
	
		
			
				|  |  | +            + "\nBut got:\n"
 | 
	
		
			
				|  |  | +            + hexDump(bytes));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  private static String hexDump(byte[] bytes) {
 | 
	
		
			
				|  |  | +    StringBuilder sb = new StringBuilder();
 | 
	
		
			
				|  |  | +    for (byte b : bytes) {
 | 
	
		
			
				|  |  | +      sb.append(String.format("%02x ", b));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    return sb.toString();
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    private <T> List<T> list(T first, T... remaining) {
 |