You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System; using System.ComponentModel.DataAnnotations; using System.IO;
using McMaster.Extensions.CommandLineUtils.Abstractions; using McMaster.Extensions.CommandLineUtils.Validation;
namespace ICSharpCode.ILSpyCmd { [AttributeUsage(AttributeTargets.Class)] public sealed class ProjectOptionRequiresOutputDirectoryValidationAttribute : ValidationAttribute { public ProjectOptionRequiresOutputDirectoryValidationAttribute() { }
protected override ValidationResult IsValid(object value, ValidationContext context) { if (value is ILSpyCmdProgram obj) { if (obj.CreateCompilableProjectFlag && string.IsNullOrEmpty(obj.OutputDirectory)) { return new ValidationResult("--project cannot be used unless --outputdir is also specified"); } } return ValidationResult.Success; } }
[AttributeUsage(AttributeTargets.Property)] public sealed class FileExistsOrNullAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var path = value as string; if (string.IsNullOrEmpty(path)) { return ValidationResult.Success; }
if (!Path.IsPathRooted(path) && validationContext.GetService(typeof(CommandLineContext)) is CommandLineContext context) { path = Path.Combine(context.WorkingDirectory, path); }
if (File.Exists(path)) { return ValidationResult.Success; }
return new ValidationResult($"File '{path}' does not exist!"); } }
[AttributeUsage(AttributeTargets.Property)] public sealed class FilesExistAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { switch (value) { case string path: return ValidatePath(path); case string[] paths: { foreach (string path in paths) { ValidationResult result = ValidatePath(path); if (result != ValidationResult.Success) return result; } return ValidationResult.Success; } default: return new ValidationResult($"File '{value}' does not exist!"); }
ValidationResult ValidatePath(string path) { if (!string.IsNullOrWhiteSpace(path)) { if (!Path.IsPathRooted(path) && validationContext.GetService(typeof(CommandLineContext)) is CommandLineContext context) { path = Path.Combine(context.WorkingDirectory, path); }
if (File.Exists(path)) { return ValidationResult.Success; } }
return new ValidationResult($"File '{path}' does not exist!"); } } } }
|