Skip to content

Commit 80af768

Browse files
authored
Replace SafetyEnumerable<T> with OfType<T> where applicable (#2368)
1 parent 14e2d87 commit 80af768

17 files changed

+43
-30
lines changed

src/NHibernate.Test/UtilityTest/SafetyEnumerableFixture.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using NHibernate.Util;
34
using NUnit.Framework;
@@ -7,6 +8,8 @@ namespace NHibernate.Test.UtilityTest
78
/// <summary>
89
/// Test cases for the <see cref="SafetyEnumerable{T}"/> class.
910
/// </summary>
11+
// Since v5.3
12+
[Obsolete("This class has no more usages and will be removed in a future version")]
1013
[TestFixture]
1114
public class SafetyEnumerableFixture
1215
{

src/NHibernate/Async/Engine/Query/HQLQueryPlan.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public async Task<IEnumerable> PerformIterateAsync(QueryParameters queryParamete
128128
public async Task<IEnumerable<T>> PerformIterateAsync<T>(QueryParameters queryParameters, IEventSource session, CancellationToken cancellationToken)
129129
{
130130
cancellationToken.ThrowIfCancellationRequested();
131-
return new SafetyEnumerable<T>(await (PerformIterateAsync(queryParameters, session, cancellationToken)).ConfigureAwait(false));
131+
return (await (PerformIterateAsync(queryParameters, session, cancellationToken)).ConfigureAwait(false)).CastOrDefault<T>();
132132
}
133133

134134
public async Task<int> PerformExecuteUpdateAsync(QueryParameters queryParameters, ISessionImplementor session, CancellationToken cancellationToken)

src/NHibernate/Cfg/XmlHbmBinding/RootClassBinder.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ private void BindNaturalId(HbmNaturalId naturalid, PersistentClass rootClass, ID
9090
property.IsUpdateable = false;
9191
property.IsNaturalIdentifier = true;
9292

93-
uk.AddColumns(property.ColumnIterator.OfType<Column>());
93+
uk.AddColumns(property.ColumnIterator);
9494
});
9595

9696
rootClass.Table.AddUniqueKey(uk);

src/NHibernate/Engine/Query/HQLQueryPlan.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public IEnumerable PerformIterate(QueryParameters queryParameters, IEventSource
176176

177177
public IEnumerable<T> PerformIterate<T>(QueryParameters queryParameters, IEventSource session)
178178
{
179-
return new SafetyEnumerable<T>(PerformIterate(queryParameters, session));
179+
return PerformIterate(queryParameters, session).CastOrDefault<T>();
180180
}
181181

182182
public int PerformExecuteUpdate(QueryParameters queryParameters, ISessionImplementor session)

src/NHibernate/Mapping/Constraint.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,15 @@ public void AddColumns(IEnumerable<Column> columnIterator)
9191
{
9292
foreach (Column col in columnIterator)
9393
{
94-
if (!col.IsFormula)
95-
AddColumn(col);
94+
AddColumn(col);
9695
}
9796
}
9897

98+
public void AddColumns(IEnumerable<ISelectable> columnIterator)
99+
{
100+
AddColumns(columnIterator.OfType<Column>());
101+
}
102+
99103
/// <summary>
100104
/// Gets the number of columns that this Constraint contains.
101105
/// </summary>

src/NHibernate/Mapping/IdentifierCollection.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using NHibernate.Engine;
3-
using NHibernate.Util;
43

54
namespace NHibernate.Mapping
65
{
@@ -40,7 +39,7 @@ public override void CreatePrimaryKey()
4039
if (!IsOneToMany)
4140
{
4241
PrimaryKey pk = new PrimaryKey();
43-
pk.AddColumns(new SafetyEnumerable<Column>(Identifier.ColumnIterator));
42+
pk.AddColumns(Identifier.ColumnIterator);
4443
CollectionTable.PrimaryKey = pk;
4544
}
4645
//else // Create an index on the key columns?

src/NHibernate/Mapping/IndexedCollection.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using NHibernate.Engine;
3-
using NHibernate.Util;
43

54
namespace NHibernate.Mapping
65
{
@@ -40,7 +39,7 @@ public override void CreatePrimaryKey()
4039
if (!IsOneToMany)
4140
{
4241
PrimaryKey pk = new PrimaryKey();
43-
pk.AddColumns(new SafetyEnumerable<Column>(Key.ColumnIterator));
42+
pk.AddColumns(Key.ColumnIterator);
4443

4544
// index should be last column listed
4645
bool isFormula = false;
@@ -52,11 +51,11 @@ public override void CreatePrimaryKey()
5251
if (isFormula)
5352
{
5453
//if it is a formula index, use the element columns in the PK
55-
pk.AddColumns(new SafetyEnumerable<Column>(Element.ColumnIterator));
54+
pk.AddColumns(Element.ColumnIterator);
5655
}
5756
else
5857
{
59-
pk.AddColumns(new SafetyEnumerable<Column>(Index.ColumnIterator));
58+
pk.AddColumns(Index.ColumnIterator);
6059
}
6160

6261
CollectionTable.PrimaryKey = pk;

src/NHibernate/Mapping/Join.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public void CreatePrimaryKey()
100100
pk.Name = PK_ALIAS.ToAliasString(table.Name);
101101
table.PrimaryKey = pk;
102102

103-
pk.AddColumns(Key.ColumnIterator.OfType<Column>());
103+
pk.AddColumns(Key.ColumnIterator);
104104
}
105105

106106
public int PropertySpan

src/NHibernate/Mapping/ManyToOne.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Collections.Generic;
22
using NHibernate.Type;
3-
using NHibernate.Util;
43
using System;
4+
using System.Linq;
55

66
namespace NHibernate.Mapping
77
{
@@ -77,7 +77,7 @@ public void CreatePropertyRefConstraints(IDictionary<string, PersistentClass> pe
7777

7878
if (!HasFormula && !"none".Equals(ForeignKeyName, StringComparison.OrdinalIgnoreCase))
7979
{
80-
IEnumerable<Column> ce = new SafetyEnumerable<Column>(property.ColumnIterator);
80+
IEnumerable<Column> ce = property.ColumnIterator.OfType<Column>();
8181

8282
// NH : Ensure that related columns have same length
8383
ForeignKey.AlignColumns(ConstraintColumns, ce);

src/NHibernate/Mapping/OneToOne.cs

+3-5
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.Type;
45
using NHibernate.Util;
56

@@ -40,10 +41,7 @@ public override void CreateForeignKey()
4041
}
4142

4243
/// <summary></summary>
43-
public override IEnumerable<Column> ConstraintColumns
44-
{
45-
get { return new SafetyEnumerable<Column>(identifier.ColumnIterator); }
46-
}
44+
public override IEnumerable<Column> ConstraintColumns => identifier.ColumnIterator.OfType<Column>();
4745

4846
/// <summary></summary>
4947
public bool IsConstrained
@@ -103,4 +101,4 @@ public override IType Type
103101
}
104102
}
105103
}
106-
}
104+
}

src/NHibernate/Mapping/PersistentClass.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ public virtual void CreatePrimaryKey(Dialect.Dialect dialect)
761761
pk.Name = PKAlias.ToAliasString(table.Name);
762762
table.PrimaryKey = pk;
763763

764-
pk.AddColumns(new SafetyEnumerable<Column>(Key.ColumnIterator));
764+
pk.AddColumns(Key.ColumnIterator);
765765
}
766766

767767
/// <summary>

src/NHibernate/Mapping/SimpleValue.cs

+1-4
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,7 @@ public SimpleValue(Table table)
3737
this.table = table;
3838
}
3939

