Ignore incomplete extensions when building a FileDescriptor

FileDescriptor construction uses an extension registry including extensions from imports. If these were created using an older version of protoc, the FieldDescriptor.Extension property may be null; we ignore such extensions rather than failing.
pull/6824/head
Jon Skeet 5 years ago
parent 7581fd5ea6
commit 9b5fdb0938
  1. 5
      csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs
  2. 5
      csharp/src/Google.Protobuf/Reflection/MessageDescriptor.cs

@ -282,6 +282,9 @@ namespace Google.Protobuf.Reflection
/// <summary>
/// Unmodifiable list of top-level extensions declared in this file.
/// Note that some extensions may be incomplete (FieldDescriptor.Extension may be null)
/// if this descriptor was generated using a version of protoc that did not fully
/// support extensions in C#.
/// </summary>
public ExtensionCollection Extensions { get; }
@ -456,6 +459,7 @@ namespace Google.Protobuf.Reflection
{
return descriptor.Extensions.UnorderedExtensions
.Select(s => s.Extension)
.Where(e => e != null)
.Concat(descriptor.Dependencies.Concat(descriptor.PublicDependencies).SelectMany(GetAllDependedExtensions))
.Concat(descriptor.MessageTypes.SelectMany(GetAllDependedExtensionsFromMessage));
}
@ -464,6 +468,7 @@ namespace Google.Protobuf.Reflection
{
return descriptor.Extensions.UnorderedExtensions
.Select(s => s.Extension)
.Where(e => e != null)
.Concat(descriptor.NestedTypes.SelectMany(GetAllDependedExtensionsFromMessage));
}

@ -215,7 +215,10 @@ namespace Google.Protobuf.Reflection
public FieldCollection Fields { get; }
/// <summary>
/// An unmodifiable list of extensions defined in this message's scrope
/// An unmodifiable list of extensions defined in this message's scope.
/// Note that some extensions may be incomplete (FieldDescriptor.Extension may be null)
/// if they are declared in a file generated using a version of protoc that did not fully
/// support extensions in C#.
/// </summary>
public ExtensionCollection Extensions { get; }

Loading…
Cancel
Save