diff --git a/src/NHibernate.Test/UtilityTest/JoinedEnumerableGenericFixture.cs b/src/NHibernate.Test/UtilityTest/JoinedEnumerableGenericFixture.cs index d3acabd74c7..58dde26a1c2 100644 --- a/src/NHibernate.Test/UtilityTest/JoinedEnumerableGenericFixture.cs +++ b/src/NHibernate.Test/UtilityTest/JoinedEnumerableGenericFixture.cs @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; using NHibernate.Util; @@ -6,6 +7,8 @@ namespace NHibernate.Test.UtilityTest { // This test is the same of JoinedEnumerableFixture but for generic version. + // Since 5.3 + [Obsolete] [TestFixture] public class JoinedEnumerableGenericFixture { diff --git a/src/NHibernate.Test/UtilityTest/SingletonEnumerableFixture.cs b/src/NHibernate.Test/UtilityTest/SingletonEnumerableFixture.cs index 4312bceca0f..9051edab9ec 100644 --- a/src/NHibernate.Test/UtilityTest/SingletonEnumerableFixture.cs +++ b/src/NHibernate.Test/UtilityTest/SingletonEnumerableFixture.cs @@ -1,9 +1,12 @@ +using System; using System.Collections; using NHibernate.Util; using NUnit.Framework; namespace NHibernate.Test.UtilityTest { + // Since 5.3 + [Obsolete] [TestFixture] public class SingletonEnumerableFixture { @@ -46,4 +49,4 @@ public void ShouldWorkAsEnumerator() Assert.That(i, Is.EqualTo(1)); } } -} \ No newline at end of file +} diff --git a/src/NHibernate/Mapping/Component.cs b/src/NHibernate/Mapping/Component.cs index 9febe1a6845..c9f1409cf6f 100644 --- a/src/NHibernate/Mapping/Component.cs +++ b/src/NHibernate/Mapping/Component.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using NHibernate.Tuple.Component; using NHibernate.Type; using NHibernate.Util; @@ -72,12 +73,7 @@ public override IEnumerable ColumnIterator { get { - List> iters = new List>(); - foreach (Property property in PropertyIterator) - { - iters.Add(property.ColumnIterator); - } - return new JoinedEnumerable(iters); + return PropertyIterator.SelectMany(x => x.ColumnIterator); } } diff --git a/src/NHibernate/Mapping/DenormalizedTable.cs b/src/NHibernate/Mapping/DenormalizedTable.cs index bfb814e2858..4852025ddc3 100644 --- a/src/NHibernate/Mapping/DenormalizedTable.cs +++ b/src/NHibernate/Mapping/DenormalizedTable.cs @@ -18,7 +18,7 @@ public DenormalizedTable(Table includedTable) public override IEnumerable ColumnIterator { - get { return new JoinedEnumerable(includedTable.ColumnIterator, base.ColumnIterator); } + get { return includedTable.ColumnIterator.Concat(base.ColumnIterator); } } public override IEnumerable UniqueKeyIterator @@ -39,7 +39,6 @@ public override IEnumerable IndexIterator { get { - List indexes = new List(); IEnumerable includedIdxs = includedTable.IndexIterator; foreach (Index parentIndex in includedIdxs) { @@ -55,9 +54,13 @@ public override IEnumerable IndexIterator index.IsInherited = true; index.Table = this; index.AddColumns(parentIndex.ColumnIterator); - indexes.Add(index); + yield return index; + } + + foreach (var index in base.IndexIterator) + { + yield return index; } - return new JoinedEnumerable(indexes, base.IndexIterator); } } diff --git a/src/NHibernate/Mapping/PersistentClass.cs b/src/NHibernate/Mapping/PersistentClass.cs index 3b23cb5e6dc..542212df025 100644 --- a/src/NHibernate/Mapping/PersistentClass.cs +++ b/src/NHibernate/Mapping/PersistentClass.cs @@ -215,13 +215,7 @@ public virtual IEnumerable SubclassIterator { get { - IEnumerable[] iters = new IEnumerable[subclasses.Count + 1]; - int i = 0; - foreach (Subclass subclass in subclasses) - iters[i++] = subclass.SubclassIterator; - - iters[i] = subclasses; - return new JoinedEnumerable(iters); + return subclasses.SelectMany(s => s.SubclassIterator).Concat(subclasses); } } @@ -229,12 +223,7 @@ public virtual IEnumerable SubclassClosureIterator { get { - List> iters = new List>(); - iters.Add(new SingletonEnumerable(this)); - foreach (Subclass clazz in SubclassIterator) - iters.Add(clazz.SubclassClosureIterator); - - return new JoinedEnumerable(iters); + return new[] {this}.Concat(SubclassIterator.SelectMany(x => x.SubclassClosureIterator)); } } @@ -322,19 +311,15 @@ public virtual IEnumerable SubclassPropertyClosureIterator { get { - List> iters = new List>(); - iters.Add(PropertyClosureIterator); - iters.Add(subclassProperties); - foreach (Join join in subclassJoins) - iters.Add(join.PropertyIterator); - - return new JoinedEnumerable(iters); + return PropertyClosureIterator + .Concat(subclassProperties) + .Concat(subclassJoins.SelectMany(x => x.PropertyIterator)); } } public virtual IEnumerable SubclassJoinClosureIterator { - get { return new JoinedEnumerable(JoinClosureIterator, subclassJoins); } + get { return JoinClosureIterator.Concat(subclassJoins); } } /// @@ -345,7 +330,7 @@ public virtual IEnumerable SubclassJoinClosureIterator /// It adds the TableClosureIterator and the subclassTables into the IEnumerable. public virtual IEnumerable SubclassTableClosureIterator { - get { return new JoinedEnumerable
(TableClosureIterator, subclassTables); } + get { return TableClosureIterator.Concat(subclassTables); } } public bool IsLazy @@ -455,12 +440,7 @@ public virtual IEnumerable PropertyIterator { get { - List> iterators = new List>(); - iterators.Add(properties); - foreach (Join join in joins) - iterators.Add(join.PropertyIterator); - - return new JoinedEnumerable(iterators); + return properties.Concat(joins.SelectMany(x => x.PropertyIterator)); } } diff --git a/src/NHibernate/Mapping/RootClass.cs b/src/NHibernate/Mapping/RootClass.cs index f35c00d913e..56e6dd4d9c3 100644 --- a/src/NHibernate/Mapping/RootClass.cs +++ b/src/NHibernate/Mapping/RootClass.cs @@ -89,12 +89,12 @@ public override IEnumerable PropertyClosureIterator /// public override IEnumerable
TableClosureIterator { - get { return new SingletonEnumerable
(Table); } + get { return new[] {Table}; } } public override IEnumerable KeyClosureIterator { - get { return new SingletonEnumerable(Key); } + get { return new[] {Key}; } } /// diff --git a/src/NHibernate/Mapping/SingleTableSubclass.cs b/src/NHibernate/Mapping/SingleTableSubclass.cs index 618be14daca..5f0d8368120 100644 --- a/src/NHibernate/Mapping/SingleTableSubclass.cs +++ b/src/NHibernate/Mapping/SingleTableSubclass.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using NHibernate.Util; namespace NHibernate.Mapping @@ -12,7 +13,7 @@ public SingleTableSubclass(PersistentClass superclass) protected internal override IEnumerable NonDuplicatedPropertyIterator { - get { return new JoinedEnumerable(Superclass.UnjoinedPropertyIterator, UnjoinedPropertyIterator); } + get { return Superclass.UnjoinedPropertyIterator.Concat(UnjoinedPropertyIterator); } } protected internal override IEnumerable DiscriminatorColumnIterator @@ -39,4 +40,4 @@ public override void Validate(Engine.IMapping mapping) base.Validate(mapping); } } -} \ No newline at end of file +} diff --git a/src/NHibernate/Mapping/Subclass.cs b/src/NHibernate/Mapping/Subclass.cs index 1ca0f915208..90129783f49 100644 --- a/src/NHibernate/Mapping/Subclass.cs +++ b/src/NHibernate/Mapping/Subclass.cs @@ -58,7 +58,7 @@ public override bool IsInherited /// public override IEnumerable PropertyClosureIterator { - get { return new JoinedEnumerable(Superclass.PropertyClosureIterator, PropertyIterator); } + get { return Superclass.PropertyClosureIterator.Concat(PropertyIterator); } } /// @@ -75,12 +75,12 @@ public override IEnumerable PropertyClosureIterator /// public override IEnumerable
TableClosureIterator { - get { return new JoinedEnumerable
(Superclass.TableClosureIterator, new SingletonEnumerable
(Table)); } + get { return Superclass.TableClosureIterator.Concat(new[] {Table}); } } public override IEnumerable KeyClosureIterator { - get { return new JoinedEnumerable(Superclass.KeyClosureIterator, new SingletonEnumerable(Key)); } + get { return Superclass.KeyClosureIterator.Concat(new[] {Key}); } } /// @@ -143,7 +143,7 @@ public override int PropertyClosureSpan public override IEnumerable JoinClosureIterator { - get { return new JoinedEnumerable(Superclass.JoinClosureIterator, base.JoinClosureIterator); } + get { return Superclass.JoinClosureIterator.Concat(base.JoinClosureIterator); } } public override ISet SynchronizedTables diff --git a/src/NHibernate/Util/JoinedEnumerable.cs b/src/NHibernate/Util/JoinedEnumerable.cs index df7c268efed..2e9d3ab6b50 100644 --- a/src/NHibernate/Util/JoinedEnumerable.cs +++ b/src/NHibernate/Util/JoinedEnumerable.cs @@ -167,6 +167,8 @@ private void Dispose(bool isDisposing) #endregion } + // Since 5.3 + [Obsolete("This class has no more usages and will be removed in a future version")] public class JoinedEnumerable : IEnumerable { private readonly IEnumerable[] enumerables; diff --git a/src/NHibernate/Util/SingletonEnumerable.cs b/src/NHibernate/Util/SingletonEnumerable.cs index 155aff136e4..73feb1a074a 100644 --- a/src/NHibernate/Util/SingletonEnumerable.cs +++ b/src/NHibernate/Util/SingletonEnumerable.cs @@ -1,8 +1,11 @@ +using System; using System.Collections; using System.Collections.Generic; namespace NHibernate.Util { + // Since 5.3 + [Obsolete("This class has no more usages and will be removed in a future version")] public sealed class SingletonEnumerable : IEnumerable { private readonly T value; @@ -78,4 +81,4 @@ object IEnumerator.Current #endregion } } -} \ No newline at end of file +}