private Dictionary<string, List<IHtmlString>> GetGenericParameterConstraints(DocumentedType type)
{
var parameters = type.Definition.GenericParameters.Where(p =>
p.HasConstraints || p.HasReferenceTypeConstraint ||
p.HasDefaultConstructorConstraint || p.HasNotNullableValueTypeConstraint).ToArray();
var result = new Dictionary<string, List<IHtmlString>>();
if (parameters.Length > 0)
{
foreach (var parameter in parameters)
{
var constraints = new List<IHtmlString>();
if (parameter.HasNotNullableValueTypeConstraint)
{
constraints.Add(MvcHtmlString.Create("struct"));
}
if (parameter.HasReferenceTypeConstraint)
{
constraints.Add(MvcHtmlString.Create("class"));
}
foreach (var constraint in parameter.Constraints)
{
if (constraint.FullName == "System.ValueType")
{
continue;
}
constraints.Add(_renderer.Render(constraint.GetTypeSignature(_urlResolver),
TypeRenderOption.Name | TypeRenderOption.Link));
}
if (parameter.HasDefaultConstructorConstraint && !parameter.HasNotNullableValueTypeConstraint)
{
constraints.Add(MvcHtmlString.Create("new()"));
}
result.Add(parameter.FullName, constraints);
}
}
return result;
}