Skip to content

Commit

Permalink
C# Proto2 feature : Field presence and default values (#4642)
Browse files Browse the repository at this point in the history
* Compiler changes

* Generated code changes

* Library changes

* Compiler style changes

* Generated style changes

* Fix Windows build errors

* Implement changes from review

* Reintroduce proto2 check

* Compiler changes (required handling review)

* Generated code changes (required handling review)

* Library changes (required handling review

* Field presence rewrite (compiler changes)

* Field presence rewrite (generated code changes)

* Compiler comment

* IFieldAccessor.HasValue library implementation

* Remove Clear methods and default values from proto3 code (Compiler)

* Remove Clear methods and default values from proto3 code (Generated)

* Remove Clear methods and default values from proto3 code (Library)

* Fix distcheck error

* Rewrite default string values to use base64 and convert

* Library changes (IMessage2)

* Compiler changes (IMessage2)

* Generated changes (IMessage2)

* Rebased and regenerated

* Compiler changes (initialized extension)

* Generated changes (initialized extension)

* Library changes (initialized extension)

* Refactor MessageExtensions.IsRequired

* Move string default value creator and bytes default value creator back to seperate methods

* Dead code cleanup

* Fixed segmentation fault
Removed unused header method declarations
  • Loading branch information
ObsidianMinor authored and anandolee committed Sep 24, 2018
1 parent fb0a74b commit 54176b2
Show file tree
Hide file tree
Showing 51 changed files with 3,777 additions and 2,375 deletions.
1 change: 0 additions & 1 deletion Makefile.am
Expand Up @@ -179,7 +179,6 @@ csharp_EXTRA_DIST= \
csharp/src/Google.Protobuf/Reflection/OneofDescriptor.cs \
csharp/src/Google.Protobuf/Reflection/OriginalNameAttribute.cs \
csharp/src/Google.Protobuf/Reflection/PackageDescriptor.cs \
csharp/src/Google.Protobuf/Reflection/PartialClasses.cs \
csharp/src/Google.Protobuf/Reflection/ReflectionUtil.cs \
csharp/src/Google.Protobuf/Reflection/RepeatedFieldAccessor.cs \
csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs \
Expand Down
8 changes: 4 additions & 4 deletions csharp/src/AddressBook/Addressbook.cs
Expand Up @@ -247,7 +247,7 @@ public sealed partial class Person : pb::IMessage<Person> {
phones_.Add(other.phones_);
if (other.lastUpdated_ != null) {
if (lastUpdated_ == null) {
lastUpdated_ = new global::Google.Protobuf.WellKnownTypes.Timestamp();
LastUpdated = new global::Google.Protobuf.WellKnownTypes.Timestamp();
}
LastUpdated.MergeFrom(other.LastUpdated);
}
Expand Down Expand Up @@ -280,9 +280,9 @@ public sealed partial class Person : pb::IMessage<Person> {
}
case 42: {
if (lastUpdated_ == null) {
lastUpdated_ = new global::Google.Protobuf.WellKnownTypes.Timestamp();
LastUpdated = new global::Google.Protobuf.WellKnownTypes.Timestamp();
}
input.ReadMessage(lastUpdated_);
input.ReadMessage(LastUpdated);
break;
}
}
Expand Down Expand Up @@ -447,7 +447,7 @@ public sealed partial class PhoneNumber : pb::IMessage<PhoneNumber> {
break;
}
case 16: {
type_ = (global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneType) input.ReadEnum();
Type = (global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneType) input.ReadEnum();
break;
}
}
Expand Down
4 changes: 2 additions & 2 deletions csharp/src/Google.Protobuf.Conformance/Conformance.cs
Expand Up @@ -354,15 +354,15 @@ public enum PayloadOneofCase {
break;
}
case 24: {
requestedOutputFormat_ = (global::Conformance.WireFormat) input.ReadEnum();
RequestedOutputFormat = (global::Conformance.WireFormat) input.ReadEnum();
break;
}
case 34: {
MessageType = input.ReadString();
break;
}
case 40: {
testCategory_ = (global::Conformance.TestCategory) input.ReadEnum();
TestCategory = (global::Conformance.TestCategory) input.ReadEnum();
break;
}
}
Expand Down
Expand Up @@ -724,7 +724,7 @@ public sealed partial class TestMapSubmessage : pb::IMessage<TestMapSubmessage>
}
if (other.testMap_ != null) {
if (testMap_ == null) {
testMap_ = new global::Google.Protobuf.TestProtos.TestMap();
TestMap = new global::Google.Protobuf.TestProtos.TestMap();
}
TestMap.MergeFrom(other.TestMap);
}
Expand All @@ -741,9 +741,9 @@ public sealed partial class TestMapSubmessage : pb::IMessage<TestMapSubmessage>
break;
case 10: {
if (testMap_ == null) {
testMap_ = new global::Google.Protobuf.TestProtos.TestMap();
TestMap = new global::Google.Protobuf.TestProtos.TestMap();
}
input.ReadMessage(testMap_);
input.ReadMessage(TestMap);
break;
}
}
Expand Down
73 changes: 41 additions & 32 deletions csharp/src/Google.Protobuf.Test/TestProtos/TestMessagesProto3.cs
Expand Up @@ -1171,6 +1171,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_int32_wrapper" field.</summary>
public const int OptionalInt32WrapperFieldNumber = 202;
private static readonly pb::FieldCodec<int?> _single_optionalInt32Wrapper_codec = pb::FieldCodec.ForStructWrapper<int>(1618);
Expand All @@ -1183,6 +1184,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_int64_wrapper" field.</summary>
public const int OptionalInt64WrapperFieldNumber = 203;
private static readonly pb::FieldCodec<long?> _single_optionalInt64Wrapper_codec = pb::FieldCodec.ForStructWrapper<long>(1626);
Expand All @@ -1195,6 +1197,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_uint32_wrapper" field.</summary>
public const int OptionalUint32WrapperFieldNumber = 204;
private static readonly pb::FieldCodec<uint?> _single_optionalUint32Wrapper_codec = pb::FieldCodec.ForStructWrapper<uint>(1634);
Expand All @@ -1207,6 +1210,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_uint64_wrapper" field.</summary>
public const int OptionalUint64WrapperFieldNumber = 205;
private static readonly pb::FieldCodec<ulong?> _single_optionalUint64Wrapper_codec = pb::FieldCodec.ForStructWrapper<ulong>(1642);
Expand All @@ -1219,6 +1223,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_float_wrapper" field.</summary>
public const int OptionalFloatWrapperFieldNumber = 206;
private static readonly pb::FieldCodec<float?> _single_optionalFloatWrapper_codec = pb::FieldCodec.ForStructWrapper<float>(1650);
Expand All @@ -1231,6 +1236,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_double_wrapper" field.</summary>
public const int OptionalDoubleWrapperFieldNumber = 207;
private static readonly pb::FieldCodec<double?> _single_optionalDoubleWrapper_codec = pb::FieldCodec.ForStructWrapper<double>(1658);
Expand All @@ -1243,6 +1249,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_string_wrapper" field.</summary>
public const int OptionalStringWrapperFieldNumber = 208;
private static readonly pb::FieldCodec<string> _single_optionalStringWrapper_codec = pb::FieldCodec.ForClassWrapper<string>(1666);
Expand All @@ -1255,6 +1262,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "optional_bytes_wrapper" field.</summary>
public const int OptionalBytesWrapperFieldNumber = 209;
private static readonly pb::FieldCodec<pb::ByteString> _single_optionalBytesWrapper_codec = pb::FieldCodec.ForClassWrapper<pb::ByteString>(1674);
Expand All @@ -1267,6 +1275,7 @@ public sealed partial class TestAllTypesProto3 : pb::IMessage<TestAllTypesProto3
}
}


