void IVisitor.Visit(BindingClass @class) { Generate(new ClassInstanceModel { BaseName = @class.BaseName, OriginalName = @class.OriginalName, Name = @class.Name, OriginalNamespace = @class.OriginalNamespace, Namespace = _options.Namespace, GenericArguments = GenericRef(@class), Getters = @class.Getters.Select(CreateMethod).ToArray(), Setters = @class.Setters.Select(CreateMethod).ToArray(), Deleters = @class.Deleters.Select(CreateMethod).ToArray(), Fields = @class.GetAll <BindingField>().Select(m => CreateField(m.Key, m.Value)).ToArray() }); Generate(new ClassPrototypeModel { OriginalName = @class.OriginalName, Name = @class.Name, OriginalNamespace = @class.OriginalNamespace, Namespace = _options.Namespace, Prototype = String.Concat("engine.Constructors.", @class.BaseName, ".PrototypeObject"), Events = @class.GetAll <BindingEvent>().Select(m => CreateEvent(m.Key, m.Value)).ToArray(), Properties = @class.GetAll <BindingProperty>().Select(m => CreateProperty(m.Key, m.Value)).ToArray(), Methods = @class.GetAll <BindingMethod>().Select(m => CreateMethod(m.Key, m.Value)).ToArray() }); Generate(new ClassConstructorModel { Name = @class.Name, Namespace = _options.Namespace, OriginalNamespace = @class.OriginalNamespace, OriginalName = @class.OriginalName, Constructors = @class.Constructors.Select(CreateMethod).ToArray(), Constants = @class.GetAll <BindingField>().Select(m => CreateField(m.Key, m.Value)).ToArray() }); _names.Include(@class.Name, @class.BaseName); }
public static IEnumerable <BindingClass> GetBindings(this IDictionary <String, List <Type> > mappings) { foreach (var mapping in mappings) { var name = mapping.Key; var types = mapping.Value; var type = types.Where(m => !m.IsEnum).FirstOrDefault() ?? types.First(); if (type.IsNotInterfaced()) { continue; } var binding = new BindingClass(name, type.Name.Replace("`1", ""), type.Namespace, type.ResolveBase()); if (type.IsGenericType) { var args = type.GetGenericArguments(); binding.GenericArguments.AddRange(args); } yield return(binding.GetClassBindings(types, name)); } }