Skip to content

Commit 129e4c1

Browse files
authored
Get rid of JoinedEnumerable<T> and SingletonEnumerable<T> (#2351)
1 parent aadc6ce commit 129e4c1

File tree

10 files changed

+39
-48
lines changed

10 files changed

+39
-48
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/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/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)