40-
public virtual IEnumerable<Column> ConstraintColumns
41-
{
42-
get { return new SafetyEnumerable<Column>(columns); }
43-
}
40+
public virtual IEnumerable<Column> ConstraintColumns => columns.OfType<Column>();
4441

4542
public string ForeignKeyName
4643
{

src/NHibernate/Persister/Entity/JoinedSubclassEntityPersister.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,7 @@ public JoinedSubclassEntityPersister(PersistentClass persistentClass, ICacheConc
140140
tables.Add(tabname);
141141

142142
var keyCols = new List<string>(idColumnSpan);
143-
var enumerableKCols = new SafetyEnumerable<Column>(key.ColumnIterator);
144-
foreach (var kcol in enumerableKCols)
143+
foreach (var kcol in key.ColumnIterator.OfType<Column>())
145144
keyCols.Add(kcol.GetQuotedName(factory.Dialect));
146145

147146
keyColumns.Add(keyCols.ToArray());

src/NHibernate/SqlCommand/SqlInsertBuilder.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ public SqlCommandInfo ToSqlCommandInfo()
219219

220220
public SqlType[] GetParametersTypeArray()
221221
{
222-
return new SafetyEnumerable<SqlType>(columns.Values).ToArray();
222+
return columns.Values.OfType<SqlType>().ToArray();
223223
}
224224
}
225225
}

src/NHibernate/SqlCommand/SqlUpdateBuilder.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ public SqlString ToSqlString()
356356
public SqlCommandInfo ToSqlCommandInfo()
357357
{
358358
SqlString text = ToSqlString();
359-
List<SqlType> parameterTypes = new List<SqlType>(new SafetyEnumerable<SqlType>(columns.Values));
359+
360+
var parameterTypes = columns.Values.OfType<SqlType>().ToList();
360361
parameterTypes.AddRange(whereParameterTypes);
361362
return new SqlCommandInfo(text, parameterTypes.ToArray());
362363
}

src/NHibernate/Util/EnumerableExtensions.cs

+10
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,15 @@ internal static IReadOnlyList<T> EmptyIfNull<T>(this IReadOnlyList<T> list)
107107
{
108108
return list ?? Array.Empty<T>();
109109
}
110+
111+
internal static IEnumerable<T> CastOrDefault<T>(this IEnumerable list)
112+
{
113+
foreach (var obj in list)
114+
{
115+
yield return obj == null
116+
? default(T)
117+
: (T) obj;
118+
}
119+
}
110120
}
111121
}

src/NHibernate/Util/SafetyEnumerable.cs

+5-2
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

@@ -7,6 +8,8 @@ namespace NHibernate.Util
78
/// Used to ensure a collection filtering a given IEnumerable by a certain type.
89
/// </summary>
910
/// <typeparam name="T">The type used like filter.</typeparam>
11+
// Since v5.3
12+
[Obsolete("This class has no more usages and will be removed in a future version")]
1013
public class SafetyEnumerable<T> : IEnumerable<T>
1114
{
1215
/*
@@ -25,8 +28,8 @@ public IEnumerator<T> GetEnumerator()
2528
{
2629
if (element == null)
2730
yield return default(T);
28-
else if (element is T)
29-
yield return (T) element;
31+
else if (element is T elem)
32+
yield return elem;
3033
}
3134
}
3235

0 commit comments

Comments
 (0)