First pass at making field access simpler.
This is definitely not ready to ship - I'm "troubled" by the disconnect between a list of fields in declaration order, and a mapping of field accessors by field number/name. Discussion required, but I find that easier when we've got code to look at :)
diff --git a/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs b/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs
index 0aff0a6..ed4291a 100644
--- a/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs
+++ b/csharp/src/Google.Protobuf.Test/Reflection/DescriptorsTest.cs
@@ -33,6 +33,7 @@
using System.Linq;
using Google.Protobuf.TestProtos;
using NUnit.Framework;
+using UnitTest.Issues.TestProtos;
namespace Google.Protobuf.Reflection
{
@@ -220,5 +221,19 @@
CollectionAssert.AreEquivalent(expectedFields, descriptor.Fields);
}
+
+ [Test]
+ public void ConstructionWithoutGeneratedCodeInfo()
+ {
+ var data = UnittestIssues.Descriptor.Proto.ToByteArray();
+ var newDescriptor = Google.Protobuf.Reflection.FileDescriptor.InternalBuildGeneratedFileFrom(data, new Reflection.FileDescriptor[] { }, null);
+
+ // We should still be able to get at a field...
+ var messageDescriptor = newDescriptor.FindTypeByName<MessageDescriptor>("ItemField");
+ var fieldDescriptor = messageDescriptor.FindFieldByName("item");
+ // But there shouldn't be an accessor (or a generated type for the message)
+ Assert.IsNull(fieldDescriptor.Accessor);
+ Assert.IsNull(messageDescriptor.GeneratedType);
+ }
}
}
\ No newline at end of file