public IList <ResolveResult> GetPositionalArguments(ITypeResolveContext context)
{
List <ResolveResult> result = new List <ResolveResult>();
if (positionalArguments != null)
{
foreach (var arg in positionalArguments)
{
result.Add(Resolve(arg, context));
}
}
if (namedCtorArguments == null || namedCtorArguments.Count == 0)
{
// no namedCtorArguments: just return the positionalArguments
return(result.AsReadOnly());
}
// we do have namedCtorArguments, which need to be re-ordered and appended to the positional arguments
IMethod method = ResolveConstructor(context);
if (method != null)
{
for (int i = result.Count; i < method.Parameters.Count; i++)
{
IParameter p = method.Parameters[i];
bool found = false;
foreach (var pair in namedCtorArguments)
{
if (pair.Key == p.Name)
{
result.Add(Resolve(pair.Value, context));
found = true;
}
}
if (!found)
{
// add the parameter's default value:
if (p.DefaultValue != null)
{
result.Add(Resolve(p.DefaultValue, context));
}
else
{
IType type = p.Type.Resolve(context);
result.Add(new ConstantResolveResult(type, CSharpResolver.GetDefaultValue(type)));
}
}
}
}
return(result.AsReadOnly());
}