Skip to content

Commit 576185a

Browse files
committed
Merge branch 'master' into FastGetMethod
2 parents 5342532 + 8bb204f commit 576185a

16 files changed

+51
-72
lines changed

src/NHibernate.Test/UtilityTest/JoinedEnumerableGenericFixture.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections;
23
using System.Collections.Generic;
34
using NHibernate.Util;
@@ -6,6 +7,8 @@
67
namespace NHibernate.Test.UtilityTest
78
{
89
// This test is the same of JoinedEnumerableFixture but for generic version.
10+
// Since 5.3
11+
[Obsolete]
912
[TestFixture]
1013
public class JoinedEnumerableGenericFixture
1114
{

src/NHibernate.Test/UtilityTest/SingletonEnumerableFixture.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
using System;
12
using System.Collections;
23
using NHibernate.Util;
34
using NUnit.Framework;
45

56
namespace NHibernate.Test.UtilityTest
67
{
8+
// Since 5.3
9+
[Obsolete]
710
[TestFixture]
811
public class SingletonEnumerableFixture
912
{
@@ -46,4 +49,4 @@ public void ShouldWorkAsEnumerator()
4649
Assert.That(i, Is.EqualTo(1));
4750
}
4851
}
49-
}
52+
}

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/Mapping/Component.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq;
34
using NHibernate.Tuple.Component;
45
using NHibernate.Type;
56
using NHibernate.Util;
@@ -72,12 +73,7 @@ public override IEnumerable<ISelectable> ColumnIterator
7273
{
7374
get
7475
{
75-
List<IEnumerable<ISelectable>> iters = new List<IEnumerable<ISelectable>>();
76-
foreach (Property property in PropertyIterator)
77-
{
78-
iters.Add(property.ColumnIterator);
79-
}
80-
return new JoinedEnumerable<ISelectable>(iters);
76+
return PropertyIterator.SelectMany(x => x.ColumnIterator);
8177
}
8278
}
8379

src/NHibernate/Mapping/DenormalizedTable.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public DenormalizedTable(Table includedTable)
1818

1919
public override IEnumerable<Column> ColumnIterator
2020
{
21-
get { return new JoinedEnumerable<Column>(includedTable.ColumnIterator, base.ColumnIterator); }
21+
get { return includedTable.ColumnIterator.Concat(base.ColumnIterator); }
2222
}
2323

2424
public override IEnumerable<UniqueKey> UniqueKeyIterator
@@ -39,7 +39,6 @@ public override IEnumerable<Index> IndexIterator
3939
{
4040
get
4141
{
42-
List<Index> indexes = new List<Index>();
4342
IEnumerable<Index> includedIdxs = includedTable.IndexIterator;
4443
foreach (Index parentIndex in includedIdxs)
4544
{
@@ -55,9 +54,13 @@ public override IEnumerable<Index> IndexIterator
5554
index.IsInherited = true;
5655
index.Table = this;
5756
index.AddColumns(parentIndex.ColumnIterator);
58-
indexes.Add(index);
57+
yield return index;
58+
}
59+
60+
foreach (var index in base.IndexIterator)
61+
{
62+
yield return index;
5963
}
60-
return new JoinedEnumerable<Index>(indexes, base.IndexIterator);
6164
}
6265
}
6366

src/NHibernate/Mapping/PersistentClass.cs

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -215,26 +215,15 @@ public virtual IEnumerable<Subclass> SubclassIterator
215215
{
216216
get
217217
{
218-
IEnumerable<Subclass>[] iters = new IEnumerable<Subclass>[subclasses.Count + 1];
219-
int i = 0;
220-
foreach (Subclass subclass in subclasses)
221-
iters[i++] = subclass.SubclassIterator;
222-
223-
iters[i] = subclasses;
224-
return new JoinedEnumerable<Subclass>(iters);
218+
return subclasses.SelectMany(s => s.SubclassIterator).Concat(subclasses);
225219
}
226220
}
227221

228222
public virtual IEnumerable<PersistentClass> SubclassClosureIterator
229223
{
230224
get
231225
{
232-
List<IEnumerable<PersistentClass>> iters = new List<IEnumerable<PersistentClass>>();
233-
iters.Add(new SingletonEnumerable<PersistentClass>(this));
234-
foreach (Subclass clazz in SubclassIterator)
235-
iters.Add(clazz.SubclassClosureIterator);
236-
237-
return new JoinedEnumerable<PersistentClass>(iters);
226+
return new[] {this}.Concat(SubclassIterator.SelectMany(x => x.SubclassClosureIterator));
238227
}
239228
}
240229

@@ -322,19 +311,15 @@ public virtual IEnumerable<Property> SubclassPropertyClosureIterator
322311
{
323312
get
324313
{
325-
List<IEnumerable<Property>> iters = new List<IEnumerable<Property>>();
326-
iters.Add(PropertyClosureIterator);
327-
iters.Add(subclassProperties);
328-
foreach (Join join in subclassJoins)
329-
iters.Add(join.PropertyIterator);
330-
331-
return new JoinedEnumerable<Property>(iters);
314+
return PropertyClosureIterator
315+
.Concat(subclassProperties)
316+
.Concat(subclassJoins.SelectMany(x => x.PropertyIterator));
332317
}
333318
}
334319

335320
public virtual IEnumerable<Join> SubclassJoinClosureIterator
336321
{
337-
get { return new JoinedEnumerable<Join>(JoinClosureIterator, subclassJoins); }
322+
get { return JoinClosureIterator.Concat(subclassJoins); }
338323
}
339324

