// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Runtime.InteropServices; using System.Threading; namespace FisheryLib.Utility.Diagnostics; /// public static partial class ThrowHelper { /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArrayTypeMismatchException() => throw new ArrayTypeMismatchException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArrayTypeMismatchException(string? message) => throw new ArrayTypeMismatchException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArrayTypeMismatchException(string? message, Exception? innerException) => throw new ArrayTypeMismatchException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentException() => throw new ArgumentException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentException(string? message) => throw new ArgumentException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentException(string? message, Exception? innerException) => throw new ArgumentException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The message to include in the exception. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentException(string? name, string? message) => throw new ArgumentException(message, name); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentException(string? name, string? message, Exception? innerException) => throw new ArgumentException(message, name, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentNullException() => throw new ArgumentNullException(); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentNullException(string? name) => throw new ArgumentNullException(name); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The inner to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentNullException(string? name, Exception? innerException) => throw new ArgumentNullException(name, innerException); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The message to include in the exception. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentNullException(string? name, string? message) => throw new ArgumentNullException(name, message); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentOutOfRangeException() => throw new ArgumentOutOfRangeException(); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentOutOfRangeException(string? name) => throw new ArgumentOutOfRangeException(name); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentOutOfRangeException(string? name, Exception? innerException) => throw new ArgumentOutOfRangeException(name, innerException); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The message to include in the exception. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentOutOfRangeException(string? name, string? message) => throw new ArgumentOutOfRangeException(name, message); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The current argument value. /// The message to include in the exception. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowArgumentOutOfRangeException(string? name, object? value, string? message) => throw new ArgumentOutOfRangeException(name, value, message); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowCOMException() => throw new COMException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowCOMException(string? message) => throw new COMException(message); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The inner to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowCOMException(string? message, Exception? innerException) => throw new COMException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The HRESULT of the error to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowCOMException(string? message, int error) => throw new COMException(message, error); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowExternalException() => throw new ExternalException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowExternalException(string? message) => throw new ExternalException(message); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The inner to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowExternalException(string? message, Exception? innerException) => throw new ExternalException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The argument name. /// The HRESULT of the error to include. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowExternalException(string? message, int error) => throw new ExternalException(message, error); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowFormatException() => throw new FormatException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowFormatException(string? message) => throw new FormatException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowFormatException(string? message, Exception? innerException) => throw new FormatException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInsufficientMemoryException() => throw new InsufficientMemoryException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInsufficientMemoryException(string? message) => throw new InsufficientMemoryException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInsufficientMemoryException(string? message, Exception? innerException) => throw new InsufficientMemoryException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInvalidDataException() => throw new InvalidDataException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInvalidDataException(string? message) => throw new InvalidDataException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInvalidDataException(string? message, Exception? innerException) => throw new InvalidDataException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInvalidOperationException() => throw new InvalidOperationException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInvalidOperationException(string? message) => throw new InvalidOperationException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowInvalidOperationException(string? message, Exception? innerException) => throw new InvalidOperationException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowLockRecursionException() => throw new LockRecursionException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowLockRecursionException(string? message) => throw new LockRecursionException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowLockRecursionException(string? message, Exception? innerException) => throw new LockRecursionException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingFieldException() => throw new MissingFieldException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingFieldException(string? message) => throw new MissingFieldException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingFieldException(string? message, Exception? innerException) => throw new MissingFieldException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The target class being inspected. /// The target field being retrieved. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingFieldException(string? className, string? fieldName) => throw new MissingFieldException(className, fieldName); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMemberException() => throw new MissingMemberException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMemberException(string? message) => throw new MissingMemberException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMemberException(string? message, Exception? innerException) => throw new MissingMemberException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The target class being inspected. /// The target member being retrieved. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMemberException(string? className, string? memberName) => throw new MissingMemberException(className, memberName); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMethodException() => throw new MissingMethodException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMethodException(string? message) => throw new MissingMethodException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMethodException(string? message, Exception? innerException) => throw new MissingMethodException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The target class being inspected. /// The target method being retrieved. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowMissingMethodException(string? className, string? methodName) => throw new MissingMethodException(className, methodName); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowNotSupportedException() => throw new NotSupportedException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowNotSupportedException(string? message) => throw new NotSupportedException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowNotSupportedException(string? message, Exception? innerException) => throw new NotSupportedException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The name of the disposed object. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowObjectDisposedException(string? objectName) => throw new ObjectDisposedException(objectName); /// /// Throws a new . /// /// The type of expected result. /// The name of the disposed object. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowObjectDisposedException(string? objectName, Exception? innerException) => throw new ObjectDisposedException(objectName, innerException); /// /// Throws a new . /// /// The type of expected result. /// The name of the disposed object. /// The message to include in the exception. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowObjectDisposedException(string? objectName, string? message) => throw new ObjectDisposedException(objectName, message); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowOperationCanceledException() => throw new OperationCanceledException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowOperationCanceledException(string? message) => throw new OperationCanceledException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowOperationCanceledException(string? message, Exception? innerException) => throw new OperationCanceledException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// The in use. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowOperationCanceledException(CancellationToken token) => throw new OperationCanceledException(token); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The in use. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowOperationCanceledException(string? message, CancellationToken token) => throw new OperationCanceledException(message, token); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// The in use. /// Thrown with the specified parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowOperationCanceledException(string? message, Exception? innerException, CancellationToken token) => throw new OperationCanceledException(message, innerException, token); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowPlatformNotSupportedException() => throw new PlatformNotSupportedException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowPlatformNotSupportedException(string? message) => throw new PlatformNotSupportedException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowPlatformNotSupportedException(string? message, Exception? innerException) => throw new PlatformNotSupportedException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowSynchronizationLockException() => throw new SynchronizationLockException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowSynchronizationLockException(string? message) => throw new SynchronizationLockException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowSynchronizationLockException(string? message, Exception? innerException) => throw new SynchronizationLockException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowTimeoutException() => throw new TimeoutException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowTimeoutException(string? message) => throw new TimeoutException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowTimeoutException(string? message, Exception? innerException) => throw new TimeoutException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowUnauthorizedAccessException() => throw new UnauthorizedAccessException(); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowUnauthorizedAccessException(string? message) => throw new UnauthorizedAccessException(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowUnauthorizedAccessException(string? message, Exception? innerException) => throw new UnauthorizedAccessException(message, innerException); /// /// Throws a new . /// /// The type of expected result. /// Thrown with no parameters. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowWin32Exception() => throw new Win32Exception(); /// /// Throws a new . /// /// The type of expected result. /// The Win32 error code associated with this exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowWin32Exception(int error) => throw new Win32Exception(error); /// /// Throws a new . /// /// The type of expected result. /// The Win32 error code associated with this exception. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowWin32Exception(int error, string? message) => throw new Win32Exception(error, message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowWin32Exception(string? message) => throw new Win32Exception(message); /// /// Throws a new . /// /// The type of expected result. /// The message to include in the exception. /// The inner to include. /// Thrown with the specified parameter. /// This method always throws, so it actually never returns a value. [DoesNotReturn] public static T ThrowWin32Exception(string? message, Exception? innerException) => throw new Win32Exception(message, innerException); }