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 /src/ProtoGen/FieldGeneratorBase.cs | |
parent | 25a2792283ec695d3c038559ea0682f1d83d9bd3 (diff) | |
download | protobuf-642a8140c88dfb61f5f4812fc179e4f42beb4978.tar.gz protobuf-642a8140c88dfb61f5f4812fc179e4f42beb4978.tar.bz2 protobuf-642a8140c88dfb61f5f4812fc179e4f42beb4978.zip |
Setters/adders now throw ArgumentNullException appropriately.
Diffstat (limited to 'src/ProtoGen/FieldGeneratorBase.cs')
-rw-r--r-- | src/ProtoGen/FieldGeneratorBase.cs | 41 |
1 files changed, 40 insertions, 1 deletions
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) { |