aboutsummaryrefslogtreecommitdiff
path: root/src/ProtoGen/FieldGeneratorBase.cs
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2009-01-27 12:25:21 +0000
committerJon Skeet <skeet@pobox.com>2009-01-27 12:25:21 +0000
commit642a8140c88dfb61f5f4812fc179e4f42beb4978 (patch)
tree4d5bef960bd3af7d84c168e675076c0f69990e1a /src/ProtoGen/FieldGeneratorBase.cs
parent25a2792283ec695d3c038559ea0682f1d83d9bd3 (diff)
downloadprotobuf-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.cs41
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) {