Skip to content

Commit 34f9497

Browse files
committed
Use explicit comparer for extension identifiers
1 parent 145033c commit 34f9497

2 files changed

Lines changed: 14 additions & 1 deletion

File tree

csharp/src/Google.Protobuf/ExtensionRegistry.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ namespace Google.Protobuf
4242
/// </summary>
4343
public sealed class ExtensionRegistry : ICollection<Extension>, IDeepCloneable<ExtensionRegistry>
4444
{
45+
internal sealed class ExtensionComparer : IEqualityComparer<Extension>
46+
{
47+
public bool Equals(Extension a, Extension b)
48+
{
49+
return new ObjectIntPair<Type>(a.TargetType, a.FieldNumber).Equals(new ObjectIntPair<Type>(b.TargetType, b.FieldNumber));
50+
}
51+
public int GetHashCode(Extension a)
52+
{
53+
return new ObjectIntPair<Type>(a.TargetType, a.FieldNumber).GetHashCode();
54+
}
55+
56+
internal static ExtensionComparer Instance = new ExtensionComparer();
57+
}
4558
private IDictionary<ObjectIntPair<Type>, Extension> extensions;
4659

4760
/// <summary>

csharp/src/Google.Protobuf/Reflection/FileDescriptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ public static FileDescriptor FromGeneratedCode(
448448

449449
private static IEnumerable<Extension> GetAllExtensions(FileDescriptor[] dependencies, GeneratedClrTypeInfo generatedInfo)
450450
{
451-
return dependencies.SelectMany(GetAllDependedExtensions).Distinct().Concat(GetAllGeneratedExtensions(generatedInfo));
451+
return dependencies.SelectMany(GetAllDependedExtensions).Distinct(ExtensionRegistry.ExtensionComparer.Instance).Concat(GetAllGeneratedExtensions(generatedInfo));
452452
}
453453

454454
private static IEnumerable<Extension> GetAllGeneratedExtensions(GeneratedClrTypeInfo generated)

0 commit comments

Comments
 (0)