diff --git a/src/Immediate.Validations.Shared/ValidationException.cs b/src/Immediate.Validations.Shared/ValidationException.cs index 538a6f2..896bcbf 100644 --- a/src/Immediate.Validations.Shared/ValidationException.cs +++ b/src/Immediate.Validations.Shared/ValidationException.cs @@ -44,6 +44,9 @@ internal ValidationException(string message, IReadOnlyList erro /// public IReadOnlyList Errors { get; } +#pragma warning disable CS8777 // Parameter must have a non-null value when exiting. + // These methods throw on `null`, but indirectly. + /// /// Validates an object and throws a is there are any validation errors. /// @@ -56,7 +59,7 @@ internal ValidationException(string message, IReadOnlyList erro /// /// Thrown if there are any errors. /// - public static void ThrowIfInvalid(T obj) + public static void ThrowIfInvalid([System.Diagnostics.CodeAnalysis.NotNull] T? obj) where T : IValidationTarget { ThrowIfInvalid(T.Validate(obj)); @@ -77,7 +80,7 @@ public static void ThrowIfInvalid(T obj) /// /// Thrown if there are any errors. /// - public static void ThrowIfInvalid(T obj, string message) + public static void ThrowIfInvalid([System.Diagnostics.CodeAnalysis.NotNull] T? obj, string message) where T : IValidationTarget { ThrowIfInvalid(T.Validate(obj), message); @@ -98,7 +101,7 @@ public static void ThrowIfInvalid(T obj, string message) /// /// Thrown if there are any errors. /// - public static void ThrowIfInvalid(T obj, Func messageFunc) + public static void ThrowIfInvalid([System.Diagnostics.CodeAnalysis.NotNull] T? obj, Func messageFunc) where T : IValidationTarget { ArgumentNullException.ThrowIfNull(messageFunc); @@ -108,6 +111,8 @@ public static void ThrowIfInvalid(T obj, Func messageFunc) ThrowValidationException(errors.Errors, messageFunc(obj)); } +#pragma warning restore CS8777 // Parameter must have a non-null value when exiting. + /// /// Throws a if there are any errors. /// @@ -143,9 +148,11 @@ public static void ThrowIfInvalid(ValidationResult errors, string message) ThrowValidationException(errors.Errors, message); } + [DoesNotReturn] private static void ThrowValidationException(IReadOnlyList errors) => throw new ValidationException(errors); + [DoesNotReturn] private static void ThrowValidationException(IReadOnlyList errors, string message) => throw new ValidationException(message, errors); }