From c5c9c6a7e05a44724bc4bc6192ff995b4398d559 Mon Sep 17 00:00:00 2001 From: Jie Luo Date: Wed, 29 Apr 2015 11:33:07 -0700 Subject: field presence Reflection and tests --- .../src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs') 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[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); } } /// /// Creates an accessor for a single field /// - private static IFieldAccessor CreateAccessor(FieldDescriptor field, string name) + private static IFieldAccessor CreateAccessor(FieldDescriptor field, string name, bool supportFieldPresence) { if (field.IsRepeated) { @@ -98,9 +103,9 @@ namespace Google.ProtocolBuffers.FieldAccess case MappedType.Message: return new SingleMessageAccessor(name); case MappedType.Enum: - return new SingleEnumAccessor(field, name); + return new SingleEnumAccessor(field, name, supportFieldPresence); default: - return new SinglePrimitiveAccessor(name); + return new SinglePrimitiveAccessor(field, name, supportFieldPresence); } } } -- cgit v1.2.3