aboutsummaryrefslogtreecommitdiff
path: root/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs
diff options
context:
space:
mode:
authorJon Skeet <jonskeet@google.com>2018-08-30 14:53:06 +0100
committerJon Skeet <skeet@pobox.com>2018-09-22 09:09:15 +0100
commit1711999078ca1d435de3958bf963e95a742e972f (patch)
tree6ea6797a824da7cf26b2535ea4e3a9be9cd5ec95 /csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs
parenta6e1cc7e328c45a0cb9856c530c8f6cd23314163 (diff)
downloadprotobuf-1711999078ca1d435de3958bf963e95a742e972f.tar.gz
protobuf-1711999078ca1d435de3958bf963e95a742e972f.tar.bz2
protobuf-1711999078ca1d435de3958bf963e95a742e972f.zip
Provide simple access to descriptor declarations in C#
This is primarily for access to comments, which would be expected to be available in a protoc plugin. The implementation has two fiddly aspects: - We use a Lazy<T> to avoid building the map before cross-linking. An alternative would be to crosslink at the end of the constructor, and remove the calls to CrossLink elsewhere. This would be generally better IMO, but deviate from the Java code. - The casts to IReadOnlyList<DescriptorBase> are unfortunate. They'll always work, because these lists are always ReadOnlyCollection<T> for a descriptor type... but we can't use IList<DescriptorBase> as that's not covariant, and it's annoyingly fiddly to change the field to be of type ReadOnlyCollection<T>.
Diffstat (limited to 'csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs')
-rw-r--r--csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs15
1 files changed, 15 insertions, 0 deletions
diff --git a/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs b/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs
index dbb6768b..03fd63ce 100644
--- a/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs
+++ b/csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs
@@ -115,6 +115,21 @@ namespace Google.Protobuf.Reflection
/// </summary>
public override string Name => Proto.Name;
+ internal override IReadOnlyList<DescriptorBase> GetNestedDescriptorListForField(int fieldNumber)
+ {
+ switch (fieldNumber)
+ {
+ case DescriptorProto.FieldFieldNumber:
+ return (IReadOnlyList<DescriptorBase>) fieldsInDeclarationOrder;
+ case DescriptorProto.NestedTypeFieldNumber:
+ return (IReadOnlyList<DescriptorBase>) NestedTypes;
+ case DescriptorProto.EnumTypeFieldNumber:
+ return (IReadOnlyList<DescriptorBase>) EnumTypes;
+ default:
+ return null;
+ }
+ }
+
internal DescriptorProto Proto { get; }
/// <summary>