340325
/// <summary>
@@ -345,7 +330,7 @@ public virtual IEnumerable<Join> SubclassJoinClosureIterator
345330
/// <remarks>It adds the TableClosureIterator and the subclassTables into the IEnumerable.</remarks>
346331
public virtual IEnumerable<Table> SubclassTableClosureIterator
347332
{
348-
get { return new JoinedEnumerable<Table>(TableClosureIterator, subclassTables); }
333+
get { return TableClosureIterator.Concat(subclassTables); }
349334
}
350335

351336
public bool IsLazy
@@ -455,12 +440,7 @@ public virtual IEnumerable<Property> PropertyIterator
455440
{
456441
get
457442
{
458-
List<IEnumerable<Property>> iterators = new List<IEnumerable<Property>>();
459-
iterators.Add(properties);
460-
foreach (Join join in joins)
461-
iterators.Add(join.PropertyIterator);
462-
463-
return new JoinedEnumerable<Property>(iterators);
443+
return properties.Concat(joins.SelectMany(x => x.PropertyIterator));
464444
}
465445
}
466446

src/NHibernate/Mapping/RootClass.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ public override IEnumerable<Property> PropertyClosureIterator
8989
/// </remarks>
9090
public override IEnumerable<Table> TableClosureIterator
9191
{
92-
get { return new SingletonEnumerable<Table>(Table); }
92+
get { return new[] {Table}; }
9393
}
9494

9595
public override IEnumerable<IKeyValue> KeyClosureIterator
9696
{
97-
get { return new SingletonEnumerable<IKeyValue>(Key); }
97+
get { return new[] {Key}; }
9898
}
9999

100100
/// <summary>

src/NHibernate/Mapping/SingleTableSubclass.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq;
34
using NHibernate.Util;
45

56
namespace NHibernate.Mapping
@@ -12,7 +13,7 @@ public SingleTableSubclass(PersistentClass superclass)
1213

1314
protected internal override IEnumerable<Property> NonDuplicatedPropertyIterator
1415
{
15-
get { return new JoinedEnumerable<Property>(Superclass.UnjoinedPropertyIterator, UnjoinedPropertyIterator); }
16+
get { return Superclass.UnjoinedPropertyIterator.Concat(UnjoinedPropertyIterator); }
1617
}
1718

1819
protected internal override IEnumerable<ISelectable> DiscriminatorColumnIterator
@@ -39,4 +40,4 @@ public override void Validate(Engine.IMapping mapping)
3940
base.Validate(mapping);
4041
}
4142
}
42-
}
43+
}

src/NHibernate/Mapping/Subclass.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public override bool IsInherited
5858
/// </remarks>
5959
public override IEnumerable<Property> PropertyClosureIterator
6060
{
61-
get { return new JoinedEnumerable<Property>(Superclass.PropertyClosureIterator, PropertyIterator); }
61+
get { return Superclass.PropertyClosureIterator.Concat(PropertyIterator); }
6262
}
6363

6464
/// <summary>
@@ -75,12 +75,12 @@ public override IEnumerable<Property> PropertyClosureIterator
7575
/// </remarks>
7676
public override IEnumerable<Table> TableClosureIterator
7777
{
78-
get { return new JoinedEnumerable<Table>(Superclass.TableClosureIterator, new SingletonEnumerable<Table>(Table)); }
78+
get { return Superclass.TableClosureIterator.Concat(new[] {Table}); }
7979
}
8080

8181
public override IEnumerable<IKeyValue> KeyClosureIterator
8282
{
83-
get { return new JoinedEnumerable<IKeyValue>(Superclass.KeyClosureIterator, new SingletonEnumerable<IKeyValue>(Key)); }
83+
get { return Superclass.KeyClosureIterator.Concat(new[] {Key}); }
8484
}
8585

8686
/// <summary>
@@ -143,7 +143,7 @@ public override int PropertyClosureSpan
143143

144144
public override IEnumerable<Join> JoinClosureIterator
145145
{
146-
get { return new JoinedEnumerable<Join>(Superclass.JoinClosureIterator, base.JoinClosureIterator); }
146+
get { return Superclass.JoinClosureIterator.Concat(base.JoinClosureIterator); }
147147
}
148148

149149
public override ISet<string> SynchronizedTables

src/NHibernate/NHibernate.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
</PackageReference>
3939
<PackageReference Include="Antlr3.Runtime" Version="[3.5.1, 4.0)" />
4040
<PackageReference Include="Iesi.Collections" Version="[4.0.4, 5.0)" />
41-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta2-18618-05" PrivateAssets="All" />
41+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
4242
<PackageReference Include="Remotion.Linq" Version="[2.2.0, 3.0)" />
4343
<PackageReference Include="Remotion.Linq.EagerFetching" Version="[2.2.0, 3.0)" />
4444
</ItemGroup>

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>

src/NHibernate/Util/JoinedEnumerable.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ private void Dispose(bool isDisposing)
167167
#endregion
168168
}
169169

170+
// Since 5.3
171+
[Obsolete("This class has no more usages and will be removed in a future version")]
170172
public class JoinedEnumerable<T> : IEnumerable<T>
171173
{
172174
private readonly IEnumerable<T>[] enumerables;

src/NHibernate/Util/SingletonEnumerable.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
using System;
12
using System.Collections;
23
using System.Collections.Generic;
34

45
namespace NHibernate.Util
56
{
7+
// Since 5.3
8+
[Obsolete("This class has no more usages and will be removed in a future version")]
69
public sealed class SingletonEnumerable<T> : IEnumerable<T>
710
{
811
private readonly T value;
@@ -78,4 +81,4 @@ object IEnumerator.Current
7881
#endregion
7982
}
8083
}
81-
}
84+
}

0 commit comments

Comments
 (0)