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;
}