Skip to content

Commit d7ebe52

Browse files
committed
chore: add additional nullable annotations
1 parent 74e204d commit d7ebe52

File tree

6 files changed

+33
-25
lines changed

6 files changed

+33
-25
lines changed

src/BenchmarkDotNet/Characteristics/CharacteristicObject.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
using System.Reflection;
66
using JetBrains.Annotations;
77

8+
#nullable enable
9+
810
namespace BenchmarkDotNet.Characteristics
911
{
1012
// TODO: better naming.
@@ -17,10 +19,10 @@ public abstract class CharacteristicObject
1719
DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties
1820
| DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields;
1921

20-
protected static string ResolveId(CharacteristicObject obj, string actual)
22+
protected static string ResolveId(CharacteristicObject obj, string? actual)
2123
{
2224
if (!string.IsNullOrEmpty(actual) && actual != IdCharacteristic.FallbackValue)
23-
return actual;
25+
return actual!;
2426

2527
string result = CharacteristicSetPresenter.Display.ToPresentation(obj);
2628

@@ -160,22 +162,22 @@ public bool HasValue(Characteristic characteristic)
160162
#endregion
161163

162164
#region Resolve
163-
public T ResolveValue<[DynamicallyAccessedMembers(CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, IResolver resolver)
165+
public T? ResolveValue<[DynamicallyAccessedMembers(CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, IResolver resolver)
164166
{
165167
return resolver.Resolve(this, characteristic);
166168
}
167169

168-
public T ResolveValue<[DynamicallyAccessedMembers(CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, IResolver resolver, T defaultValue)
170+
public T? ResolveValue<[DynamicallyAccessedMembers(CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, IResolver resolver, T defaultValue)
169171
{
170172
return resolver.Resolve(this, characteristic, defaultValue);
171173
}
172174

173-
public object ResolveValue(Characteristic characteristic, IResolver resolver)
175+
public object? ResolveValue(Characteristic characteristic, IResolver resolver)
174176
{
175177
return resolver.Resolve(this, characteristic);
176178
}
177179

178-
public object ResolveValue(Characteristic characteristic, IResolver resolver, object defaultValue)
180+
public object? ResolveValue(Characteristic characteristic, IResolver resolver, object defaultValue)
179181
{
180182
return resolver.Resolve(this, characteristic, defaultValue);
181183
}

src/BenchmarkDotNet/Characteristics/CompositeResolver.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using System.Diagnostics.CodeAnalysis;
33
using System.Linq;
44

5+
#nullable enable
6+
57
namespace BenchmarkDotNet.Characteristics
68
{
79
public class CompositeResolver : IResolver
@@ -15,7 +17,7 @@ public CompositeResolver(params IResolver[] resolvers)
1517

1618
public bool CanResolve(Characteristic characteristic) => resolvers.Any(r => r.CanResolve(characteristic));
1719

18-
public object Resolve(CharacteristicObject obj, Characteristic characteristic)
20+
public object? Resolve(CharacteristicObject obj, Characteristic characteristic)
1921
{
2022
if (obj.HasValue(characteristic))
2123
return characteristic[obj];
@@ -26,7 +28,7 @@ public object Resolve(CharacteristicObject obj, Characteristic characteristic)
2628
throw new InvalidOperationException($"There is no default resolver for {characteristic.FullId}");
2729
}
2830

29-
public T Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic)
31+
public T? Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic)
3032
{
3133
if (obj.HasValue(characteristic))
3234
return characteristic[obj];
@@ -37,7 +39,7 @@ public object Resolve(CharacteristicObject obj, Characteristic characteristic)
3739
throw new InvalidOperationException($"There is no default resolver for {characteristic.FullId}");
3840
}
3941

40-
public object Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue)
42+
public object? Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue)
4143
{
4244
if (obj.HasValue(characteristic))
4345
return characteristic[obj];
@@ -48,7 +50,7 @@ public object Resolve(CharacteristicObject obj, Characteristic characteristic, o
4850
return defaultValue;
4951
}
5052

51-
public T Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue)
53+
public T? Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue)
5254
{
5355
if (obj.HasValue(characteristic))
5456
return characteristic[obj];
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System.Diagnostics.CodeAnalysis;
22

3+
#nullable enable
4+
35
namespace BenchmarkDotNet.Characteristics
46
{
57
/// <summary>
@@ -9,12 +11,12 @@ public interface IResolver
911
{
1012
bool CanResolve(Characteristic characteristic);
1113

12-
object Resolve(CharacteristicObject obj, Characteristic characteristic);
14+
object? Resolve(CharacteristicObject obj, Characteristic characteristic);
1315

14-
T Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic);
16+
T? Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic);
1517

16-
object Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue);
18+
object? Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue);
1719

18-
T Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue);
20+
T? Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue);
1921
}
2022
}

