am d6aeae14: Merge "Don\'t serialize required fields whose \'has\' flags are unset."
* commit 'd6aeae143cde31b79a2d57a3ee0e41d9083d232d': Don't serialize required fields whose 'has' flags are unset.
This commit is contained in:
commit
eeda36e47c
@ -2202,6 +2202,7 @@ public class NanoTest extends TestCase {
|
||||
assertFalse(msg.hasDefaultFloatNan);
|
||||
assertFalse(msg.hasDefaultNestedEnum);
|
||||
assertFalse(msg.hasId);
|
||||
assertFalse(msg.hasRequiredEnum);
|
||||
msg.optionalInt32 = 123;
|
||||
msg.optionalNestedMessage = new TestAllTypesNanoHas.NestedMessage();
|
||||
msg.optionalNestedMessage.bb = 2;
|
||||
@ -2211,7 +2212,7 @@ public class NanoTest extends TestCase {
|
||||
byte [] result = MessageNano.toByteArray(msg);
|
||||
int msgSerializedSize = msg.getSerializedSize();
|
||||
//System.out.printf("mss=%d result.length=%d\n", msgSerializedSize, result.length);
|
||||
assertTrue(msgSerializedSize == 13);
|
||||
assertTrue(msgSerializedSize == 10);
|
||||
assertEquals(result.length, msgSerializedSize);
|
||||
|
||||
// Has fields true upon parse.
|
||||
@ -2237,6 +2238,8 @@ public class NanoTest extends TestCase {
|
||||
msg.hasDefaultBytes = true;
|
||||
msg.hasDefaultFloatNan = true;
|
||||
msg.hasDefaultNestedEnum = true;
|
||||
msg.hasId = true;
|
||||
msg.hasRequiredEnum = true;
|
||||
|
||||
byte [] result = MessageNano.toByteArray(msg);
|
||||
int msgSerializedSize = msg.getSerializedSize();
|
||||
@ -2255,6 +2258,7 @@ public class NanoTest extends TestCase {
|
||||
assertTrue(newMsg.hasDefaultFloatNan);
|
||||
assertTrue(newMsg.hasDefaultNestedEnum);
|
||||
assertTrue(newMsg.hasId);
|
||||
assertTrue(newMsg.hasRequiredEnum);
|
||||
assertEquals(0, newMsg.optionalInt32);
|
||||
assertEquals(0, newMsg.optionalString.length());
|
||||
assertEquals(0, newMsg.optionalBytes.length);
|
||||
@ -2266,6 +2270,7 @@ public class NanoTest extends TestCase {
|
||||
assertEquals(TestAllTypesNanoHas.BAR, newMsg.defaultNestedEnum);
|
||||
assertEquals(Float.NaN, newMsg.defaultFloatNan);
|
||||
assertEquals(0, newMsg.id);
|
||||
assertEquals(TestAllTypesNanoHas.FOO, newMsg.requiredEnum);
|
||||
}
|
||||
|
||||
public void testNanoWithAccessorsBasic() throws Exception {
|
||||
|
@ -121,7 +121,8 @@ GenerateMergingCode(io::Printer* printer) const {
|
||||
|
||||
void EnumFieldGenerator::
|
||||
GenerateSerializationCode(io::Printer* printer) const {
|
||||
if (descriptor_->is_required()) {
|
||||
if (descriptor_->is_required() && !params_.generate_has()) {
|
||||
// Always serialize a required field if we don't have the 'has' signal.
|
||||
printer->Print(variables_,
|
||||
"output.writeInt32($number$, this.$name$);\n");
|
||||
} else {
|
||||
@ -140,7 +141,7 @@ GenerateSerializationCode(io::Printer* printer) const {
|
||||
|
||||
void EnumFieldGenerator::
|
||||
GenerateSerializedSizeCode(io::Printer* printer) const {
|
||||
if (descriptor_->is_required()) {
|
||||
if (descriptor_->is_required() && !params_.generate_has()) {
|
||||
printer->Print(variables_,
|
||||
"size += com.google.protobuf.nano.CodedOutputByteBufferNano\n"
|
||||
" .computeInt32Size($number$, this.$name$);\n");
|
||||
|
@ -342,7 +342,7 @@ GenerateMembers(io::Printer* printer, bool lazy_init) const {
|
||||
|
||||
if (params_.generate_has()) {
|
||||
printer->Print(variables_,
|
||||
"public boolean has$capitalized_name$ = false;\n");
|
||||
"public boolean has$capitalized_name$;\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -401,7 +401,8 @@ GenerateSerializationConditional(io::Printer* printer) const {
|
||||
|
||||
void PrimitiveFieldGenerator::
|
||||
GenerateSerializationCode(io::Printer* printer) const {
|
||||
if (descriptor_->is_required()) {
|
||||
if (descriptor_->is_required() && !params_.generate_has()) {
|
||||
// Always serialize a required field if we don't have the 'has' signal.
|
||||
printer->Print(variables_,
|
||||
"output.write$capitalized_type$($number$, this.$name$);\n");
|
||||
} else {
|
||||
@ -414,7 +415,7 @@ GenerateSerializationCode(io::Printer* printer) const {
|
||||
|
||||
void PrimitiveFieldGenerator::
|
||||
GenerateSerializedSizeCode(io::Printer* printer) const {
|
||||
if (descriptor_->is_required()) {
|
||||
if (descriptor_->is_required() && !params_.generate_has()) {
|
||||
printer->Print(variables_,
|
||||
"size += com.google.protobuf.nano.CodedOutputByteBufferNano\n"
|
||||
" .compute$capitalized_type$Size($number$, this.$name$);\n");
|
||||
|
@ -75,4 +75,6 @@ message TestAllTypesNanoHas {
|
||||
optional NestedEnum default_nested_enum = 81 [default = BAR];
|
||||
|
||||
required int32 id = 86;
|
||||
required NestedEnum required_enum = 87;
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user