SmalltalkClass Map(Type type)
        {
            var properties = type
                             .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                             .Select(x => ToSmalltalkProperty(x));
            var name = type.Name;

            if (type.IsAbstract)
            {
                name = "Abstract" + name;
            }
            if (type.IsGenericTypeDefinition)
            {
                name = name + $"_{string.Join("_", type.GetGenericArguments().Select(t => t))}";
            }
            string baseName = string.Empty;

            if (!type.BaseType.IsGenericType)
            {
                baseName = type.BaseType.Name;
            }
            else
            {
                var tempName = type.BaseType.Name;
                baseName  = tempName.Substring(0, tempName.Length - 2);
                baseName += string.Join("_", type.BaseType.GetGenericArguments().Select(t => t.Name));
            }
            var comment = type.FullName;
            var c       = new SmalltalkClass(baseName, name, properties.ToArray(), comment);

            return(c);
        }
        void CreatePropertiesJson(string classDirectory, SmalltalkClass smalltalkClass)
        {
            var poco = new ClassPropertiesJson()
            {
                Category          = category,
                Name              = smalltalkClass.ClassName,
                Super             = smalltalkClass.BaseTypeName,
                InstanceVariables = smalltalkClass.Properties.Select(t => t.Name).ToArray()//$"| {string.Join(" ", smalltalkClass.Properties.Select(t => t.Name))} |";
            };
            var methodPropertiesPath = Path.Combine(classDirectory, "properties.json");

            File.WriteAllText(methodPropertiesPath, JsonSerializer.Serialize(poco));
        }