src/BenchmarkDotNet/Characteristics/Resolver.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,23 @@
22
using System.Collections.Generic;
33
using System.Diagnostics.CodeAnalysis;
44

5+
#nullable enable
6+
57
namespace BenchmarkDotNet.Characteristics
68
{
79
public class Resolver : IResolver
810
{
9-
private readonly Dictionary<Characteristic, Func<CharacteristicObject, object>> resolvers = new Dictionary<Characteristic, Func<CharacteristicObject, object>>();
11+
private readonly Dictionary<Characteristic, Func<CharacteristicObject, object?>> resolvers = new Dictionary<Characteristic, Func<CharacteristicObject, object?>>();
1012

11-
protected void Register<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, Func<T> resolver) =>
13+
protected void Register<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, Func<T?> resolver) =>
1214
resolvers[characteristic] = obj => resolver();
1315

14-
protected void Register<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, Func<CharacteristicObject, T> resolver) =>
16+
protected void Register<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(Characteristic<T> characteristic, Func<CharacteristicObject, T?> resolver) =>
1517
resolvers[characteristic] = obj => resolver(obj);
1618

1719
public bool CanResolve(Characteristic characteristic) => resolvers.ContainsKey(characteristic);
1820

19-
public object Resolve(CharacteristicObject obj, Characteristic characteristic)
21+
public object? Resolve(CharacteristicObject obj, Characteristic characteristic)
2022
{
2123
if (obj.HasValue(characteristic))
2224
return characteristic[obj];
@@ -26,17 +28,17 @@ public object Resolve(CharacteristicObject obj, Characteristic characteristic)
2628
throw new InvalidOperationException($"There is no default resolver for {characteristic.FullId}");
2729
}
2830

29-
public T Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic)
31+
public T? Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic)
3032
{
3133
if (obj.HasValue(characteristic))
3234
return characteristic[obj];
3335

3436
if (resolvers.TryGetValue(characteristic, out var resolver))
35-
return (T)resolver(obj);
37+
return (T?)resolver(obj);
3638
throw new InvalidOperationException($"There is no default resolver for {characteristic.FullId}");
3739
}
3840

39-
public object Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue)
41+
public object? Resolve(CharacteristicObject obj, Characteristic characteristic, object defaultValue)
4042
{
4143
if (obj.HasValue(characteristic))
4244
return characteristic[obj];
@@ -47,13 +49,13 @@ public object Resolve(CharacteristicObject obj, Characteristic characteristic, o
4749
return defaultValue;
4850
}
4951

50-
public T Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue)
52+
public T? Resolve<[DynamicallyAccessedMembers(CharacteristicObject.CharacteristicMemberTypes)] T>(CharacteristicObject obj, Characteristic<T> characteristic, T defaultValue)
5153
{
5254
if (obj.HasValue(characteristic))
5355
return characteristic[obj];
5456

5557
if (resolvers.TryGetValue(characteristic, out var resolver))
56-
return (T)resolver(obj);
58+
return (T?)resolver(obj);
5759

5860
return defaultValue;
5961
}

src/BenchmarkDotNet/Diagnosers/ThreadingDiagnoser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public IEnumerable<ValidationError> Validate(ValidationParameters validationPara
4747
{
4848
var runtime = benchmark.Job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance);
4949

50-
if (runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp30)
50+
if (runtime != null && runtime.RuntimeMoniker < RuntimeMoniker.NetCoreApp30)
5151
{
5252
yield return new ValidationError(true, $"{nameof(ThreadingDiagnoser)} supports only .NET Core 3.0+", benchmark);
5353
}

src/BenchmarkDotNet/Toolchains/ToolchainExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal static IToolchain GetToolchain(this Job job)
3434
=> job.Infrastructure.TryGetToolchain(out var toolchain)
3535
? toolchain
3636
: GetToolchain(
37-
job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance),
37+
job.ResolveValue(EnvironmentMode.RuntimeCharacteristic, EnvironmentResolver.Instance)!,
3838
null,
3939
job.HasDynamicBuildCharacteristic(),
4040
job.Environment.HasValue(EnvironmentMode.RuntimeCharacteristic)

0 commit comments

Comments
 (0)