private ClassMetaData BuildClass(IDictionary <Type, ClassMetaData> map, Type type)
        {
            if (type == typeof(object))
            {
                return(null);
            }

            //Already in map, just return
            if (map.TryGetValue(type, out var value))
            {
                return(value);
            }

            var parent = BuildClass(map, type.BaseType);

            var data = new ClassMetaData(type, parent);

            map.Add(type, data);

            return(data);
        }
 public ClassMetaData(Type type, ClassMetaData parent)
 {
     Type   = type ?? throw new ArgumentNullException(nameof(type));
     Parent = parent;
 }