mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-08-02 18:17:30 +08:00

When subclassing `Command<TSettings>` which has the [NotNull] attributes, Rider/ReSharper gives this warning: > Nullability of type of parameter 'context' in method does not match overridden member `int Spectre.Console.Cli.Command<TSettings>.Execute(CommandContext, TSettings)` (possibly because of nullability attributes) When subclassing `Command<TSettings>` which does not have the [NotNull] attributes, Rider/ReSharper gives this warning: > The nullability attribute has no effect and can be safely removed The solution is simply to remove the [NotNull] attributes. Since `<Nullable>enable</Nullable>` is set in the project, they are actually not necessary. By the way, the non-generic `Command` class does not have the [NotNull] attributes.
48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
namespace Spectre.Console.Cli;
|
|
|
|
/// <summary>
|
|
/// Base class for a command.
|
|
/// </summary>
|
|
/// <typeparam name="TSettings">The settings type.</typeparam>
|
|
/// <seealso cref="AsyncCommand{TSettings}"/>
|
|
public abstract class Command<TSettings> : ICommand<TSettings>
|
|
where TSettings : CommandSettings
|
|
{
|
|
/// <summary>
|
|
/// Validates the specified settings and remaining arguments.
|
|
/// </summary>
|
|
/// <param name="context">The command context.</param>
|
|
/// <param name="settings">The settings.</param>
|
|
/// <returns>The validation result.</returns>
|
|
public virtual ValidationResult Validate(CommandContext context, TSettings settings)
|
|
{
|
|
return ValidationResult.Success();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Executes the command.
|
|
/// </summary>
|
|
/// <param name="context">The command context.</param>
|
|
/// <param name="settings">The settings.</param>
|
|
/// <returns>An integer indicating whether or not the command executed successfully.</returns>
|
|
public abstract int Execute(CommandContext context, TSettings settings);
|
|
|
|
/// <inheritdoc/>
|
|
ValidationResult ICommand.Validate(CommandContext context, CommandSettings settings)
|
|
{
|
|
return Validate(context, (TSettings)settings);
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
Task<int> ICommand.Execute(CommandContext context, CommandSettings settings)
|
|
{
|
|
Debug.Assert(settings is TSettings, "Command settings is of unexpected type.");
|
|
return Task.FromResult(Execute(context, (TSettings)settings));
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
Task<int> ICommand<TSettings>.Execute(CommandContext context, TSettings settings)
|
|
{
|
|
return Task.FromResult(Execute(context, settings));
|
|
}
|
|
} |