PowerArgs.CommandLineArgumentsDefinition.ValidateArguments C# (CSharp) Method

ValidateArguments() private static method

private static ValidateArguments ( IEnumerable arguments ) : void
arguments IEnumerable
return void
        private static void ValidateArguments(IEnumerable<CommandLineArgument> arguments)
        {
            List<string> knownAliases = new List<string>();

            foreach (var argument in arguments)
            {
                foreach (var alias in argument.Aliases)
                {
                    if (knownAliases.Contains(alias, new CaseAwareStringComparer(argument.IgnoreCase))) throw new InvalidArgDefinitionException("Duplicate alias '" + alias + "' on argument '" + argument.Aliases.First() + "'");
                    knownAliases.Add(alias);
                }
            }

            foreach (var argument in arguments)
            {
                if (argument.ArgumentType == null)
                {
                    throw new InvalidArgDefinitionException("Argument '" + argument.DefaultAlias + "' has a null ArgumentType");
                }

                if (argument.MustBeRevivable && ArgRevivers.CanRevive(argument.ArgumentType) == false)
                {
                    throw new InvalidArgDefinitionException("There is no reviver for type '" + argument.ArgumentType.Name + '"');
                }

                if (argument.ArgumentType.IsEnum)
                {
                    argument.ArgumentType.ValidateNoDuplicateEnumShortcuts(argument.IgnoreCase);
                }

                foreach (var property in argument.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
                {
                    // Getting each property will result in all AttrOverrides being validated
                    try
                    {
                        var val = property.GetValue(argument, null);
                    }
                    catch(TargetInvocationException ex)
                    {
                        if (ex.InnerException is InvalidArgDefinitionException)
                        {
                            ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
                        }
                        else
                        {
                            throw;
                        }
                    }
                }

            }
        }