void WriteTypeName(TypeSpec typeSpec) { if (WriteLanguageKeywords && typeSpec.Name.Namespace == "System") { switch (typeSpec.Name.Name) { case "Void": case "SByte": case "Byte": case "Double": case "Decimal": case "Char": case "String": case "Object": writer.WriteKeyword(typeSpec.Name.Name.ToLowerInvariant()); return; case "Boolean": writer.WriteKeyword("bool"); return; case "Int16": writer.WriteKeyword("short"); return; case "UInt16": writer.WriteKeyword("ushort"); return; case "Int32": writer.WriteKeyword("int"); return; case "UInt32": writer.WriteKeyword("uint"); return; case "Int64": writer.WriteKeyword("long"); return; case "UInt64": writer.WriteKeyword("ulong"); return; case "Single": writer.WriteKeyword("float"); return; case "nint": writer.WriteKeyword("nint"); return; case "nuint": writer.WriteKeyword("nuint"); return; case "nfloat": writer.WriteKeyword("nfloat"); return; } } if (typeSpec.Name.Namespace != null) { writer.WriteNamespace(typeSpec.Name.Namespace + "."); } int typeNamesConsumed = 0; int typeArgIndex = 0; foreach (var name in typeSpec.AllNames) { if (!name.Name.StartsWith("🐵", StringComparison.Ordinal)) { if (typeNamesConsumed++ > 0) { writer.Write('.'); } writer.WriteTypeName(name.Name); } if (name.TypeArgumentCount > 0) { writer.Write('<'); for (var i = 0; i < name.TypeArgumentCount; i++, typeArgIndex++) { if (i > 0) { writer.Write(','); writer.Write(' '); } VisitTypeSpec(typeSpec.TypeArguments [typeArgIndex]); } writer.Write('>'); } } }