|  | @@ -2271,9 +2271,10 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |    public void testNanoWithAccessorsBasic() throws Exception {
 | 
	
		
			
				|  |  |      TestNanoAccessors msg = new TestNanoAccessors();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // Makes sure required and repeated fields are still public fields
 | 
	
		
			
				|  |  | +    // Makes sure required, repeated, and message fields are still public
 | 
	
		
			
				|  |  |      msg.id = 3;
 | 
	
		
			
				|  |  |      msg.repeatedBytes = new byte[2][3];
 | 
	
		
			
				|  |  | +    msg.optionalNestedMessage = null;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Test accessors
 | 
	
		
			
				|  |  |      assertEquals(0, msg.getOptionalInt32());
 | 
	
	
		
			
				|  | @@ -2295,10 +2296,6 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |        msg.setOptionalString(null);
 | 
	
		
			
				|  |  |        fail();
 | 
	
		
			
				|  |  |      } catch (NullPointerException expected) {}
 | 
	
		
			
				|  |  | -    try {
 | 
	
		
			
				|  |  | -      msg.setOptionalNestedMessage(null);
 | 
	
		
			
				|  |  | -      fail();
 | 
	
		
			
				|  |  | -    } catch (NullPointerException expected) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Test has bit on bytes field with defaults and clear() re-clones the default array
 | 
	
		
			
				|  |  |      assertFalse(msg.hasDefaultBytes());
 | 
	
	
		
			
				|  | @@ -2352,8 +2349,8 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |        assertFalse(msg.hasDefaultBytes());
 | 
	
		
			
				|  |  |        assertFalse(msg.hasDefaultFloatNan());
 | 
	
		
			
				|  |  |        assertFalse(msg.hasDefaultNestedEnum());
 | 
	
		
			
				|  |  | -      msg.setOptionalNestedMessage(new TestNanoAccessors.NestedMessage());
 | 
	
		
			
				|  |  | -      msg.getOptionalNestedMessage().setBb(2);
 | 
	
		
			
				|  |  | +      msg.optionalNestedMessage = new TestNanoAccessors.NestedMessage();
 | 
	
		
			
				|  |  | +      msg.optionalNestedMessage.setBb(2);
 | 
	
		
			
				|  |  |        msg.setOptionalNestedEnum(TestNanoAccessors.BAZ);
 | 
	
		
			
				|  |  |        msg.setDefaultInt32(msg.getDefaultInt32());
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -2366,8 +2363,8 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Has fields true upon parse.
 | 
	
		
			
				|  |  |      TestNanoAccessors newMsg = TestNanoAccessors.parseFrom(result);
 | 
	
		
			
				|  |  | -    assertEquals(2, newMsg.getOptionalNestedMessage().getBb());
 | 
	
		
			
				|  |  | -    assertTrue(newMsg.getOptionalNestedMessage().hasBb());
 | 
	
		
			
				|  |  | +    assertEquals(2, newMsg.optionalNestedMessage.getBb());
 | 
	
		
			
				|  |  | +    assertTrue(newMsg.optionalNestedMessage.hasBb());
 | 
	
		
			
				|  |  |      assertEquals(TestNanoAccessors.BAZ, newMsg.getOptionalNestedEnum());
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasOptionalNestedEnum());
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2376,6 +2373,38 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |      assertEquals(41, newMsg.getDefaultInt32());
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  public void testNanoWithAccessorsPublicFieldTypes() throws Exception {
 | 
	
		
			
				|  |  | +    TestNanoAccessors msg = new TestNanoAccessors();
 | 
	
		
			
				|  |  | +    assertNull(msg.optionalNestedMessage);
 | 
	
		
			
				|  |  | +    assertEquals(0, msg.id);
 | 
	
		
			
				|  |  | +    assertEquals(0, msg.repeatedNestedEnum.length);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestNanoAccessors newMsg = TestNanoAccessors.parseFrom(MessageNano.toByteArray(msg));
 | 
	
		
			
				|  |  | +    assertNull(newMsg.optionalNestedMessage);
 | 
	
		
			
				|  |  | +    assertEquals(0, newMsg.id);
 | 
	
		
			
				|  |  | +    assertEquals(0, newMsg.repeatedNestedEnum.length);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestNanoAccessors.NestedMessage nestedMessage = new TestNanoAccessors.NestedMessage();
 | 
	
		
			
				|  |  | +    nestedMessage.setBb(5);
 | 
	
		
			
				|  |  | +    newMsg.optionalNestedMessage = nestedMessage;
 | 
	
		
			
				|  |  | +    newMsg.id = -1;
 | 
	
		
			
				|  |  | +    newMsg.repeatedNestedEnum = new int[] { TestAllTypesNano.FOO };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestNanoAccessors newMsg2 = TestNanoAccessors.parseFrom(MessageNano.toByteArray(newMsg));
 | 
	
		
			
				|  |  | +    assertEquals(nestedMessage.getBb(), newMsg2.optionalNestedMessage.getBb());
 | 
	
		
			
				|  |  | +    assertEquals(-1, newMsg2.id);
 | 
	
		
			
				|  |  | +    assertEquals(TestAllTypesNano.FOO, newMsg2.repeatedNestedEnum[0]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    newMsg2.optionalNestedMessage = null;
 | 
	
		
			
				|  |  | +    newMsg2.id = 0;
 | 
	
		
			
				|  |  | +    newMsg2.repeatedNestedEnum = null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    TestNanoAccessors newMsg3 = TestNanoAccessors.parseFrom(MessageNano.toByteArray(newMsg2));
 | 
	
		
			
				|  |  | +    assertNull(newMsg3.optionalNestedMessage);
 | 
	
		
			
				|  |  | +    assertEquals(0, newMsg3.id);
 | 
	
		
			
				|  |  | +    assertEquals(0, newMsg3.repeatedNestedEnum.length);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    public void testNanoWithAccessorsSerialize() throws Exception {
 | 
	
		
			
				|  |  |      TestNanoAccessors msg = new TestNanoAccessors();
 | 
	
		
			
				|  |  |      msg.setOptionalInt32(msg.getOptionalInt32());
 | 
	
	
		
			
				|  | @@ -2383,7 +2412,7 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |      msg.setOptionalBytes(msg.getOptionalBytes());
 | 
	
		
			
				|  |  |      TestNanoAccessors.NestedMessage nestedMessage = new TestNanoAccessors.NestedMessage();
 | 
	
		
			
				|  |  |      nestedMessage.setBb(nestedMessage.getBb());
 | 
	
		
			
				|  |  | -    msg.setOptionalNestedMessage(nestedMessage);
 | 
	
		
			
				|  |  | +    msg.optionalNestedMessage = nestedMessage;
 | 
	
		
			
				|  |  |      msg.setOptionalNestedEnum(msg.getOptionalNestedEnum());
 | 
	
		
			
				|  |  |      msg.setDefaultInt32(msg.getDefaultInt32());
 | 
	
		
			
				|  |  |      msg.setDefaultString(msg.getDefaultString());
 | 
	
	
		
			
				|  | @@ -2400,8 +2429,7 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasOptionalInt32());
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasOptionalString());
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasOptionalBytes());
 | 
	
		
			
				|  |  | -    assertTrue(newMsg.hasOptionalNestedMessage());
 | 
	
		
			
				|  |  | -    assertTrue(newMsg.getOptionalNestedMessage().hasBb());
 | 
	
		
			
				|  |  | +    assertTrue(newMsg.optionalNestedMessage.hasBb());
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasOptionalNestedEnum());
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasDefaultInt32());
 | 
	
		
			
				|  |  |      assertTrue(newMsg.hasDefaultString());
 | 
	
	
		
			
				|  | @@ -2411,7 +2439,7 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |      assertEquals(0, newMsg.getOptionalInt32());
 | 
	
		
			
				|  |  |      assertEquals(0, newMsg.getOptionalString().length());
 | 
	
		
			
				|  |  |      assertEquals(0, newMsg.getOptionalBytes().length);
 | 
	
		
			
				|  |  | -    assertEquals(0, newMsg.getOptionalNestedMessage().getBb());
 | 
	
		
			
				|  |  | +    assertEquals(0, newMsg.optionalNestedMessage.getBb());
 | 
	
		
			
				|  |  |      assertEquals(TestNanoAccessors.FOO, newMsg.getOptionalNestedEnum());
 | 
	
		
			
				|  |  |      assertEquals(41, newMsg.getDefaultInt32());
 | 
	
		
			
				|  |  |      assertEquals("hello", newMsg.getDefaultString());
 | 
	
	
		
			
				|  | @@ -2856,15 +2884,15 @@ public class NanoTest extends TestCase {
 | 
	
		
			
				|  |  |          .setOptionalInt32(5)
 | 
	
		
			
				|  |  |          .setOptionalString("Hello")
 | 
	
		
			
				|  |  |          .setOptionalBytes(new byte[] {1, 2, 3})
 | 
	
		
			
				|  |  | -        .setOptionalNestedMessage(new TestNanoAccessors.NestedMessage().setBb(27))
 | 
	
		
			
				|  |  |          .setOptionalNestedEnum(TestNanoAccessors.BAR)
 | 
	
		
			
				|  |  |          .setDefaultFloatNan(1.0f);
 | 
	
		
			
				|  |  | +    message.optionalNestedMessage = new TestNanoAccessors.NestedMessage().setBb(27);
 | 
	
		
			
				|  |  |      message.repeatedInt32 = new int[] { 5, 6, 7, 8 };
 | 
	
		
			
				|  |  |      message.repeatedString = new String[] { "One", "Two" };
 | 
	
		
			
				|  |  |      message.repeatedBytes = new byte[][] { { 2, 7 }, { 2, 7 } };
 | 
	
		
			
				|  |  |      message.repeatedNestedMessage = new TestNanoAccessors.NestedMessage[] {
 | 
	
		
			
				|  |  | -      message.getOptionalNestedMessage(),
 | 
	
		
			
				|  |  | -      message.getOptionalNestedMessage()
 | 
	
		
			
				|  |  | +      message.optionalNestedMessage,
 | 
	
		
			
				|  |  | +      message.optionalNestedMessage
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      message.repeatedNestedEnum = new int[] {
 | 
	
		
			
				|  |  |        TestAllTypesNano.BAR,
 |