diff options
author | Jon Skeet <jonskeet@google.com> | 2018-08-30 14:53:06 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2018-09-22 09:09:15 +0100 |
commit | 1711999078ca1d435de3958bf963e95a742e972f (patch) | |
tree | 6ea6797a824da7cf26b2535ea4e3a9be9cd5ec95 /csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs | |
parent | a6e1cc7e328c45a0cb9856c530c8f6cd23314163 (diff) | |
download | protobuf-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/ServiceDescriptor.cs')
-rw-r--r-- | csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs b/csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs index fe5c072c..da570551 100644 --- a/csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs +++ b/csharp/src/Google.Protobuf/Reflection/ServiceDescriptor.cs @@ -32,6 +32,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; namespace Google.Protobuf.Reflection { @@ -58,6 +59,17 @@ namespace Google.Protobuf.Reflection /// </summary> public override string Name { get { return proto.Name; } } + internal override IReadOnlyList<DescriptorBase> GetNestedDescriptorListForField(int fieldNumber) + { + switch (fieldNumber) + { + case ServiceDescriptorProto.MethodFieldNumber: + return (IReadOnlyList<DescriptorBase>) methods; + default: + return null; + } + } + internal ServiceDescriptorProto Proto { get { return proto; } } /// <value> |