aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
diff options
context:
space:
mode:
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);
}
}
}