Skip to content

Commit 4a148b7

Browse files
Fix nullability warnings
1 parent a711054 commit 4a148b7

File tree

7 files changed

+42
-17
lines changed

7 files changed

+42
-17
lines changed

src/Linq.Extras/Flatten.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ private static IEnumerable<TResult> DepthFirstFlattenIterator<TNode, TResult>(th
102102
var list = source.Select(n => new NodeWithLevel<TNode>(n, 0)).ToLinkedList();
103103
while (list.Count > 0)
104104
{
105-
var current = list.First.Value;
105+
var current = list.First!.Value;
106106
list.RemoveFirst();
107107
yield return resultSelector(current.Node, current.Level);
108108
var llNode = list.First;

src/Linq.Extras/Linq.Extras.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<AssemblyOriginatorKeyFile>..\..\Linq.Extras.snk</AssemblyOriginatorKeyFile>
1616
<SignAssembly>true</SignAssembly>
1717
<MinVerVerbosity>quiet</MinVerVerbosity>
18-
<LangVersion>8.0</LangVersion>
18+
<LangVersion>latest</LangVersion>
1919
<Nullable>enable</Nullable>
2020
</PropertyGroup>
2121

@@ -29,11 +29,11 @@
2929
</PropertyGroup>
3030

3131
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
32-
<DefineConstants>$(DefineConstants);FEATURE_NULLABILITY_ATTRIBUTES</DefineConstants>
32+
<DefineConstants>$(DefineConstants);FEATURE_NULLABILITY_ATTRIBUTES;FEATURE_COMPARER_NULLABILITY</DefineConstants>
3333
</PropertyGroup>
3434

3535
<PropertyGroup Condition="'$(TargetFramework)' == 'net5.0'">
36-
<DefineConstants>$(DefineConstants);FEATURE_NULLABILITY_ATTRIBUTES</DefineConstants>
36+
<DefineConstants>$(DefineConstants);FEATURE_NULLABILITY_ATTRIBUTES;FEATURE_COMPARER_NULLABILITY</DefineConstants>
3737
</PropertyGroup>
3838

3939
</Project>

src/Linq.Extras/OuterJoin.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static IEnumerable<TResult> LeftOuterJoin<TLeft, TRight, TKey, TResult>(
3232
[NotNull] Func<TLeft, TKey> leftKeySelector,
3333
[NotNull] Func<TRight, TKey> rightKeySelector,
3434
[NotNull] Func<TLeft, TRight, TResult> resultSelector,
35-
TRight defaultRight = default,
35+
TRight defaultRight = default!,
3636
IEqualityComparer<TKey>? keyComparer = null)
3737
{
3838
left.CheckArgumentNull(nameof(left));
@@ -72,7 +72,7 @@ public static IEnumerable<TResult> RightOuterJoin<TLeft, TRight, TKey, TResult>(
7272
[NotNull] Func<TLeft, TKey> leftKeySelector,
7373
[NotNull] Func<TRight, TKey> rightKeySelector,
7474
[NotNull] Func<TLeft, TRight, TResult> resultSelector,
75-
TLeft defaultLeft = default,
75+
TLeft defaultLeft = default!,
7676
IEqualityComparer<TKey>? keyComparer = null)
7777
{
7878
left.CheckArgumentNull(nameof(left));
@@ -112,8 +112,8 @@ public static IEnumerable<TResult> FullOuterJoin<TLeft, TRight, TKey, TResult>(
112112
[NotNull] Func<TLeft, TKey> leftKeySelector,
113113
[NotNull] Func<TRight, TKey> rightKeySelector,
114114
[NotNull] Func<TKey, TLeft, TRight, TResult> resultSelector,
115-
TLeft defaultLeft = default,
116-
TRight defaultRight = default,
115+
TLeft defaultLeft = default!,
116+
TRight defaultRight = default!,
117117
IEqualityComparer<TKey>? keyComparer = null)
118118
{
119119
left.CheckArgumentNull(nameof(left));

src/Linq.Extras/ToHierarchy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static IEnumerable<INode<TSource>> ToHierarchy<TSource, TId>(
2323
[NotNull] this IEnumerable<TSource> source,
2424
[NotNull] Func<TSource, TId> idSelector,
2525
[NotNull] Func<TSource, TId> parentIdSelector,
26-
TId rootParentId = default)
26+
TId rootParentId = default!)
2727
{
2828
source.CheckArgumentNull(nameof(source));
2929
idSelector.CheckArgumentNull(nameof(idSelector));

src/Linq.Extras/XComparer.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,15 @@ public ByKeyComparer(Func<T, TKey> keySelector, IComparer<TKey>? keyComparer)
182182
_keyComparer = keyComparer ?? Comparer<TKey>.Default;
183183
}
184184

185+
#if FEATURE_COMPARER_NULLABILITY
186+
public int Compare(T? x, T? y)
187+
#else
185188
public int Compare(T x, T y)
189+
#endif
186190
{
187-
return _keyComparer.Compare(_keySelector(x), _keySelector(y));
191+
return _keyComparer.Compare(
192+
x is null ? default! : _keySelector(x),
193+
y is null ? default! : _keySelector(y));
188194
}
189195
}
190196

@@ -197,7 +203,11 @@ public ReverseComparer(IComparer<T> baseComparer)
197203
_baseComparer = baseComparer;
198204
}
199205

206+
#if FEATURE_COMPARER_NULLABILITY
207+
public int Compare(T? x, T? y)
208+
#else
200209
public int Compare(T x, T y)
210+
#endif
201211
{
202212
return _baseComparer.Compare(y, x);
203213
}
@@ -217,7 +227,11 @@ public ChainedComparer(IEnumerable<IComparer<T>> comparers)
217227
Comparers = comparers.ToArray();
218228
}
219229

230+
#if FEATURE_COMPARER_NULLABILITY
231+
public int Compare(T? x, T? y)
232+
#else
220233
public int Compare(T x, T y)
234+
#endif
221235
{
222236
return Comparers.Select(comparer => comparer.Compare(x, y)).FirstOrDefault(cmp => cmp != 0);
223237
}
@@ -232,10 +246,14 @@ public DelegateComparer(Comparison<T> comparison)
232246
_comparison = comparison;
233247
}
234248

