Skip to content

Commit 8bb204f

Browse files
authored
Use static ReferenceComparer for reference comparisons (#2348)
- Obsolete IdentityEqualityComparer
1 parent b4385c6 commit 8bb204f

File tree

5 files changed

+11
-23
lines changed

5 files changed

+11
-23
lines changed

src/NHibernate/Collection/AbstractPersistentCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -741,7 +741,7 @@ protected virtual ICollection GetOrphans(ICollection oldElements, ICollection cu
741741
return oldElements;
742742
}
743743

744-
if (currentElements.Count == oldElements.Count && currentElements.Cast<object>().SequenceEqual(oldElements.Cast<object>(), new IdentityEqualityComparer()))
744+
if (currentElements.Count == oldElements.Count && currentElements.Cast<object>().SequenceEqual(oldElements.Cast<object>(), ReferenceComparer<object>.Instance))
745745
return Array.Empty<object>();
746746

747747
var persister = session.Factory.GetEntityPersister(entityName);

src/NHibernate/IdentityEqualityComparer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
namespace NHibernate
77
{
8+
// Since v5.3
9+
[Obsolete("This class has no more usages and will be removed in a future version")]
810
[Serializable]
911
public class IdentityEqualityComparer : IEqualityComparer, IEqualityComparer<object>
1012
{

src/NHibernate/Proxy/Poco/BasicLazyInitializer.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ namespace NHibernate.Proxy.Poco
1414
[Obsolete("DynamicProxy has been obsoleted, use static proxies instead (see StaticProxyFactory)")]
1515
public abstract class BasicLazyInitializer : AbstractLazyInitializer
1616
{
17-
private static readonly IEqualityComparer IdentityEqualityComparer = new IdentityEqualityComparer();
18-
1917
internal System.Type persistentClass;
2018
protected internal MethodInfo getIdentifierMethod;
2119
protected internal MethodInfo setIdentifierMethod;
@@ -73,7 +71,7 @@ public virtual object Invoke(MethodInfo method, object[] args, object proxy)
7371
{
7472
if (!overridesEquals && methodName == "GetHashCode")
7573
{
76-
return IdentityEqualityComparer.GetHashCode(proxy);
74+
return ReferenceComparer<object>.Instance.GetHashCode(proxy);
7775
}
7876
else if (IsEqualToIdentifierMethod(method))
7977
{
@@ -92,7 +90,7 @@ public virtual object Invoke(MethodInfo method, object[] args, object proxy)
9290
{
9391
if (!overridesEquals && methodName == "Equals")
9492
{
95-
return IdentityEqualityComparer.Equals(args[0], proxy);
93+
return ReferenceComparer<object>.Instance.Equals(args[0], proxy);
9694
}
9795
else if (setIdentifierMethod!=null&&method.Equals(setIdentifierMethod))
9896
{

src/NHibernate/Transform/DistinctRootEntityResultTransformer.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Linq;
55
using System.Runtime.CompilerServices;
6+
using NHibernate.Util;
67

78
namespace NHibernate.Transform
89
{
@@ -12,19 +13,6 @@ public class DistinctRootEntityResultTransformer : IResultTransformer, ITupleSub
1213
private static readonly INHibernateLogger log = NHibernateLogger.For(typeof(DistinctRootEntityResultTransformer));
1314
internal static readonly DistinctRootEntityResultTransformer Instance = new DistinctRootEntityResultTransformer();
1415

15-
sealed class IdentityComparer<T> : IEqualityComparer<T>
16-
{
17-
public bool Equals(T x, T y)
18-
{
19-
return ReferenceEquals(x, y);
20-
}
21-
22-
public int GetHashCode(T obj)
23-
{
24-
return RuntimeHelpers.GetHashCode(obj);
25-
}
26-
}
27-
2816
public object TransformTuple(object[] tuple, string[] aliases)
2917
{
3018
return tuple[tuple.Length - 1];
@@ -36,7 +24,7 @@ public IList TransformList(IList list)
3624
return list;
3725

3826
IList result = (IList) Activator.CreateInstance(list.GetType());
39-
var distinct = new HashSet<object>(new IdentityComparer<object>());
27+
var distinct = new HashSet<object>(ReferenceComparer<object>.Instance);
4028

4129
for (int i = 0; i < list.Count; i++)
4230
{
@@ -54,9 +42,9 @@ public IList TransformList(IList list)
5442
return result;
5543
}
5644

57-
internal static List<T> TransformList<T>(IEnumerable<T> list)
45+
internal static List<T> TransformList<T>(IEnumerable<T> list) where T: class
5846
{
59-
var result = list.Distinct(new IdentityComparer<T>()).ToList();
47+
var result = list.Distinct(ReferenceComparer<T>.Instance).ToList();
6048
if (log.IsDebugEnabled())
6149
{
6250
log.Debug("transformed: {0} rows to: {1} distinct results", list.Count(), result.Count);

src/NHibernate/Util/IdentityMap.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public sealed class IdentityMap : IDictionary, IDeserializationCallback
3939
/// <returns>A new IdentityMap based on a Hashtable.</returns>
4040
public static IDictionary Instantiate(int size)
4141
{
42-
return new IdentityMap(new Hashtable(size, new IdentityEqualityComparer()));
42+
return new IdentityMap(new Hashtable(size, ReferenceComparer<object>.Instance));
4343
}
4444

4545
/// <summary>
@@ -50,7 +50,7 @@ public static IDictionary Instantiate(int size)
5050
/// <returns>A new IdentityMap based on ListDictionary.</returns>
5151
public static IDictionary InstantiateSequenced(int size)
5252
{
53-
return new IdentityMap(new SequencedHashMap(size, new IdentityEqualityComparer()));
53+
return new IdentityMap(new SequencedHashMap(size, ReferenceComparer<object>.Instance));
5454
}
5555

5656
/// <summary>

0 commit comments

Comments
 (0)