public Event Resolve(EventInfo e) { if (e == null) { return(null); } Event ret; if (_eventMap.TryGetValue(e, out ret)) { return(ret); } ret = new Event(); _eventMap[e] = ret; ret.Name = e.Name; ret.Access = AccessOf(e); ret.Nature = NatureOf(e); ret.HandlerType = (Delegate)Resolve(e.EventHandlerType); ret.XmlDoc = XmlDocReader.XMLFromMember(e); var m = e.EventHandlerType.GetMethod("Invoke"); ret.Return = Resolve(m.ReturnParameter); ret.Return.Name = "___ret"; foreach (var arg in m.GetParameters()) { ret.Parameters.Add(Resolve(arg)); } return(ret); }
public Constructor ResolveAsConstructor(MethodInfo method) { if (method == null) { return(null); } Constructor ret; if (_constructorMap.TryGetValue(method, out ret)) { return(ret); } ret = new Constructor(); _constructorMap[method] = ret; ret.Name = method.DeclaringType.Name; ret.Access = AccessOf(method); ret.Nature = MemberNature.Instance; ret.XmlDoc = XmlDocReader.XMLFromMember(method); foreach (var arg in method.GetParameters()) { ret.Parameters.Add(Resolve(arg)); } foreach (var arg in ret.Parameters) { arg.XmlDoc = ret.XmlDoc?.ChildNodes.OfType <XmlElement>().FirstOrDefault(xml => xml.LocalName == "typeparam" && xml.Attributes["name"].InnerText == arg.Name); } return(ret); }
public void Merge(Enum ast, System.Type type) { var names = System.Enum.GetNames(type); var values = System.Enum.GetValues(type).Cast <int>().ToArray(); for (int i = 0; i < names.Length; i++) { XmlElement xml = XmlDocReader.XMLFromMember(type.GetMember(names[i]).FirstOrDefault()); ast.Entries.Add(new Enum.Entry(names[i], values[i], xml)); } ast.UnderlyingType = Resolve(System.Enum.GetUnderlyingType(type)); }
public Field Resolve(FieldInfo field) { if (field == null) { return(null); } var ret = new Field(); ret.Name = field.Name; ret.Type = Resolve(field.FieldType); ret.IsArray = U.Deref(field.FieldType).IsArray; ret.Access = AccessOf(field); ret.XmlDoc = XmlDocReader.XMLFromMember(field); return(ret); }
public Method Resolve(MethodInfo method) { if (method == null) { return(null); } Method ret; if (_methodMap.TryGetValue(method, out ret)) { return(ret); } ret = new Method(); _methodMap[method] = ret; ret.Name = method.Name; ret.IsConst = (method.GetCustomAttribute <ConstAttribute>() != null); ret.Access = AccessOf(method); ret.Nature = NatureOf(method); ret.XmlDoc = XmlDocReader.XMLFromMember(method); ret.Return = Resolve(method.ReturnParameter); ret.Return.XmlDoc = ret.XmlDoc?["returns"]; ret.Return.Context = VariableContext.Return; ret.Return.Name = "___ret"; foreach (var arg in method.GetParameters()) { ret.Parameters.Add(Resolve(arg)); } foreach (var arg in ret.Parameters) { arg.XmlDoc = ret.XmlDoc?.ChildNodes.OfType <XmlElement>().FirstOrDefault(xml => xml.LocalName == "typeparam" && xml.Attributes["name"].InnerText == arg.Name); } return(ret); }
public Property Resolve(PropertyInfo prop) { if (prop == null) { return(null); } if (prop.CanWrite && !prop.CanRead) { Errors.WriteOnlyProperty(prop); return(null); } Property ret; if (_propertyMap.TryGetValue(prop, out ret)) { return(ret); } ret = new Property(); _propertyMap[prop] = ret; ret.IsFactory = (prop.GetCustomAttribute <FactoryAttribute>() != null || prop.GetMethod.GetCustomAttribute <FactoryAttribute>() != null); ret.ConstGetter = !ret.IsFactory && (prop.GetMethod.GetCustomAttribute <UnconstAttribute>() == null); ret.IsBacked = (prop.GetCustomAttribute <BackedAttribute>() != null); ret.Name = prop.Name; ret.IsArray = U.Deref(prop.PropertyType).IsArray; ret.XmlDoc = XmlDocReader.XMLFromMember(prop); ret.Type = Resolve(prop.PropertyType); ret.Access = AccessOf(prop); ret.Nature = NatureOf(prop); ret.IsReadOnly = !prop.CanWrite; return(ret); }