/// <summary>Field number for the "repeated_bool_wrapper" field.</summary>
public const int RepeatedBoolWrapperFieldNumber = 211;
private static readonly pb::FieldCodec<bool?> _repeated_repeatedBoolWrapper_codec
Expand Down Expand Up @@ -2598,13 +2607,13 @@ public enum OneofFieldOneofCase {
}
if (other.optionalNestedMessage_ != null) {
if (optionalNestedMessage_ == null) {
optionalNestedMessage_ = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3.Types.NestedMessage();
OptionalNestedMessage = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3.Types.NestedMessage();
}
OptionalNestedMessage.MergeFrom(other.OptionalNestedMessage);
}
if (other.optionalForeignMessage_ != null) {
if (optionalForeignMessage_ == null) {
optionalForeignMessage_ = new global::ProtobufTestMessages.Proto3.ForeignMessage();
OptionalForeignMessage = new global::ProtobufTestMessages.Proto3.ForeignMessage();
}
OptionalForeignMessage.MergeFrom(other.OptionalForeignMessage);
}
Expand All @@ -2622,7 +2631,7 @@ public enum OneofFieldOneofCase {
}
if (other.recursiveMessage_ != null) {
if (recursiveMessage_ == null) {
recursiveMessage_ = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
RecursiveMessage = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
}
RecursiveMessage.MergeFrom(other.RecursiveMessage);
}
Expand Down Expand Up @@ -2722,37 +2731,37 @@ public enum OneofFieldOneofCase {
repeatedBytesWrapper_.Add(other.repeatedBytesWrapper_);
if (other.optionalDuration_ != null) {
if (optionalDuration_ == null) {
optionalDuration_ = new global::Google.Protobuf.WellKnownTypes.Duration();
OptionalDuration = new global::Google.Protobuf.WellKnownTypes.Duration();
}
OptionalDuration.MergeFrom(other.OptionalDuration);
}
if (other.optionalTimestamp_ != null) {
if (optionalTimestamp_ == null) {
optionalTimestamp_ = new global::Google.Protobuf.WellKnownTypes.Timestamp();
OptionalTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
}
OptionalTimestamp.MergeFrom(other.OptionalTimestamp);
}
if (other.optionalFieldMask_ != null) {
if (optionalFieldMask_ == null) {
optionalFieldMask_ = new global::Google.Protobuf.WellKnownTypes.FieldMask();
OptionalFieldMask = new global::Google.Protobuf.WellKnownTypes.FieldMask();
}
OptionalFieldMask.MergeFrom(other.OptionalFieldMask);
}
if (other.optionalStruct_ != null) {
if (optionalStruct_ == null) {
optionalStruct_ = new global::Google.Protobuf.WellKnownTypes.Struct();
OptionalStruct = new global::Google.Protobuf.WellKnownTypes.Struct();
}
OptionalStruct.MergeFrom(other.OptionalStruct);
}
if (other.optionalAny_ != null) {
if (optionalAny_ == null) {
optionalAny_ = new global::Google.Protobuf.WellKnownTypes.Any();
OptionalAny = new global::Google.Protobuf.WellKnownTypes.Any();
}
OptionalAny.MergeFrom(other.OptionalAny);
}
if (other.optionalValue_ != null) {
if (optionalValue_ == null) {
optionalValue_ = new global::Google.Protobuf.WellKnownTypes.Value();
OptionalValue = new global::Google.Protobuf.WellKnownTypes.Value();
}
OptionalValue.MergeFrom(other.OptionalValue);
}
Expand Down Expand Up @@ -2922,24 +2931,24 @@ public enum OneofFieldOneofCase {
}
case 146: {
if (optionalNestedMessage_ == null) {
optionalNestedMessage_ = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3.Types.NestedMessage();
OptionalNestedMessage = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3.Types.NestedMessage();
}
input.ReadMessage(optionalNestedMessage_);
input.ReadMessage(OptionalNestedMessage);
break;
}
case 154: {
if (optionalForeignMessage_ == null) {
optionalForeignMessage_ = new global::ProtobufTestMessages.Proto3.ForeignMessage();
OptionalForeignMessage = new global::ProtobufTestMessages.Proto3.ForeignMessage();
}
input.ReadMessage(optionalForeignMessage_);
input.ReadMessage(OptionalForeignMessage);
break;
}
case 168: {
optionalNestedEnum_ = (global::ProtobufTestMessages.Proto3.TestAllTypesProto3.Types.NestedEnum) input.ReadEnum();
OptionalNestedEnum = (global::ProtobufTestMessages.Proto3.TestAllTypesProto3.Types.NestedEnum) input.ReadEnum();
break;
}
case 176: {
optionalForeignEnum_ = (global::ProtobufTestMessages.Proto3.ForeignEnum) input.ReadEnum();
OptionalForeignEnum = (global::ProtobufTestMessages.Proto3.ForeignEnum) input.ReadEnum();
break;
}
case 194: {
Expand All @@ -2952,9 +2961,9 @@ public enum OneofFieldOneofCase {
}
case 218: {
if (recursiveMessage_ == null) {
recursiveMessage_ = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
RecursiveMessage = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
}
input.ReadMessage(recursiveMessage_);
input.ReadMessage(RecursiveMessage);
break;
}
case 250:
Expand Down Expand Up @@ -3275,44 +3284,44 @@ public enum OneofFieldOneofCase {
}
case 2410: {
if (optionalDuration_ == null) {
optionalDuration_ = new global::Google.Protobuf.WellKnownTypes.Duration();
OptionalDuration = new global::Google.Protobuf.WellKnownTypes.Duration();
}
input.ReadMessage(optionalDuration_);
input.ReadMessage(OptionalDuration);
break;
}
case 2418: {
if (optionalTimestamp_ == null) {
optionalTimestamp_ = new global::Google.Protobuf.WellKnownTypes.Timestamp();
OptionalTimestamp = new global::Google.Protobuf.WellKnownTypes.Timestamp();
}
input.ReadMessage(optionalTimestamp_);
input.ReadMessage(OptionalTimestamp);
break;
}
case 2426: {
if (optionalFieldMask_ == null) {
optionalFieldMask_ = new global::Google.Protobuf.WellKnownTypes.FieldMask();
OptionalFieldMask = new global::Google.Protobuf.WellKnownTypes.FieldMask();
}
input.ReadMessage(optionalFieldMask_);
input.ReadMessage(OptionalFieldMask);
break;
}
case 2434: {
if (optionalStruct_ == null) {
optionalStruct_ = new global::Google.Protobuf.WellKnownTypes.Struct();
OptionalStruct = new global::Google.Protobuf.WellKnownTypes.Struct();
}
input.ReadMessage(optionalStruct_);
input.ReadMessage(OptionalStruct);
break;
}
case 2442: {
if (optionalAny_ == null) {
optionalAny_ = new global::Google.Protobuf.WellKnownTypes.Any();
OptionalAny = new global::Google.Protobuf.WellKnownTypes.Any();
}
input.ReadMessage(optionalAny_);
input.ReadMessage(OptionalAny);
break;
}
case 2450: {
if (optionalValue_ == null) {
optionalValue_ = new global::Google.Protobuf.WellKnownTypes.Value();
OptionalValue = new global::Google.Protobuf.WellKnownTypes.Value();
}
input.ReadMessage(optionalValue_);
input.ReadMessage(OptionalValue);
break;
}
case 2490: {
Expand Down Expand Up @@ -3560,7 +3569,7 @@ public sealed partial class NestedMessage : pb::IMessage<NestedMessage> {
}
if (other.corecursive_ != null) {
if (corecursive_ == null) {
corecursive_ = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
Corecursive = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
}
Corecursive.MergeFrom(other.Corecursive);
}
Expand All @@ -3581,9 +3590,9 @@ public sealed partial class NestedMessage : pb::IMessage<NestedMessage> {
}
case 18: {
if (corecursive_ == null) {
corecursive_ = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
Corecursive = new global::ProtobufTestMessages.Proto3.TestAllTypesProto3();
}
input.ReadMessage(corecursive_);
input.ReadMessage(Corecursive);
break;
}
}
Expand Down

0 comments on commit 54176b2

Please sign in to comment.