aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
diff options
context:
space:
mode:
authorJie Luo <anandolee@gmail.com>2015-04-29 11:33:07 -0700
committerJie Luo <anandolee@gmail.com>2015-04-29 11:33:07 -0700
commitc5c9c6a7e05a44724bc4bc6192ff995b4398d559 (patch)
treebb4eab9a4c4830b7e6d91f83b1309498a9e41578 /csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
parent8bae6c09bc8c8be808f0acc9b2ad4c9811493060 (diff)
downloadprotobuf-c5c9c6a7e05a44724bc4bc6192ff995b4398d559.tar.gz
protobuf-c5c9c6a7e05a44724bc4bc6192ff995b4398d559.tar.bz2
protobuf-c5c9c6a7e05a44724bc4bc6192ff995b4398d559.zip
field presence Reflection and tests
Diffstat (limited to 'csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs')
-rw-r--r--csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs13
1 files changed, 9 insertions, 4 deletions
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs b/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
index 6ba039c1..60b032e2 100644
--- a/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
+++ b/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
@@ -68,16 +68,21 @@ namespace Google.ProtocolBuffers.FieldAccess
{
this.descriptor = descriptor;
accessors = new IFieldAccessor<TMessage, TBuilder>[descriptor.Fields.Count];
+ bool supportFieldPresence = false;
+ if (descriptor.File.GetSyntax() == FileDescriptor.Syntax.PROTO2)
+ {
+ supportFieldPresence = true;
+ }
for (int i = 0; i < accessors.Length; i++)
{
- accessors[i] = CreateAccessor(descriptor.Fields[i], propertyNames[i]);
+ accessors[i] = CreateAccessor(descriptor.Fields[i], propertyNames[i], supportFieldPresence);
}
}
/// <summary>
/// Creates an accessor for a single field
/// </summary>
- private static IFieldAccessor<TMessage, TBuilder> CreateAccessor(FieldDescriptor field, string name)
+ private static IFieldAccessor<TMessage, TBuilder> CreateAccessor(FieldDescriptor field, string name, bool supportFieldPresence)
{
if (field.IsRepeated)
{
@@ -98,9 +103,9 @@ namespace Google.ProtocolBuffers.FieldAccess
case MappedType.Message:
return new SingleMessageAccessor<TMessage, TBuilder>(name);
case MappedType.Enum:
- return new SingleEnumAccessor<TMessage, TBuilder>(field, name);
+ return new SingleEnumAccessor<TMessage, TBuilder>(field, name, supportFieldPresence);
default:
- return new SinglePrimitiveAccessor<TMessage, TBuilder>(name);
+ return new SinglePrimitiveAccessor<TMessage, TBuilder>(field, name, supportFieldPresence);
}
}
}