in src/AutoRest.CSharp/Common/Generation/Writers/CodeWriter.cs [452:509]
private void AppendType(CSharpType type, bool isDeclaration, bool writeTypeNameOnly)
{
if (type.IsFrameworkType && type.FrameworkType.IsArray && type.FrameworkType.GetGenericArguments().Any())
{
AppendType(type.FrameworkType.GetElementType()!, isDeclaration, writeTypeNameOnly);
AppendRaw("[]");
return;
}
if (type.TryGetCSharpFriendlyName(out var keywordName))
{
AppendRaw(keywordName);
if (type.FrameworkType.IsGenericParameter && type.IsNullable)
{
AppendRaw("?");
}
}
else if (isDeclaration && !type.IsFrameworkType)
{
AppendRaw(type.Implementation.Declaration.Name);
}
else if (writeTypeNameOnly)
{
AppendRaw(type.Name);
}
else if (type.DeclaringType != null)
{
AppendType(type.DeclaringType, isDeclaration, writeTypeNameOnly);
AppendRaw(".");
AppendRaw(type.Name);
}
else
{
UseNamespace(type.Namespace);
AppendRaw("global::");
AppendRaw(type.Namespace);
AppendRaw(".");
AppendRaw(type.Name);
}
if (type.Arguments.Any())
{
AppendRaw(_writingXmlDocumentation ? "{" : "<");
foreach (var typeArgument in type.Arguments)
{
AppendType(typeArgument, false, writeTypeNameOnly);
AppendRaw(_writingXmlDocumentation ? "," : ", ");
}
RemoveTrailingComma();
AppendRaw(_writingXmlDocumentation ? "}" : ">");
}
if (!isDeclaration && type is { IsNullable: true, IsValueType: true })
{
AppendRaw("?");
}
}