249+
#if FEATURE_COMPARER_NULLABILITY
250+
public int Compare(T? x, T? y) => _comparison(x!, y!);
251+
#else
235252
public int Compare(T x, T y) => _comparison(x, y);
253+
#endif
236254
}
237255

238-
#endregion
256+
#endregion
239257

240258
}
241259

src/Linq.Extras/XEqualityComparer.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,25 @@ public ByKeyEqualityComparer(Func<TSource, TKey> keySelector, IEqualityComparer<
4343
_keyComparer = keyComparer ?? EqualityComparer<TKey>.Default;
4444
}
4545

46+
#if FEATURE_COMPARER_NULLABILITY
47+
public bool Equals(TSource? x, TSource? y)
48+
#else
4649
public bool Equals(TSource x, TSource y)
50+
#endif
4751
{
48-
return _keyComparer.Equals(_keySelector(x), _keySelector(y));
52+
return _keyComparer.Equals(
53+
x is null ? default! : _keySelector(x),
54+
y is null ? default! : _keySelector(y));
4955
}
5056

5157
public int GetHashCode(TSource obj)
5258
{
53-
return _keyComparer.GetHashCode(_keySelector(obj));
59+
var key = _keySelector(obj);
60+
return key is null ? 0 : _keyComparer.GetHashCode(key);
5461
}
5562
}
5663

57-
#endregion
64+
#endregion
5865
}
5966

6067
/// <summary>

tests/Linq.Extras.Tests/TestHelper.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ public static void AssertThrowsWhenArgumentNull(Expression<Action> expr)
3232
var parameters = method.GetParameters();
3333
var paramIndexes = parameters
3434
.Select((p, i) => new { p, i })
35-
.ToDictionary(x => x.p.Name, x => x.i);
35+
.ToDictionary(x => x.p.Name!, x => x.i);
3636
var paramTypes = parameters
37-
.ToDictionary(p => p.Name, p => p.ParameterType);
37+
.ToDictionary(p => p.Name!, p => p.ParameterType);
3838

3939
var nonNullableRefParams = parameters
4040
.Where(p => !p.ParameterType.GetTypeInfo().IsValueType && GetNullability(p, defaultNullability) == Nullability.NotNull);
4141

4242
foreach (var param in nonNullableRefParams)
4343
{
44-
var paramName = param.Name;
44+
var paramName = param.Name!;
4545
var args = realArgs.ToArray();
4646
args[paramIndexes[paramName]] = Expression.Constant(null, paramTypes[paramName]);
4747
var call = Expression.Call(realCall.Object, method, args);

0 commit comments

Comments
 (0)