void WriteTypeName()

in Agents/Xamarin.Interactive/Representations/Reflection/ReflectionRemoting.cs [326:403]


        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.GetAllNames ()) {
                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 ('>');
                }
            }
        }