private bool ParseArgumentList()

in src/FabActUtil/CommandLineParser/CommandLineArgumentParser.cs [441:521]


        private bool ParseArgumentList(string[] args, object destination)
        {
            var hadError = false;
            if (args != null)
            {
                foreach (var argument in args)
                {
                    if (argument.Length > 0)
                    {
                        switch (argument[0])
                        {
                            case '-':
                            case '/':
                                {
                                    var endIndex = argument.IndexOfAny(
                                        new[]
                                        {
                                        ':',
                                        '+',
                                        '-',
                                        },
                                        1);
                                    var option = argument.Substring(
                                        1,
                                        endIndex == -1 ? argument.Length - 1 : endIndex - 1);
                                    string optionArgument;
                                    if (endIndex == -1)
                                    {
                                        optionArgument = null;
                                    }
                                    else if (argument.Length > 1 + option.Length && argument[1 + option.Length] == ':')
                                    {
                                        optionArgument = argument.Substring(option.Length + 2);
                                    }
                                    else
                                    {
                                        optionArgument = argument.Substring(option.Length + 1);
                                    }

                                    var arg = (Argument)this.argumentMap[option];
                                    if (arg == null)
                                    {
                                        this.ReportUnrecognizedArgument(argument);
                                        hadError = true;
                                    }
                                    else
                                    {
                                        hadError |= !arg.SetValue(optionArgument, destination);
                                    }

                                    break;
                                }

                            case '@':
                                {
                                    hadError |= this.LexFileArguments(argument.Substring(1), out var nestedArguments);
                                    hadError |= this.ParseArgumentList(nestedArguments, destination);
                                    break;
                                }

                            default:
                                {
                                    if (this.defaultArgument != null)
                                    {
                                        hadError |= !this.defaultArgument.SetValue(argument, destination);
                                    }
                                    else
                                    {
                                        this.ReportUnrecognizedArgument(argument);
                                        hadError = true;
                                    }

                                    break;
                                }
                        }
                    }
                }
            }

            return hadError;
        }