diff --git a/VpSharp.Commands/Attributes/AliasesAttribute.cs b/VpSharp.Commands/Attributes/AliasesAttribute.cs index dfbd700..76bfd0f 100644 --- a/VpSharp.Commands/Attributes/AliasesAttribute.cs +++ b/VpSharp.Commands/Attributes/AliasesAttribute.cs @@ -28,8 +28,15 @@ public sealed class AliasesAttribute : Attribute public AliasesAttribute(string alias, params string[] aliases) #pragma warning restore CA1019 { - ArgumentNullException.ThrowIfNull(alias); - ArgumentNullException.ThrowIfNull(aliases); + if (alias is null) + { + throw new ArgumentNullException(nameof(alias)); + } + + if (aliases is null) + { + throw new ArgumentNullException(nameof(aliases)); + } if (string.IsNullOrWhiteSpace(alias)) { diff --git a/VpSharp.Commands/Attributes/CommandAttribute.cs b/VpSharp.Commands/Attributes/CommandAttribute.cs index d73a8b7..b39e924 100644 --- a/VpSharp.Commands/Attributes/CommandAttribute.cs +++ b/VpSharp.Commands/Attributes/CommandAttribute.cs @@ -14,7 +14,11 @@ public sealed class CommandAttribute : Attribute /// is empty, or consists of only whitespace. public CommandAttribute(string name) { - ArgumentNullException.ThrowIfNull(name); + if (name is null) + { + throw new ArgumentNullException(nameof(name)); + } + if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentException("Name cannot be empty"); diff --git a/VpSharp.Commands/Attributes/ExecutionChecks/RequireAvatarNameAttribute.cs b/VpSharp.Commands/Attributes/ExecutionChecks/RequireAvatarNameAttribute.cs index c395675..bd85e50 100644 --- a/VpSharp.Commands/Attributes/ExecutionChecks/RequireAvatarNameAttribute.cs +++ b/VpSharp.Commands/Attributes/ExecutionChecks/RequireAvatarNameAttribute.cs @@ -14,7 +14,11 @@ public sealed class RequireAvatarNameAttribute : PreExecutionCheckAttribute /// is . public RequireAvatarNameAttribute(IEnumerable names) { - ArgumentNullException.ThrowIfNull(names); + if (names is null) + { + throw new ArgumentNullException(nameof(names)); + } + Names = names.ToArray(); } @@ -26,7 +30,11 @@ public sealed class RequireAvatarNameAttribute : PreExecutionCheckAttribute [CLSCompliant(false)] public RequireAvatarNameAttribute(params string[] names) { - ArgumentNullException.ThrowIfNull(names); + if (names is null) + { + throw new ArgumentNullException(nameof(names)); + } + Names = names[..]; } @@ -39,7 +47,11 @@ public sealed class RequireAvatarNameAttribute : PreExecutionCheckAttribute /// protected internal override Task PerformAsync(CommandContext context) { - ArgumentNullException.ThrowIfNull(context); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + return Task.FromResult(Names.Contains(context.Avatar.Name)); } } diff --git a/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotAttribute.cs b/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotAttribute.cs index 3afce7c..29183c7 100644 --- a/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotAttribute.cs +++ b/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotAttribute.cs @@ -8,7 +8,11 @@ public sealed class RequireBotAttribute : PreExecutionCheckAttribute /// protected internal override Task PerformAsync(CommandContext context) { - ArgumentNullException.ThrowIfNull(context); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + return Task.FromResult(context.Avatar.IsBot); } } diff --git a/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotOwnerAttribute.cs b/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotOwnerAttribute.cs index 9c2e3c6..e716ce9 100644 --- a/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotOwnerAttribute.cs +++ b/VpSharp.Commands/Attributes/ExecutionChecks/RequireBotOwnerAttribute.cs @@ -8,7 +8,11 @@ public sealed class RequireBotOwnerAttribute : PreExecutionCheckAttribute /// protected internal override Task PerformAsync(CommandContext context) { - ArgumentNullException.ThrowIfNull(context); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + return Task.FromResult(context.Avatar.UserId == context.Client.CurrentUser?.Id); } } diff --git a/VpSharp.Commands/Attributes/ExecutionChecks/RequireHumanAttribute.cs b/VpSharp.Commands/Attributes/ExecutionChecks/RequireHumanAttribute.cs index 83332a9..9fcc6f5 100644 --- a/VpSharp.Commands/Attributes/ExecutionChecks/RequireHumanAttribute.cs +++ b/VpSharp.Commands/Attributes/ExecutionChecks/RequireHumanAttribute.cs @@ -8,7 +8,11 @@ public sealed class RequireHumanAttribute : PreExecutionCheckAttribute /// protected internal override Task PerformAsync(CommandContext context) { - ArgumentNullException.ThrowIfNull(context); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + return Task.FromResult(!context.Avatar.IsBot); } } diff --git a/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserIdAttribute.cs b/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserIdAttribute.cs index 35d7cdc..bd22c0a 100644 --- a/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserIdAttribute.cs +++ b/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserIdAttribute.cs @@ -14,7 +14,11 @@ public sealed class RequireUserIdAttribute : PreExecutionCheckAttribute /// is . public RequireUserIdAttribute(IEnumerable userIds) { - ArgumentNullException.ThrowIfNull(userIds); + if (userIds is null) + { + throw new ArgumentNullException(nameof(userIds)); + } + UserIds = userIds.ToArray(); } @@ -26,7 +30,11 @@ public sealed class RequireUserIdAttribute : PreExecutionCheckAttribute [CLSCompliant(false)] public RequireUserIdAttribute(params int[] userIds) { - ArgumentNullException.ThrowIfNull(userIds); + if (userIds is null) + { + throw new ArgumentNullException(nameof(userIds)); + } + UserIds = userIds[..]; } @@ -39,7 +47,11 @@ public sealed class RequireUserIdAttribute : PreExecutionCheckAttribute /// protected internal override Task PerformAsync(CommandContext context) { - ArgumentNullException.ThrowIfNull(context); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + return Task.FromResult(UserIds.Contains(context.Avatar.UserId)); } } diff --git a/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserNameAttribute.cs b/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserNameAttribute.cs index de275f8..f008b13 100644 --- a/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserNameAttribute.cs +++ b/VpSharp.Commands/Attributes/ExecutionChecks/RequireUserNameAttribute.cs @@ -16,7 +16,11 @@ public sealed class RequireUserNameAttribute : PreExecutionCheckAttribute /// is . public RequireUserNameAttribute(IEnumerable names) { - ArgumentNullException.ThrowIfNull(names); + if (names is null) + { + throw new ArgumentNullException(nameof(names)); + } + Names = names.ToArray(); } @@ -28,7 +32,11 @@ public sealed class RequireUserNameAttribute : PreExecutionCheckAttribute [CLSCompliant(false)] public RequireUserNameAttribute(params string[] names) { - ArgumentNullException.ThrowIfNull(names); + if (names is null) + { + throw new ArgumentNullException(nameof(names)); + } + Names = names[..]; } @@ -41,7 +49,11 @@ public sealed class RequireUserNameAttribute : PreExecutionCheckAttribute /// protected internal override async Task PerformAsync(CommandContext context) { - ArgumentNullException.ThrowIfNull(context); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + VirtualParadiseUser user = await context.Avatar.GetUserAsync().ConfigureAwait(false); return Names.Contains(user.Name); } diff --git a/VpSharp.Commands/CommandsExtension.cs b/VpSharp.Commands/CommandsExtension.cs index ddf7d0e..62d46e6 100644 --- a/VpSharp.Commands/CommandsExtension.cs +++ b/VpSharp.Commands/CommandsExtension.cs @@ -33,8 +33,16 @@ public sealed class CommandsExtension : VirtualParadiseClientExtension public CommandsExtension(VirtualParadiseClient client, CommandsExtensionConfiguration configuration) : base(client) { - ArgumentNullException.ThrowIfNull(client); - ArgumentNullException.ThrowIfNull(configuration); + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + + if (configuration is null) + { + throw new ArgumentNullException(nameof(configuration)); + } + _configuration = configuration; _configuration.Services ??= client.Services; @@ -64,7 +72,10 @@ public sealed class CommandsExtension : VirtualParadiseClientExtension /// public void RegisterCommands(Assembly assembly) { - ArgumentNullException.ThrowIfNull(assembly); + if (assembly is null) + { + throw new ArgumentNullException(nameof(assembly)); + } foreach (Type type in assembly.GetTypes()) { @@ -136,7 +147,10 @@ public sealed class CommandsExtension : VirtualParadiseClientExtension /// public void RegisterCommands(Type moduleType) { - ArgumentNullException.ThrowIfNull(moduleType); + if (moduleType is null) + { + throw new ArgumentNullException(nameof(moduleType)); + } if (moduleType.IsAbstract) { @@ -164,7 +178,10 @@ public sealed class CommandsExtension : VirtualParadiseClientExtension /// protected internal override Task OnMessageReceived(VirtualParadiseMessage message) { - ArgumentNullException.ThrowIfNull(message); + if (message is null) + { + throw new ArgumentNullException(nameof(message)); + } if (message.Type != MessageType.ChatMessage) { diff --git a/VpSharp.Commands/VirtualParadiseClientExtensions.cs b/VpSharp.Commands/VirtualParadiseClientExtensions.cs index 43e6a31..8f1dd1b 100644 --- a/VpSharp.Commands/VirtualParadiseClientExtensions.cs +++ b/VpSharp.Commands/VirtualParadiseClientExtensions.cs @@ -14,7 +14,11 @@ public static class VirtualParadiseClientExtensions /// is . public static CommandsExtension UseCommands(this VirtualParadiseClient client, CommandsExtensionConfiguration configuration) { - ArgumentNullException.ThrowIfNull(client); + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + return client.AddExtension(configuration); } } diff --git a/VpSharp/src/Entities/VirtualParadiseAvatar.cs b/VpSharp/src/Entities/VirtualParadiseAvatar.cs index a1d05e0..5ca6f24 100644 --- a/VpSharp/src/Entities/VirtualParadiseAvatar.cs +++ b/VpSharp/src/Entities/VirtualParadiseAvatar.cs @@ -224,7 +224,11 @@ public sealed class VirtualParadiseAvatar : IEquatable /// Passing to will hide the name from the recipient. public Task SendMessageAsync(string? name, string message, FontStyle fontStyle, Color color) { - ArgumentNullException.ThrowIfNull(message); + if (message is null) + { + throw new ArgumentNullException(nameof(message)); + } + if (string.IsNullOrWhiteSpace(message)) { throw new ArgumentException(ExceptionMessages.ValueCannotBeEmpty, nameof(message)); @@ -282,7 +286,10 @@ public sealed class VirtualParadiseAvatar : IEquatable /// is . public Task SendUriAsync(Uri uri, UriTarget target = UriTarget.Browser) { - ArgumentNullException.ThrowIfNull(uri); + if (uri is null) + { + throw new ArgumentNullException(nameof(uri)); + } // ReSharper disable once InconsistentlySynchronizedField if (this == _client.CurrentAvatar) @@ -306,7 +313,10 @@ public sealed class VirtualParadiseAvatar : IEquatable /// The client does not have permission to modify world settings. public async Task SendWorldSettings(Action action) { - ArgumentNullException.ThrowIfNull(action); + if (action is null) + { + throw new ArgumentNullException(nameof(action)); + } // ReSharper disable once InconsistentlySynchronizedField var builder = new WorldSettingsBuilder(_client, Session); @@ -323,7 +333,11 @@ public sealed class VirtualParadiseAvatar : IEquatable /// is . public Task TeleportAsync(VirtualParadiseWorld world, Vector3d position) { - ArgumentNullException.ThrowIfNull(world); + if (world is null) + { + throw new ArgumentNullException(nameof(world)); + } + return TeleportAsync(world.Name, position, Rotation.None); } @@ -336,7 +350,11 @@ public sealed class VirtualParadiseAvatar : IEquatable /// is . public Task TeleportAsync(VirtualParadiseWorld world, Vector3d position, Rotation rotation) { - ArgumentNullException.ThrowIfNull(world); + if (world is null) + { + throw new ArgumentNullException(nameof(world)); + } + return TeleportAsync(world.Name, position, rotation); } @@ -358,15 +376,15 @@ public sealed class VirtualParadiseAvatar : IEquatable /// The rotation to which this avatar should be teleported. public async Task TeleportAsync(string world, Vector3d position, Rotation rotation) { - ArgumentNullException.ThrowIfNull(world); -#if NET7_0_OR_GREATER - ArgumentException.ThrowIfNullOrEmpty(world); -#else + if (world is null) + { + throw new ArgumentNullException(nameof(world)); + } + if (string.IsNullOrEmpty(world)) { throw new ArgumentException(ExceptionMessages.ValueCannotBeEmpty, nameof(world)); } -#endif // ReSharper disable InconsistentlySynchronizedField bool isSelf = this == _client.CurrentAvatar; diff --git a/VpSharp/src/Entities/VirtualParadiseModelObject.cs b/VpSharp/src/Entities/VirtualParadiseModelObject.cs index d45ce26..63bb547 100644 --- a/VpSharp/src/Entities/VirtualParadiseModelObject.cs +++ b/VpSharp/src/Entities/VirtualParadiseModelObject.cs @@ -52,7 +52,10 @@ public class VirtualParadiseModelObject : VirtualParadiseObject /// public async Task ModifyAsync(Action action) { - ArgumentNullException.ThrowIfNull(action); + if (action is null) + { + throw new ArgumentNullException(nameof(action)); + } var taskCompletionSource = new TaskCompletionSource(); var builder = new VirtualParadiseModelObjectBuilder(Client, this, ObjectBuilderMode.Modify); diff --git a/VpSharp/src/Entities/VirtualParadiseObject.cs b/VpSharp/src/Entities/VirtualParadiseObject.cs index 721d51c..2d159d7 100644 --- a/VpSharp/src/Entities/VirtualParadiseObject.cs +++ b/VpSharp/src/Entities/VirtualParadiseObject.cs @@ -20,7 +20,11 @@ public abstract class VirtualParadiseObject : IEquatable /// is . protected internal VirtualParadiseObject(VirtualParadiseClient client, int id) { - ArgumentNullException.ThrowIfNull(client); + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + Client = client; Id = id; } @@ -237,7 +241,10 @@ public abstract class VirtualParadiseObject : IEquatable /// The builder whose values to extract. protected internal virtual void ExtractFromBuilder(VirtualParadiseObjectBuilder builder) { - ArgumentNullException.ThrowIfNull(builder); + if (builder is null) + { + throw new ArgumentNullException(nameof(builder)); + } Location location = Location; Vector3d position = builder.Position.ValueOr(location.Position); @@ -256,7 +263,11 @@ public abstract class VirtualParadiseObject : IEquatable /// is . protected internal virtual void ExtractFromOther(VirtualParadiseObject virtualParadiseObject) { - ArgumentNullException.ThrowIfNull(virtualParadiseObject); + if (virtualParadiseObject is null) + { + throw new ArgumentNullException(nameof(virtualParadiseObject)); + } + Location = virtualParadiseObject.Location; ModificationTimestamp = virtualParadiseObject.ModificationTimestamp; Owner = virtualParadiseObject.Owner; diff --git a/VpSharp/src/Entities/VirtualParadiseWorld.cs b/VpSharp/src/Entities/VirtualParadiseWorld.cs index 02679d1..1b69508 100644 --- a/VpSharp/src/Entities/VirtualParadiseWorld.cs +++ b/VpSharp/src/Entities/VirtualParadiseWorld.cs @@ -123,7 +123,10 @@ public sealed class VirtualParadiseWorld : IEquatable /// The client does not have permission to modify world settings. public async Task ModifyAsync(Action action) { - ArgumentNullException.ThrowIfNull(action); + if (action is null) + { + throw new ArgumentNullException(nameof(action)); + } var builder = new WorldSettingsBuilder(_client); await Task.Run(() => action(builder)).ConfigureAwait(false); diff --git a/VpSharp/src/Internal/DependencyInjectionUtility.cs b/VpSharp/src/Internal/DependencyInjectionUtility.cs index 61b1112..af26e0b 100644 --- a/VpSharp/src/Internal/DependencyInjectionUtility.cs +++ b/VpSharp/src/Internal/DependencyInjectionUtility.cs @@ -17,14 +17,26 @@ internal static class DependencyInjectionUtility public static object CreateInstance(Type type, VirtualParadiseClient client) { - ArgumentNullException.ThrowIfNull(type); - ArgumentNullException.ThrowIfNull(client); + if (type is null) + { + throw new ArgumentNullException(nameof(type)); + } + + if (client is null) + { + throw new ArgumentNullException(nameof(client)); + } + return CreateInstance(type, client.Services); } public static object CreateInstance(Type type, IServiceProvider? serviceProvider = null) { - ArgumentNullException.ThrowIfNull(type); + if (type is null) + { + throw new ArgumentNullException(nameof(type)); + } + object? instance; TypeInfo typeInfo = type.GetTypeInfo(); diff --git a/VpSharp/src/VirtualParadiseClient.Extensions.cs b/VpSharp/src/VirtualParadiseClient.Extensions.cs index 43507e9..e9a2ab5 100644 --- a/VpSharp/src/VirtualParadiseClient.Extensions.cs +++ b/VpSharp/src/VirtualParadiseClient.Extensions.cs @@ -46,7 +46,10 @@ public sealed partial class VirtualParadiseClient /// public VirtualParadiseClientExtension AddExtension(Type type, params object?[]? arguments) { - ArgumentNullException.ThrowIfNull(type); + if (type is null) + { + throw new ArgumentNullException(nameof(type)); + } if (!type.IsSubclassOf(typeof(VirtualParadiseClientExtension))) { @@ -85,7 +88,10 @@ public sealed partial class VirtualParadiseClient /// No extension with the specified type is added to this client. public VirtualParadiseClientExtension GetExtension(Type type) { - ArgumentNullException.ThrowIfNull(type); + if (type is null) + { + throw new ArgumentNullException(nameof(type)); + } VirtualParadiseClientExtension? result = _extensions.Find(e => e.GetType() == type); if (result is null) @@ -126,7 +132,10 @@ public sealed partial class VirtualParadiseClient /// No extension with the specified type is added to this client. public bool TryGetExtension(Type type, [NotNullWhen(true)] out VirtualParadiseClientExtension? extension) { - ArgumentNullException.ThrowIfNull(type); + if (type is null) + { + throw new ArgumentNullException(nameof(type)); + } extension = _extensions.Find(e => e.GetType() == type); return extension is not null; diff --git a/VpSharp/src/VirtualParadiseClient.Objects.cs b/VpSharp/src/VirtualParadiseClient.Objects.cs index 5828751..61c1b02 100644 --- a/VpSharp/src/VirtualParadiseClient.Objects.cs +++ b/VpSharp/src/VirtualParadiseClient.Objects.cs @@ -160,7 +160,10 @@ public sealed partial class VirtualParadiseClient private VirtualParadiseObject AddOrUpdateObject(VirtualParadiseObject obj) { - ArgumentNullException.ThrowIfNull(obj); + if (obj is null) + { + throw new ArgumentNullException(nameof(obj)); + } return _objects.AddOrUpdate(obj.Id, obj, (_, existing) => { diff --git a/VpSharp/src/VirtualParadiseClient.cs b/VpSharp/src/VirtualParadiseClient.cs index 2b3584e..d926787 100644 --- a/VpSharp/src/VirtualParadiseClient.cs +++ b/VpSharp/src/VirtualParadiseClient.cs @@ -46,7 +46,11 @@ public sealed partial class VirtualParadiseClient : IDisposable /// is . public VirtualParadiseClient(VirtualParadiseConfiguration configuration) { - ArgumentNullException.ThrowIfNull(configuration); + if (configuration is null) + { + throw new ArgumentNullException(nameof(configuration)); + } + Services = configuration.Services; _configuration = new VirtualParadiseConfiguration(configuration); Initialize(); @@ -298,7 +302,11 @@ public sealed partial class VirtualParadiseClient : IDisposable /// Connection to the world server timed out. public async Task EnterAsync(VirtualParadiseWorld world) { - ArgumentNullException.ThrowIfNull(world); + if (world is null) + { + throw new ArgumentNullException(nameof(world)); + } + await EnterAsync(world.Name).ConfigureAwait(false); } @@ -317,7 +325,10 @@ public sealed partial class VirtualParadiseClient : IDisposable /// Connection to the world server timed out. public async Task EnterAsync(string worldName) { - ArgumentNullException.ThrowIfNull(worldName); + if (worldName is null) + { + throw new ArgumentNullException(nameof(worldName)); + } if (CurrentWorld is not null) { @@ -555,7 +566,11 @@ public sealed partial class VirtualParadiseClient : IDisposable /// public Task SendMessageAsync(string message) { - ArgumentNullException.ThrowIfNull(message); + if (message is null) + { + throw new ArgumentNullException(nameof(message)); + } + if (string.IsNullOrWhiteSpace(message)) { throw new ArgumentException(ExceptionMessages.ValueCannotBeEmpty, nameof(message)); @@ -628,7 +643,11 @@ public sealed partial class VirtualParadiseClient : IDisposable /// public Task SendMessageAsync(string? name, string message, FontStyle fontStyle, Color color) { - ArgumentNullException.ThrowIfNull(message); + if (message is null) + { + throw new ArgumentNullException(nameof(message)); + } + if (string.IsNullOrWhiteSpace(message)) { throw new ArgumentException(ExceptionMessages.ValueCannotBeEmpty, nameof(message));