diff options
author | Jon Skeet <skeet@pobox.com> | 2009-01-27 12:25:21 +0000 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2009-01-27 12:25:21 +0000 |
commit | 642a8140c88dfb61f5f4812fc179e4f42beb4978 (patch) | |
tree | 4d5bef960bd3af7d84c168e675076c0f69990e1a | |
parent | 25a2792283ec695d3c038559ea0682f1d83d9bd3 (diff) | |
download | protobuf-642a8140c88dfb61f5f4812fc179e4f42beb4978.tar.gz protobuf-642a8140c88dfb61f5f4812fc179e4f42beb4978.tar.bz2 protobuf-642a8140c88dfb61f5f4812fc179e4f42beb4978.zip |
Setters/adders now throw ArgumentNullException appropriately.
29 files changed, 597 insertions, 14 deletions
diff --git a/src/AddressBook/AddressBookProtos.cs b/src/AddressBook/AddressBookProtos.cs index bfe1b48f..4851ae4c 100644 --- a/src/AddressBook/AddressBookProtos.cs +++ b/src/AddressBook/AddressBookProtos.cs @@ -286,6 +286,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { set { SetNumber(value); } } public Builder SetNumber(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasNumber = true; result.number_ = value; return this; @@ -553,6 +554,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -589,6 +591,7 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { set { SetEmail(value); } } public Builder SetEmail(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasEmail = true; result.email_ = value; return this; @@ -609,18 +612,22 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { return result.GetPhone(index); } public Builder SetPhone(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.phone_[index] = value; return this; } public Builder SetPhone(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.phone_[index] = builderForValue.Build(); return this; } public Builder AddPhone(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.phone_.Add(value); return this; } public Builder AddPhone(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.phone_.Add(builderForValue.Build()); return this; } @@ -825,18 +832,22 @@ namespace Google.ProtocolBuffers.Examples.AddressBook { return result.GetPerson(index); } public Builder SetPerson(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.person_[index] = value; return this; } public Builder SetPerson(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.person_[index] = builderForValue.Build(); return this; } public Builder AddPerson(global::Google.ProtocolBuffers.Examples.AddressBook.Person value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.person_.Add(value); return this; } public Builder AddPerson(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.person_.Add(builderForValue.Build()); return this; } diff --git a/src/ProtoBench/BenchmarkProtoFile.cs b/src/ProtoBench/BenchmarkProtoFile.cs index d0c7744f..e0a06292 100644 --- a/src/ProtoBench/BenchmarkProtoFile.cs +++ b/src/ProtoBench/BenchmarkProtoFile.cs @@ -575,6 +575,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField1(value); } } public Builder SetField1(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField1 = true; result.field1_ = value; return this; @@ -593,6 +594,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField9(value); } } public Builder SetField9(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField9 = true; result.field9_ = value; return this; @@ -611,6 +613,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField18(value); } } public Builder SetField18(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField18 = true; result.field18_ = value; return this; @@ -755,6 +758,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField4(value); } } public Builder SetField4(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField4 = true; result.field4_ = value; return this; @@ -817,6 +821,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField7(value); } } public Builder SetField7(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField7 = true; result.field7_ = value; return this; @@ -997,6 +1002,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField102(value); } } public Builder SetField102(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField102 = true; result.field102_ = value; return this; @@ -1015,6 +1021,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField103(value); } } public Builder SetField103(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField103 = true; result.field103_ = value; return this; @@ -1195,16 +1202,19 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField15(value); } } public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.Message2 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField15 = true; result.field15_ = value; return this; } public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.Message2.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasField15 = true; result.field15_ = builderForValue.Build(); return this; } public Builder MergeField15(global::Google.ProtocolBuffers.ProtoBench.Message2 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasField15 && result.field15_ != global::Google.ProtocolBuffers.ProtoBench.Message2.DefaultInstance) { result.field15_ = global::Google.ProtocolBuffers.ProtoBench.Message2.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial(); @@ -1300,6 +1310,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField129(value); } } public Builder SetField129(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField129 = true; result.field129_ = value; return this; @@ -1660,6 +1671,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField15(value); } } public Builder SetField15(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField15 = true; result.field15_ = value; return this; @@ -1912,6 +1924,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField205(value); } } public Builder SetField205(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField205 = true; result.field205_ = value; return this; @@ -2269,6 +2282,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField12(value); } } public Builder SetField12(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField12 = true; result.field12_ = value; return this; @@ -2287,6 +2301,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField13(value); } } public Builder SetField13(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField13 = true; result.field13_ = value; return this; @@ -2307,10 +2322,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField14(index); } public Builder SetField14(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field14_[index] = value; return this; } public Builder AddField14(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field14_.Add(value); return this; } @@ -2367,6 +2384,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField27(value); } } public Builder SetField27(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField27 = true; result.field27_ = value; return this; @@ -2403,6 +2421,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField29(value); } } public Builder SetField29(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField29 = true; result.field29_ = value; return this; @@ -2421,6 +2440,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField16(value); } } public Builder SetField16(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField16 = true; result.field16_ = value; return this; @@ -2441,10 +2461,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField22(index); } public Builder SetField22(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field22_[index] = value; return this; } public Builder AddField22(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field22_.Add(value); return this; } @@ -2509,6 +2531,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField24(value); } } public Builder SetField24(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField24 = true; result.field24_ = value; return this; @@ -2527,16 +2550,19 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField31(value); } } public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.Message4 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField31 = true; result.field31_ = value; return this; } public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.Message4.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasField31 = true; result.field31_ = builderForValue.Build(); return this; } public Builder MergeField31(global::Google.ProtocolBuffers.ProtoBench.Message4 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasField31 && result.field31_ != global::Google.ProtocolBuffers.ProtoBench.Message4.DefaultInstance) { result.field31_ = global::Google.ProtocolBuffers.ProtoBench.Message4.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial(); @@ -2913,6 +2939,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField1(value); } } public Builder SetField1(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField1 = true; result.field1_ = value; return this; @@ -3003,6 +3030,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField6(value); } } public Builder SetField6(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField6 = true; result.field6_ = value; return this; @@ -3021,6 +3049,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField2(value); } } public Builder SetField2(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField2 = true; result.field2_ = value; return this; @@ -3311,18 +3340,22 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetGroup1(index); } public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.Message3.Types.Group1 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.group1_[index] = value; return this; } public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.Message3.Types.Group1.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.group1_[index] = builderForValue.Build(); return this; } public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.Message3.Types.Group1 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.group1_.Add(value); return this; } public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.Message3.Types.Group1.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.group1_.Add(builderForValue.Build()); return this; } @@ -3345,10 +3378,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField128(index); } public Builder SetField128(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field128_[index] = value; return this; } public Builder AddField128(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field128_.Add(value); return this; } @@ -3389,10 +3424,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField127(index); } public Builder SetField127(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field127_[index] = value; return this; } public Builder AddField127(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field127_.Add(value); return this; } diff --git a/src/ProtoBench/BenchmarkSpeedProtoFile.cs b/src/ProtoBench/BenchmarkSpeedProtoFile.cs index 83b0e8cd..670cccf1 100644 --- a/src/ProtoBench/BenchmarkSpeedProtoFile.cs +++ b/src/ProtoBench/BenchmarkSpeedProtoFile.cs @@ -1179,6 +1179,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField1(value); } } public Builder SetField1(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField1 = true; result.field1_ = value; return this; @@ -1197,6 +1198,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField9(value); } } public Builder SetField9(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField9 = true; result.field9_ = value; return this; @@ -1215,6 +1217,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField18(value); } } public Builder SetField18(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField18 = true; result.field18_ = value; return this; @@ -1359,6 +1362,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField4(value); } } public Builder SetField4(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField4 = true; result.field4_ = value; return this; @@ -1421,6 +1425,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField7(value); } } public Builder SetField7(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField7 = true; result.field7_ = value; return this; @@ -1601,6 +1606,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField102(value); } } public Builder SetField102(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField102 = true; result.field102_ = value; return this; @@ -1619,6 +1625,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField103(value); } } public Builder SetField103(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField103 = true; result.field103_ = value; return this; @@ -1799,16 +1806,19 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField15(value); } } public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField15 = true; result.field15_ = value; return this; } public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasField15 = true; result.field15_ = builderForValue.Build(); return this; } public Builder MergeField15(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasField15 && result.field15_ != global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.DefaultInstance) { result.field15_ = global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial(); @@ -1904,6 +1914,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField129(value); } } public Builder SetField129(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField129 = true; result.field129_ = value; return this; @@ -2586,6 +2597,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField15(value); } } public Builder SetField15(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField15 = true; result.field15_ = value; return this; @@ -2838,6 +2850,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField205(value); } } public Builder SetField205(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField205 = true; result.field205_ = value; return this; @@ -3472,6 +3485,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField12(value); } } public Builder SetField12(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField12 = true; result.field12_ = value; return this; @@ -3490,6 +3504,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField13(value); } } public Builder SetField13(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField13 = true; result.field13_ = value; return this; @@ -3510,10 +3525,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField14(index); } public Builder SetField14(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field14_[index] = value; return this; } public Builder AddField14(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field14_.Add(value); return this; } @@ -3570,6 +3587,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField27(value); } } public Builder SetField27(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField27 = true; result.field27_ = value; return this; @@ -3606,6 +3624,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField29(value); } } public Builder SetField29(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField29 = true; result.field29_ = value; return this; @@ -3624,6 +3643,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField16(value); } } public Builder SetField16(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField16 = true; result.field16_ = value; return this; @@ -3644,10 +3664,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField22(index); } public Builder SetField22(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field22_[index] = value; return this; } public Builder AddField22(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field22_.Add(value); return this; } @@ -3712,6 +3734,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField24(value); } } public Builder SetField24(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField24 = true; result.field24_ = value; return this; @@ -3730,16 +3753,19 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField31(value); } } public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage4 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField31 = true; result.field31_ = value; return this; } public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage4.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasField31 = true; result.field31_ = builderForValue.Build(); return this; } public Builder MergeField31(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage4 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasField31 && result.field31_ != global::Google.ProtocolBuffers.ProtoBench.SpeedMessage4.DefaultInstance) { result.field31_ = global::Google.ProtocolBuffers.ProtoBench.SpeedMessage4.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial(); @@ -4570,6 +4596,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField1(value); } } public Builder SetField1(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField1 = true; result.field1_ = value; return this; @@ -4660,6 +4687,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField6(value); } } public Builder SetField6(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField6 = true; result.field6_ = value; return this; @@ -4678,6 +4706,7 @@ namespace Google.ProtocolBuffers.ProtoBench { set { SetField2(value); } } public Builder SetField2(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField2 = true; result.field2_ = value; return this; @@ -4968,18 +4997,22 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetGroup1(index); } public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage3.Types.Group1 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.group1_[index] = value; return this; } public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage3.Types.Group1.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.group1_[index] = builderForValue.Build(); return this; } public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage3.Types.Group1 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.group1_.Add(value); return this; } public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage3.Types.Group1.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.group1_.Add(builderForValue.Build()); return this; } @@ -5002,10 +5035,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField128(index); } public Builder SetField128(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field128_[index] = value; return this; } public Builder AddField128(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field128_.Add(value); return this; } @@ -5046,10 +5081,12 @@ namespace Google.ProtocolBuffers.ProtoBench { return result.GetField127(index); } public Builder SetField127(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field127_[index] = value; return this; } public Builder AddField127(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field127_.Add(value); return this; } diff --git a/src/ProtoGen/FieldGeneratorBase.cs b/src/ProtoGen/FieldGeneratorBase.cs index f59da644..207f3fdc 100644 --- a/src/ProtoGen/FieldGeneratorBase.cs +++ b/src/ProtoGen/FieldGeneratorBase.cs @@ -1,6 +1,6 @@ using System; -using Google.ProtocolBuffers.Descriptors; using System.Globalization; +using Google.ProtocolBuffers.Descriptors; namespace Google.ProtocolBuffers.ProtoGen { internal abstract class FieldGeneratorBase : SourceGeneratorBase<FieldDescriptor> { @@ -87,6 +87,45 @@ namespace Google.ProtocolBuffers.ProtoGen { get { return Descriptor.FieldNumber; } } + protected void AddNullCheck(TextGenerator writer) { + AddNullCheck(writer, "value"); + } + + protected void AddNullCheck(TextGenerator writer, string name) { + if (IsNullableType) { + writer.WriteLine(" pb::ThrowHelper.ThrowIfNull({0}, \"{0}\");", name); + } + } + + protected bool IsNullableType { + get { + switch (Descriptor.FieldType) { + case FieldType.Float: + case FieldType.Double: + case FieldType.Int32: + case FieldType.Int64: + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.SFixed32: + case FieldType.SFixed64: + case FieldType.UInt32: + case FieldType.UInt64: + case FieldType.Fixed32: + case FieldType.Fixed64: + case FieldType.Bool: + case FieldType.Enum: + return false; + case FieldType.Bytes: + case FieldType.String: + case FieldType.Message: + case FieldType.Group: + return true; + default: + throw new InvalidOperationException("Invalid field descriptor type"); + } + } + } + protected string TypeName { get { switch (Descriptor.FieldType) { diff --git a/src/ProtoGen/MessageFieldGenerator.cs b/src/ProtoGen/MessageFieldGenerator.cs index 7b5b66e8..55bb7727 100644 --- a/src/ProtoGen/MessageFieldGenerator.cs +++ b/src/ProtoGen/MessageFieldGenerator.cs @@ -27,16 +27,19 @@ namespace Google.ProtocolBuffers.ProtoGen { writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); writer.WriteLine("}"); writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" result.has{0} = true;", PropertyName); writer.WriteLine(" result.{0}_ = value;", Name); writer.WriteLine(" return this;"); writer.WriteLine("}"); writer.WriteLine("public Builder Set{0}({1}.Builder builderForValue) {{", PropertyName, TypeName); + AddNullCheck(writer, "builderForValue"); writer.WriteLine(" result.has{0} = true;", PropertyName); writer.WriteLine(" result.{0}_ = builderForValue.Build();", Name); writer.WriteLine(" return this;"); writer.WriteLine("}"); writer.WriteLine("public Builder Merge{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" if (result.Has{0} &&", PropertyName); writer.WriteLine(" result.{0}_ != {1}) {{", Name, DefaultValue); writer.WriteLine(" result.{0}_ = {1}.CreateBuilder(result.{0}_).MergeFrom(value).BuildPartial();", Name, TypeName); diff --git a/src/ProtoGen/PrimitiveFieldGenerator.cs b/src/ProtoGen/PrimitiveFieldGenerator.cs index dc733c0b..3c2fb246 100644 --- a/src/ProtoGen/PrimitiveFieldGenerator.cs +++ b/src/ProtoGen/PrimitiveFieldGenerator.cs @@ -29,6 +29,7 @@ namespace Google.ProtocolBuffers.ProtoGen { writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); writer.WriteLine("}"); writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" result.has{0} = true;", PropertyName); writer.WriteLine(" result.{0}_ = value;", Name); writer.WriteLine(" return this;"); diff --git a/src/ProtoGen/RepeatedMessageFieldGenerator.cs b/src/ProtoGen/RepeatedMessageFieldGenerator.cs index c7741ae5..6a9f8e99 100644 --- a/src/ProtoGen/RepeatedMessageFieldGenerator.cs +++ b/src/ProtoGen/RepeatedMessageFieldGenerator.cs @@ -38,20 +38,24 @@ namespace Google.ProtocolBuffers.ProtoGen { writer.WriteLine(" return result.Get{0}(index);", PropertyName); writer.WriteLine("}"); writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" result.{0}_[index] = value;", Name); writer.WriteLine(" return this;"); writer.WriteLine("}"); // Extra overload for builder (just on messages) writer.WriteLine("public Builder Set{0}(int index, {1}.Builder builderForValue) {{", PropertyName, TypeName); + AddNullCheck(writer, "builderForValue"); writer.WriteLine(" result.{0}_[index] = builderForValue.Build();", Name); writer.WriteLine(" return this;"); writer.WriteLine("}"); writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); writer.WriteLine(" return this;"); writer.WriteLine("}"); // Extra overload for builder (just on messages) writer.WriteLine("public Builder Add{0}({1}.Builder builderForValue) {{", PropertyName, TypeName); + AddNullCheck(writer, "builderForValue"); writer.WriteLine(" result.{0}_.Add(builderForValue.Build());", Name); writer.WriteLine(" return this;"); writer.WriteLine("}"); diff --git a/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs b/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs index 4e079dc3..3650642f 100644 --- a/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs +++ b/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs @@ -38,10 +38,12 @@ namespace Google.ProtocolBuffers.ProtoGen { writer.WriteLine(" return result.Get{0}(index);", PropertyName); writer.WriteLine("}"); writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" result.{0}_[index] = value;", Name); writer.WriteLine(" return this;"); writer.WriteLine("}"); writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); writer.WriteLine(" return this;"); writer.WriteLine("}"); diff --git a/src/ProtocolBuffers.Test/DynamicMessageTest.cs b/src/ProtocolBuffers.Test/DynamicMessageTest.cs index 7179da5d..045f5c4f 100644 --- a/src/ProtocolBuffers.Test/DynamicMessageTest.cs +++ b/src/ProtocolBuffers.Test/DynamicMessageTest.cs @@ -54,15 +54,27 @@ namespace Google.ProtocolBuffers { } [Test] + public void DynamicMessageSettersRejectNull() { + IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor); + reflectionTester.AssertReflectionSettersRejectNull(builder); + } + + [Test] public void DynamicMessageExtensionAccessors() { - // We don't need to extensively test DynamicMessage's handling of - // extensions because, frankly, it doesn't do anything special with them. - // It treats them just like any other fields. - IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor); - extensionsReflectionTester.SetAllFieldsViaReflection(builder); - IMessage message = builder.WeakBuild(); - extensionsReflectionTester.AssertAllFieldsSetViaReflection(message); - } + // We don't need to extensively test DynamicMessage's handling of + // extensions because, frankly, it doesn't do anything special with them. + // It treats them just like any other fields. + IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor); + extensionsReflectionTester.SetAllFieldsViaReflection(builder); + IMessage message = builder.WeakBuild(); + extensionsReflectionTester.AssertAllFieldsSetViaReflection(message); + } + + [Test] + public void DynamicMessageExtensionSettersRejectNull() { + IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor); + extensionsReflectionTester.AssertReflectionSettersRejectNull(builder); + } [Test] public void DynamicMessageRepeatedSetters() { @@ -74,6 +86,12 @@ namespace Google.ProtocolBuffers { } [Test] + public void DynamicMessageRepeatedSettersRejectNull() { + IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor); + reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder); + } + + [Test] public void DynamicMessageDefaults() { reflectionTester.AssertClearViaReflection(DynamicMessage.GetDefaultInstance(TestAllTypes.Descriptor)); reflectionTester.AssertClearViaReflection(DynamicMessage.CreateBuilder(TestAllTypes.Descriptor).Build()); diff --git a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs index d97b0ed5..5d0a9291 100644 --- a/src/ProtocolBuffers.Test/GeneratedMessageTest.cs +++ b/src/ProtocolBuffers.Test/GeneratedMessageTest.cs @@ -103,7 +103,20 @@ namespace Google.ProtocolBuffers { TestAllTypes message = builder.Build(); TestUtil.AssertAllFieldsSet(message); } - + + [Test] + public void SettersRejectNull() { + TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); + TestUtil.AssertArgumentNullException(() => builder.SetOptionalString(null)); + TestUtil.AssertArgumentNullException(() => builder.SetOptionalBytes(null)); + TestUtil.AssertArgumentNullException(() => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage)null)); + TestUtil.AssertArgumentNullException(() => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage.Builder)null)); + TestUtil.AssertArgumentNullException(() => builder.AddRepeatedString(null)); + TestUtil.AssertArgumentNullException(() => builder.AddRepeatedBytes(null)); + TestUtil.AssertArgumentNullException(() => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage)null)); + TestUtil.AssertArgumentNullException(() => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage.Builder)null)); + } + [Test] public void RepeatedSetters() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); @@ -131,6 +144,18 @@ namespace Google.ProtocolBuffers { } [Test] + public void RepeatedAppendRejectsNull() { + TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); + + ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build(); + TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(new[] { foreignMessage, null })); + TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(null)); + TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignEnum(null)); + TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedString(new[] { "one", null })); + TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedBytes(new[] { TestUtil.ToBytes("one"), null })); + } + + [Test] public void SettingForeignMessageUsingBuilder() { TestAllTypes message = TestAllTypes.CreateBuilder() // Pass builder for foreign message instance. @@ -182,6 +207,11 @@ namespace Google.ProtocolBuffers { } [Test] + public void ReflectionSettersRejectNull() { + TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); + reflectionTester.AssertReflectionSettersRejectNull(builder); + } + [Test] public void ReflectionRepeatedSetters() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); reflectionTester.SetAllFieldsViaReflection(builder); @@ -191,6 +221,12 @@ namespace Google.ProtocolBuffers { } [Test] + public void TestReflectionRepeatedSettersRejectNull() { + TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); + reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder); + } + + [Test] public void ReflectionDefaults() { reflectionTester.AssertClearViaReflection(TestAllTypes.DefaultInstance); reflectionTester.AssertClearViaReflection(TestAllTypes.CreateBuilder().Build()); @@ -238,6 +274,12 @@ namespace Google.ProtocolBuffers { } [Test] + public void ExtensionReflectionSettersRejectNull() { + TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); + extensionsReflectionTester.AssertReflectionSettersRejectNull(builder); + } + + [Test] public void ExtensionReflectionRepeatedSetters() { TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); extensionsReflectionTester.SetAllFieldsViaReflection(builder); @@ -247,6 +289,12 @@ namespace Google.ProtocolBuffers { } [Test] + public void ExtensionReflectionRepeatedSettersRejectNull() { + TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); + extensionsReflectionTester.AssertReflectionRepeatedSettersRejectNull(builder); + } + + [Test] public void ExtensionReflectionDefaults() { extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.DefaultInstance); extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.CreateBuilder().Build()); @@ -265,6 +313,18 @@ namespace Google.ProtocolBuffers { .GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension)); } + /* Reinstate this test in the commit where it's fixed... + [Test] + public void ExtensionMergeFrom() { + TestAllExtensions original = TestAllExtensions.CreateBuilder() + .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1).Build(); + TestAllExtensions merged = + TestAllExtensions.CreateBuilder().MergeFrom(original).Build(); + Assert.IsTrue((merged.HasExtension(UnitTestProtoFile.OptionalInt32Extension))); + Assert.AreEqual(1, (int)merged.GetExtension(UnitTestProtoFile.OptionalInt32Extension)); + } + */ + /* Removed multiple files option for the moment [Test] public void MultipleFilesOption() { diff --git a/src/ProtocolBuffers.Test/ReflectionTester.cs b/src/ProtocolBuffers.Test/ReflectionTester.cs index 889b2f6b..767c8cc9 100644 --- a/src/ProtocolBuffers.Test/ReflectionTester.cs +++ b/src/ProtocolBuffers.Test/ReflectionTester.cs @@ -810,5 +810,37 @@ namespace Google.ProtocolBuffers { Assert.AreEqual("524", message[f("repeated_string_piece"), 1]); Assert.AreEqual("525", message[f("repeated_cord"), 1]); } + + /// <summary> + /// Verifies that the reflection setters for the given Builder object throw an + /// ArgumentNullException if they are passed a null value. + /// </summary> + public void AssertReflectionSettersRejectNull(IBuilder builder) { + TestUtil.AssertArgumentNullException(() => builder[f("optional_string")] = null); + TestUtil.AssertArgumentNullException(() => builder[f("optional_bytes")] = null); + TestUtil.AssertArgumentNullException(() => builder[f("optional_nested_enum")] = null); + TestUtil.AssertArgumentNullException(() => builder[f("optional_nested_message")] = null); + TestUtil.AssertArgumentNullException(() => builder[f("optional_nested_message")] = null); + TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_string"), null)); + TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_bytes"), null)); + TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_nested_enum"), null)); + TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_nested_message"), null)); + } + + /// <summary> + /// Verifies that the reflection repeated setters for the given Builder object throw an + /// ArgumentNullException if they are passed a null value. + /// </summary> + public void AssertReflectionRepeatedSettersRejectNull(IBuilder builder) { + builder.WeakAddRepeatedField(f("repeated_string"), "one"); + TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_string"), 0, null)); + builder.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("one")); + TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_bytes"), 0, null)); + builder.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz); + TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_nested_enum"), 0, null)); + builder.WeakAddRepeatedField(f("repeated_nested_message"), + new TestAllTypes.Types.NestedMessage.Builder { Bb = 218 }.Build()); + TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_nested_message"), 0, null)); + } } } diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs index ff777cbb..df8d7998 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs @@ -397,6 +397,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetField1(value); } } public Builder SetField1(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasField1 = true; result.field1_ = value; return this; @@ -1593,16 +1594,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetBar(value); } } public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasBar = true; result.bar_ = value; return this; } public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasBar = true; result.bar_ = builderForValue.Build(); return this; } public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasBar && result.bar_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance) { result.bar_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial(); @@ -1644,16 +1648,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetFred(value); } } public Builder SetFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasFred = true; result.fred_ = value; return this; } public Builder SetFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasFred = true; result.fred_ = builderForValue.Build(); return this; } public Builder MergeFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasFred && result.fred_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance) { result.fred_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.CreateBuilder(result.fred_).MergeFrom(value).BuildPartial(); @@ -1925,16 +1932,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetComplexOptionType5(value); } } public Builder SetComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasComplexOptionType5 = true; result.complexOptionType5_ = value; return this; } public Builder SetComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasComplexOptionType5 = true; result.complexOptionType5_ = builderForValue.Build(); return this; } public Builder MergeComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasComplexOptionType5 && result.complexOptionType5_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance) { result.complexOptionType5_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.CreateBuilder(result.complexOptionType5_).MergeFrom(value).BuildPartial(); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs index 1f3a3d40..5af7fd8e 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs @@ -256,16 +256,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalMessage(value); } } public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalMessage = true; result.optionalMessage_ = value; return this; } public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalMessage = true; result.optionalMessage_ = builderForValue.Build(); return this; } public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalMessage && result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.DefaultInstance) { result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial(); @@ -291,18 +294,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedMessage(index); } public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedMessage_[index] = value; return this; } public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedMessage_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedMessage_.Add(value); return this; } public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedMessage_.Add(builderForValue.Build()); return this; } diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs index 557a029b..796d74a8 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs @@ -410,16 +410,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetMessageSet(value); } } public Builder SetMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasMessageSet = true; result.messageSet_ = value; return this; } public Builder SetMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasMessageSet = true; result.messageSet_ = builderForValue.Build(); return this; } public Builder MergeMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasMessageSet && result.messageSet_ != global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance) { result.messageSet_ = global::Google.ProtocolBuffers.TestProtos.TestMessageSet.CreateBuilder(result.messageSet_).MergeFrom(value).BuildPartial(); @@ -813,6 +816,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetStr(value); } } public Builder SetStr(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasStr = true; result.str_ = value; return this; @@ -1071,6 +1075,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetMessage(value); } } public Builder SetMessage(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasMessage = true; result.message_ = value; return this; @@ -1251,18 +1256,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetItem(index); } public Builder SetItem(int index, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.item_[index] = value; return this; } public Builder SetItem(int index, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.item_[index] = builderForValue.Build(); return this; } public Builder AddItem(global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.item_.Add(value); return this; } public Builder AddItem(global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.item_.Add(builderForValue.Build()); return this; } diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs index 65ed149a..777a4c23 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs @@ -189,16 +189,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetMsg(value); } } public Builder SetMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasMsg = true; result.msg_ = value; return this; } public Builder SetMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasMsg = true; result.msg_ = builderForValue.Build(); return this; } public Builder MergeMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasMsg && result.msg_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) { result.msg_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.msg_).MergeFrom(value).BuildPartial(); @@ -438,16 +441,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetO(value); } } public Builder SetO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasO = true; result.o_ = value; return this; } public Builder SetO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasO = true; result.o_ = builderForValue.Build(); return this; } public Builder MergeO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasO && result.o_ != global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance) { result.o_ = global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.CreateBuilder(result.o_).MergeFrom(value).BuildPartial(); diff --git a/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs b/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs index bc648d12..17501997 100644 --- a/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs +++ b/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs @@ -3255,6 +3255,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalString(value); } } public Builder SetOptionalString(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalString = true; result.optionalString_ = value; return this; @@ -3273,6 +3274,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalBytes(value); } } public Builder SetOptionalBytes(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalBytes = true; result.optionalBytes_ = value; return this; @@ -3291,16 +3293,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalGroup(value); } } public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalGroup = true; result.optionalGroup_ = value; return this; } public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalGroup = true; result.optionalGroup_ = builderForValue.Build(); return this; } public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalGroup && result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) { result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial(); @@ -3324,16 +3329,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalNestedMessage(value); } } public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalNestedMessage = true; result.optionalNestedMessage_ = value; return this; } public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalNestedMessage = true; result.optionalNestedMessage_ = builderForValue.Build(); return this; } public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalNestedMessage && result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) { result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial(); @@ -3357,16 +3365,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalForeignMessage(value); } } public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalForeignMessage = true; result.optionalForeignMessage_ = value; return this; } public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalForeignMessage = true; result.optionalForeignMessage_ = builderForValue.Build(); return this; } public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalForeignMessage && result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) { result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial(); @@ -3390,16 +3401,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalImportMessage(value); } } public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalImportMessage = true; result.optionalImportMessage_ = value; return this; } public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalImportMessage = true; result.optionalImportMessage_ = builderForValue.Build(); return this; } public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalImportMessage && result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) { result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial(); @@ -3477,6 +3491,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalStringPiece(value); } } public Builder SetOptionalStringPiece(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalStringPiece = true; result.optionalStringPiece_ = value; return this; @@ -3495,6 +3510,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalCord(value); } } public Builder SetOptionalCord(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalCord = true; result.optionalCord_ = value; return this; @@ -3853,10 +3869,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedString(index); } public Builder SetRepeatedString(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedString_[index] = value; return this; } public Builder AddRepeatedString(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedString_.Add(value); return this; } @@ -3879,10 +3897,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedBytes(index); } public Builder SetRepeatedBytes(int index, pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedBytes_[index] = value; return this; } public Builder AddRepeatedBytes(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedBytes_.Add(value); return this; } @@ -3905,18 +3925,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedGroup(index); } public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedGroup_[index] = value; return this; } public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedGroup_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedGroup_.Add(value); return this; } public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedGroup_.Add(builderForValue.Build()); return this; } @@ -3939,18 +3963,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedNestedMessage(index); } public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedNestedMessage_[index] = value; return this; } public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedNestedMessage_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedNestedMessage_.Add(value); return this; } public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedNestedMessage_.Add(builderForValue.Build()); return this; } @@ -3973,18 +4001,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedForeignMessage(index); } public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedForeignMessage_[index] = value; return this; } public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedForeignMessage_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedForeignMessage_.Add(value); return this; } public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedForeignMessage_.Add(builderForValue.Build()); return this; } @@ -4007,18 +4039,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedImportMessage(index); } public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedImportMessage_[index] = value; return this; } public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedImportMessage_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedImportMessage_.Add(value); return this; } public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedImportMessage_.Add(builderForValue.Build()); return this; } @@ -4119,10 +4155,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedStringPiece(index); } public Builder SetRepeatedStringPiece(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedStringPiece_[index] = value; return this; } public Builder AddRepeatedStringPiece(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedStringPiece_.Add(value); return this; } @@ -4145,10 +4183,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedCord(index); } public Builder SetRepeatedCord(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedCord_[index] = value; return this; } public Builder AddRepeatedCord(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedCord_.Add(value); return this; } @@ -4403,6 +4443,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetDefaultString(value); } } public Builder SetDefaultString(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasDefaultString = true; result.defaultString_ = value; return this; @@ -4421,6 +4462,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetDefaultBytes(value); } } public Builder SetDefaultBytes(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasDefaultBytes = true; result.defaultBytes_ = value; return this; @@ -4493,6 +4535,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetDefaultStringPiece(value); } } public Builder SetDefaultStringPiece(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasDefaultStringPiece = true; result.defaultStringPiece_ = value; return this; @@ -4511,6 +4554,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetDefaultCord(value); } } public Builder SetDefaultCord(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasDefaultCord = true; result.defaultCord_ = value; return this; @@ -6975,16 +7019,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalMessage(value); } } public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalMessage = true; result.optionalMessage_ = value; return this; } public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalMessage = true; result.optionalMessage_ = builderForValue.Build(); return this; } public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalMessage && result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) { result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial(); @@ -7010,18 +7057,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedMessage(index); } public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedMessage_[index] = value; return this; } public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedMessage_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedMessage_.Add(value); return this; } public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedMessage_.Add(builderForValue.Build()); return this; } @@ -7239,16 +7290,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetForeignNested(value); } } public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasForeignNested = true; result.foreignNested_ = value; return this; } public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasForeignNested = true; result.foreignNested_ = builderForValue.Build(); return this; } public Builder MergeForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasForeignNested && result.foreignNested_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) { result.foreignNested_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.foreignNested_).MergeFrom(value).BuildPartial(); @@ -8013,16 +8067,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetA(value); } } public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasA = true; result.a_ = value; return this; } public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasA = true; result.a_ = builderForValue.Build(); return this; } public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasA && result.a_ != global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) { result.a_ = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder(result.a_).MergeFrom(value).BuildPartial(); @@ -8243,16 +8300,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetBb(value); } } public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasBb = true; result.bb_ = value; return this; } public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasBb = true; result.bb_ = builderForValue.Build(); return this; } public Builder MergeBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasBb && result.bb_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) { result.bb_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder(result.bb_).MergeFrom(value).BuildPartial(); @@ -8477,16 +8537,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetA(value); } } public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasA = true; result.a_ = value; return this; } public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasA = true; result.a_ = builderForValue.Build(); return this; } public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasA && result.a_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) { result.a_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder(result.a_).MergeFrom(value).BuildPartial(); @@ -9163,16 +9226,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetFoo(value); } } public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasFoo = true; result.foo_ = value; return this; } public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasFoo = true; result.foo_ = builderForValue.Build(); return this; } public Builder MergeFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasFoo && result.foo_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) { result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder(result.foo_).MergeFrom(value).BuildPartial(); @@ -9196,16 +9262,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetBar(value); } } public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasBar = true; result.bar_ = value; return this; } public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasBar = true; result.bar_ = builderForValue.Build(); return this; } public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasBar && result.bar_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) { result.bar_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial(); @@ -9485,18 +9554,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetNestedmessageRepeatedForeignmessage(index); } public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.nestedmessageRepeatedForeignmessage_[index] = value; return this; } public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.nestedmessageRepeatedForeignmessage_[index] = builderForValue.Build(); return this; } public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.nestedmessageRepeatedForeignmessage_.Add(value); return this; } public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.nestedmessageRepeatedForeignmessage_.Add(builderForValue.Build()); return this; } @@ -9677,16 +9750,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetOptionalNestedMessage(value); } } public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptionalNestedMessage = true; result.optionalNestedMessage_ = value; return this; } public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptionalNestedMessage = true; result.optionalNestedMessage_ = builderForValue.Build(); return this; } public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptionalNestedMessage && result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) { result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial(); @@ -10179,6 +10255,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetStringField(value); } } public Builder SetStringField(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasStringField = true; result.stringField_ = value; return this; @@ -10215,16 +10292,19 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetMessageField(value); } } public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasMessageField = true; result.messageField_ = value; return this; } public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasMessageField = true; result.messageField_ = builderForValue.Build(); return this; } public Builder MergeMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasMessageField && result.messageField_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) { result.messageField_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageField_).MergeFrom(value).BuildPartial(); @@ -10248,6 +10328,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetStringPieceField(value); } } public Builder SetStringPieceField(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasStringPieceField = true; result.stringPieceField_ = value; return this; @@ -10266,6 +10347,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetCordField(value); } } public Builder SetCordField(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasCordField = true; result.cordField_ = value; return this; @@ -10312,10 +10394,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedStringField(index); } public Builder SetRepeatedStringField(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedStringField_[index] = value; return this; } public Builder AddRepeatedStringField(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedStringField_.Add(value); return this; } @@ -10364,18 +10448,22 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedMessageField(index); } public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedMessageField_[index] = value; return this; } public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedMessageField_[index] = builderForValue.Build(); return this; } public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedMessageField_.Add(value); return this; } public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.repeatedMessageField_.Add(builderForValue.Build()); return this; } @@ -10398,10 +10486,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedStringPieceField(index); } public Builder SetRepeatedStringPieceField(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedStringPieceField_[index] = value; return this; } public Builder AddRepeatedStringPieceField(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedStringPieceField_.Add(value); return this; } @@ -10424,10 +10514,12 @@ namespace Google.ProtocolBuffers.TestProtos { return result.GetRepeatedCordField(index); } public Builder SetRepeatedCordField(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedCordField_[index] = value; return this; } public Builder AddRepeatedCordField(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.repeatedCordField_.Add(value); return this; } @@ -10671,6 +10763,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetMyString(value); } } public Builder SetMyString(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasMyString = true; result.myString_ = value; return this; @@ -11009,6 +11102,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetEscapedBytes(value); } } public Builder SetEscapedBytes(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasEscapedBytes = true; result.escapedBytes_ = value; return this; @@ -11099,6 +11193,7 @@ namespace Google.ProtocolBuffers.TestProtos { set { SetUtf8String(value); } } public Builder SetUtf8String(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasUtf8String = true; result.utf8String_ = value; return this; diff --git a/src/ProtocolBuffers.Test/TestUtil.cs b/src/ProtocolBuffers.Test/TestUtil.cs index d91d8540..47262ff9 100644 --- a/src/ProtocolBuffers.Test/TestUtil.cs +++ b/src/ProtocolBuffers.Test/TestUtil.cs @@ -1383,5 +1383,14 @@ namespace Google.ProtocolBuffers { } return bytes; } + + internal static void AssertArgumentNullException(Action action) { + try { + action(); + Assert.Fail("Exception was not thrown"); + } catch (ArgumentNullException) { + // We expect this exception. + } + } } } diff --git a/src/ProtocolBuffers.Test/TextFormatTest.cs b/src/ProtocolBuffers.Test/TextFormatTest.cs index d8de4b8e..a8e0de4d 100644 --- a/src/ProtocolBuffers.Test/TextFormatTest.cs +++ b/src/ProtocolBuffers.Test/TextFormatTest.cs @@ -499,5 +499,29 @@ namespace Google.ProtocolBuffers { AssertFormatException(() => TextFormat.ParseUInt64("-1")); AssertFormatException(() => TextFormat.ParseInt32("abcd")); } + + [Test] + public void ParseLongString() { + string longText = + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890" + + "123456789012345678901234567890123456789012345678901234567890"; + TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); + TextFormat.Merge("optional_string: \"" + longText + "\"", builder); + Assert.AreEqual(longText, builder.OptionalString); + } } } diff --git a/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs b/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs index 743a0c36..09733c3b 100644 --- a/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs +++ b/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs @@ -192,6 +192,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetNamespace(value); } } public Builder SetNamespace(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasNamespace = true; result.namespace_ = value; return this; @@ -210,6 +211,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetUmbrellaClassname(value); } } public Builder SetUmbrellaClassname(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasUmbrellaClassname = true; result.umbrellaClassname_ = value; return this; @@ -381,6 +383,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetPropertyName(value); } } public Builder SetPropertyName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasPropertyName = true; result.propertyName_ = value; return this; diff --git a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs index dcd10b8e..67fdf966 100644 --- a/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs +++ b/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs @@ -379,18 +379,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetFile(index); } public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.file_[index] = value; return this; } public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.file_[index] = builderForValue.Build(); return this; } public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.file_.Add(value); return this; } public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.file_.Add(builderForValue.Build()); return this; } @@ -782,6 +786,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -800,6 +805,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetPackage(value); } } public Builder SetPackage(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasPackage = true; result.package_ = value; return this; @@ -820,10 +826,12 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetDependency(index); } public Builder SetDependency(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.dependency_[index] = value; return this; } public Builder AddDependency(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.dependency_.Add(value); return this; } @@ -846,18 +854,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetMessageType(index); } public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.messageType_[index] = value; return this; } public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.messageType_[index] = builderForValue.Build(); return this; } public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.messageType_.Add(value); return this; } public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.messageType_.Add(builderForValue.Build()); return this; } @@ -880,18 +892,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetEnumType(index); } public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.enumType_[index] = value; return this; } public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.enumType_[index] = builderForValue.Build(); return this; } public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.enumType_.Add(value); return this; } public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.enumType_.Add(builderForValue.Build()); return this; } @@ -914,18 +930,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetService(index); } public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.service_[index] = value; return this; } public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.service_[index] = builderForValue.Build(); return this; } public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.service_.Add(value); return this; } public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.service_.Add(builderForValue.Build()); return this; } @@ -948,18 +968,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetExtension(index); } public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.extension_[index] = value; return this; } public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.extension_[index] = builderForValue.Build(); return this; } public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.extension_.Add(value); return this; } public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.extension_.Add(builderForValue.Build()); return this; } @@ -980,16 +1004,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -1601,6 +1628,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -1621,18 +1649,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetField(index); } public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field_[index] = value; return this; } public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.field_[index] = builderForValue.Build(); return this; } public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.field_.Add(value); return this; } public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.field_.Add(builderForValue.Build()); return this; } @@ -1655,18 +1687,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetExtension(index); } public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.extension_[index] = value; return this; } public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.extension_[index] = builderForValue.Build(); return this; } public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.extension_.Add(value); return this; } public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.extension_.Add(builderForValue.Build()); return this; } @@ -1689,18 +1725,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetNestedType(index); } public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.nestedType_[index] = value; return this; } public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.nestedType_[index] = builderForValue.Build(); return this; } public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.nestedType_.Add(value); return this; } public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.nestedType_.Add(builderForValue.Build()); return this; } @@ -1723,18 +1763,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetEnumType(index); } public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.enumType_[index] = value; return this; } public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.enumType_[index] = builderForValue.Build(); return this; } public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.enumType_.Add(value); return this; } public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.enumType_.Add(builderForValue.Build()); return this; } @@ -1757,18 +1801,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetExtensionRange(index); } public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.extensionRange_[index] = value; return this; } public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.extensionRange_[index] = builderForValue.Build(); return this; } public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.extensionRange_.Add(value); return this; } public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.extensionRange_.Add(builderForValue.Build()); return this; } @@ -1789,16 +1837,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -2200,6 +2251,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -2272,6 +2324,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetTypeName(value); } } public Builder SetTypeName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasTypeName = true; result.typeName_ = value; return this; @@ -2290,6 +2343,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetExtendee(value); } } public Builder SetExtendee(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasExtendee = true; result.extendee_ = value; return this; @@ -2308,6 +2362,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetDefaultValue(value); } } public Builder SetDefaultValue(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasDefaultValue = true; result.defaultValue_ = value; return this; @@ -2326,16 +2381,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -2593,6 +2651,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -2613,18 +2672,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetValue(index); } public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.value_[index] = value; return this; } public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.value_[index] = builderForValue.Build(); return this; } public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.value_.Add(value); return this; } public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.value_.Add(builderForValue.Build()); return this; } @@ -2645,16 +2708,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -2904,6 +2970,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -2940,16 +3007,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -3207,6 +3277,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -3227,18 +3298,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetMethod(index); } public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.method_[index] = value; return this; } public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.method_[index] = builderForValue.Build(); return this; } public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.method_.Add(value); return this; } public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.method_.Add(builderForValue.Build()); return this; } @@ -3259,16 +3334,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -3540,6 +3618,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetName(value); } } public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasName = true; result.name_ = value; return this; @@ -3558,6 +3637,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetInputType(value); } } public Builder SetInputType(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasInputType = true; result.inputType_ = value; return this; @@ -3576,6 +3656,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOutputType(value); } } public Builder SetOutputType(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOutputType = true; result.outputType_ = value; return this; @@ -3594,16 +3675,19 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetOptions(value); } } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasOptions = true; result.options_ = value; return this; } public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.hasOptions = true; result.options_ = builderForValue.Build(); return this; } public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); if (result.HasOptions && result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) { result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); @@ -3916,6 +4000,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetJavaPackage(value); } } public Builder SetJavaPackage(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasJavaPackage = true; result.javaPackage_ = value; return this; @@ -3934,6 +4019,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetJavaOuterClassname(value); } } public Builder SetJavaOuterClassname(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasJavaOuterClassname = true; result.javaOuterClassname_ = value; return this; @@ -3990,18 +4076,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -4250,18 +4340,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -4545,6 +4639,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetExperimentalMapKey(value); } } public Builder SetExperimentalMapKey(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasExperimentalMapKey = true; result.experimentalMapKey_ = value; return this; @@ -4565,18 +4660,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -4785,18 +4884,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -5005,18 +5108,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -5225,18 +5332,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -5445,18 +5556,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetUninterpretedOption(index); } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_[index] = value; return this; } public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_[index] = builderForValue.Build(); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.uninterpretedOption_.Add(value); return this; } public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.uninterpretedOption_.Add(builderForValue.Build()); return this; } @@ -5699,6 +5814,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetNamePart_(value); } } public Builder SetNamePart_(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasNamePart_ = true; result.namePart_ = value; return this; @@ -6010,18 +6126,22 @@ namespace Google.ProtocolBuffers.DescriptorProtos { return result.GetName(index); } public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.name_[index] = value; return this; } public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.name_[index] = builderForValue.Build(); return this; } public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.name_.Add(value); return this; } public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); result.name_.Add(builderForValue.Build()); return this; } @@ -6042,6 +6162,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetIdentifierValue(value); } } public Builder SetIdentifierValue(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasIdentifierValue = true; result.identifierValue_ = value; return this; @@ -6114,6 +6235,7 @@ namespace Google.ProtocolBuffers.DescriptorProtos { set { SetStringValue(value); } } public Builder SetStringValue(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); result.hasStringValue = true; result.stringValue_ = value; return this; diff --git a/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs b/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs index c85f3f57..38396093 100644 --- a/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs +++ b/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs @@ -66,10 +66,12 @@ namespace Google.ProtocolBuffers.FieldAccess { } public override void AddRepeated(TBuilder builder, object value) { - base.AddRepeated(builder, ((EnumValueDescriptor) value).Number); + ThrowHelper.ThrowIfNull(value, "value"); + base.AddRepeated(builder, ((EnumValueDescriptor)value).Number); } public override void SetRepeated(TBuilder builder, int index, object value) { + ThrowHelper.ThrowIfNull(value, "value"); base.SetRepeated(builder, index, ((EnumValueDescriptor) value).Number); } } diff --git a/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs b/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs index 0a4d516e..5cca9748 100644 --- a/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs +++ b/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs @@ -64,7 +64,7 @@ namespace Google.ProtocolBuffers.FieldAccess { /// which may already be of the right type or may be a dynamic message. /// </summary> private object CoerceType(object value) { - + ThrowHelper.ThrowIfNull(value, "value"); // If it's already of the right type, we're done if (ClrType.IsInstanceOfType(value)) { return value; diff --git a/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs b/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs index 2acf8e2a..e5bb411a 100644 --- a/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs +++ b/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs @@ -122,10 +122,12 @@ namespace Google.ProtocolBuffers.FieldAccess { } public virtual void SetRepeated(TBuilder builder, int index, object value) { - setElementMethod.Invoke(builder, new object[] {index, value} ); + ThrowHelper.ThrowIfNull(value, "value"); + setElementMethod.Invoke(builder, new object[] { index, value }); } public virtual void AddRepeated(TBuilder builder, object value) { + ThrowHelper.ThrowIfNull(value, "value"); addValueDelegate(builder, value); } diff --git a/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs b/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs index 8ecde10f..9125bdcc 100644 --- a/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs +++ b/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs @@ -63,6 +63,7 @@ namespace Google.ProtocolBuffers.FieldAccess { /// from an EnumValueDescriptor parameter. /// </summary> public override void SetValue(TBuilder builder, object value) { + ThrowHelper.ThrowIfNull(value, "value"); EnumValueDescriptor valueDescriptor = (EnumValueDescriptor) value; base.SetValue(builder, valueDescriptor.Number); } diff --git a/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs b/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs index 761d7c96..9ce2cbb1 100644 --- a/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs +++ b/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs @@ -60,7 +60,7 @@ namespace Google.ProtocolBuffers.FieldAccess { /// which may already be of the right type or may be a dynamic message. /// </summary> private object CoerceType(object value) { - + ThrowHelper.ThrowIfNull(value, "value"); // If it's already of the right type, we're done if (ClrType.IsInstanceOfType(value)) { return value; diff --git a/src/ProtocolBuffers/FieldSet.cs b/src/ProtocolBuffers/FieldSet.cs index a2e1912a..bc2e2e70 100644 --- a/src/ProtocolBuffers/FieldSet.cs +++ b/src/ProtocolBuffers/FieldSet.cs @@ -413,7 +413,9 @@ namespace Google.ProtocolBuffers { /// element type, not whether it's a list. /// </remarks> /// <exception cref="ArgumentException">The value is not of the right type.</exception> + /// <exception cref="ArgumentNullException">The value is null.</exception> private static void VerifyType(FieldDescriptor field, object value) { + ThrowHelper.ThrowIfNull(value, "value"); bool isValid = false; switch (field.MappedType) { case MappedType.Int32: isValid = value is int; break; diff --git a/src/ProtocolBuffers/GeneratedBuilder.cs b/src/ProtocolBuffers/GeneratedBuilder.cs index 90767929..c678d66f 100644 --- a/src/ProtocolBuffers/GeneratedBuilder.cs +++ b/src/ProtocolBuffers/GeneratedBuilder.cs @@ -78,7 +78,13 @@ namespace Google.ProtocolBuffers { /// <summary> /// Adds all of the specified values to the given collection. /// </summary> + /// <exception cref="ArgumentNullException">Any element of the list is null</exception> protected void AddRange<T>(IEnumerable<T> source, IList<T> destination) { + ThrowHelper.ThrowIfNull(source); + // We only need to check this for nullable types. + if (default(T) == null) { + ThrowHelper.ThrowIfAnyNull(source); + } List<T> list = destination as List<T>; if (list != null) { list.AddRange(source); diff --git a/src/ProtocolBuffers/ProtocolBuffers.csproj b/src/ProtocolBuffers/ProtocolBuffers.csproj index 520594f5..5a1419e1 100644 --- a/src/ProtocolBuffers/ProtocolBuffers.csproj +++ b/src/ProtocolBuffers/ProtocolBuffers.csproj @@ -104,6 +104,7 @@ <Compile Include="TextFormat.cs" /> <Compile Include="TextGenerator.cs" /> <Compile Include="TextTokenizer.cs" /> + <Compile Include="ThrowHelper.cs" /> <Compile Include="UninitializedMessageException.cs" /> <Compile Include="UnknownField.cs" /> <Compile Include="UnknownFieldSet.cs" /> diff --git a/src/ProtocolBuffers/ThrowHelper.cs b/src/ProtocolBuffers/ThrowHelper.cs new file mode 100644 index 00000000..2adede61 --- /dev/null +++ b/src/ProtocolBuffers/ThrowHelper.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Google.ProtocolBuffers { + /// <summary> + /// Helper methods for throwing exceptions + /// </summary> + public static class ThrowHelper { + + /// <summary> + /// Throws an ArgumentNullException if the given value is null. + /// </summary> + public static void ThrowIfNull(object value, string name) { + if (value == null) { + throw new ArgumentNullException(name); + } + } + + /// <summary> + /// Throws an ArgumentNullException if the given value is null. + /// </summary> + public static void ThrowIfNull(object value) { + if (value == null) { + throw new ArgumentNullException(); + } + } + + /// <summary> + /// Throws an ArgumentNullException if the given value or any element within it is null. + /// </summary> + public static void ThrowIfAnyNull<T>(IEnumerable<T> sequence) { + foreach (T t in sequence) { + if (t == null) { + throw new ArgumentNullException(); + } + } + } + } +} |