private void buildClass(ClassRepTemplate klass, Type t) { // Grab common fields buildInterface(klass, t); // Grab Constructors foreach (ConstructorInfo c in t.GetConstructors()) { ConstructorRepTemplate consRep = new ConstructorRepTemplate(); buildParameters(consRep.Params, c); consRep.SurroundingType = klass; klass.Constructors.Add(consRep); } // Grab Fields foreach (FieldInfo f in t.GetFields()) { FieldRepTemplate fieldRep = new FieldRepTemplate(); fieldRep.Name = f.Name; fieldRep.Type = new TypeRepRef(TypeHelper.buildTypeName(f.FieldType)); klass.Fields.Add(fieldRep); } // Grab Casts foreach (MethodInfo m in t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static)) { if (m.IsSpecialName && (m.Name == "op_Explicit" || m.Name == "op_Implicit")) { CastRepTemplate cast = new CastRepTemplate(); cast.To = new TypeRepRef(TypeHelper.buildTypeName(m.ReturnType)); cast.From = new TypeRepRef(TypeHelper.buildTypeName(m.GetParameters()[0].ParameterType)); klass.Casts.Add(cast); } } }
private void buildInterface(InterfaceRepTemplate iface, Type t) { if (t.IsGenericType) { iface.TypeName = t.GetGenericTypeDefinition().FullName; string[] tParams = new string[t.GetGenericArguments().Length]; for (int i = 0; i < t.GetGenericArguments().Length; i++) { tParams[i] = t.GetGenericArguments()[i].Name; } iface.TypeParams = tParams; } else { iface.TypeName = t.FullName; } List<String> bases = new List<String>(); if (t.BaseType != null) bases.Add(TypeHelper.buildTypeName(t.BaseType)); foreach (Type iTy in t.GetInterfaces()) { bases.Add(TypeHelper.buildTypeName(iTy)); } iface.Inherits = bases.ToArray(); // Grab Methods foreach (MethodInfo m in t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance)) { if (m.IsSpecialName) { // e.g., a property's getter / setter method continue; } MethodRepTemplate methRep = new MethodRepTemplate(); methRep.Name = m.Name; methRep.Return = new TypeRepRef(TypeHelper.buildTypeName(m.ReturnType)); if (m.IsGenericMethod) { string[] tParams = new string[m.GetGenericArguments().Length]; for (int i = 0; i < m.GetGenericArguments().Length; i++) { tParams[i] = m.GetGenericArguments()[i].Name; } methRep.TypeParams = tParams; } buildParameters(methRep.Params, m); if (m.IsStatic) { methRep.IsStatic = true; } methRep.SurroundingType = iface; iface.Methods.Add(methRep); } // Grab Properties foreach (PropertyInfo p in t.GetProperties()) { PropRepTemplate propRep = new PropRepTemplate(); propRep.Name = p.Name; propRep.Type = new TypeRepRef(TypeHelper.buildTypeName(p.PropertyType)); propRep.CanRead = p.CanRead; propRep.CanWrite = p.CanWrite; iface.Properties.Add(propRep); } // Grab Events foreach (EventInfo e in t.GetEvents()) { FieldRepTemplate eventRep = new FieldRepTemplate(); eventRep.Name = e.Name; eventRep.Type = new TypeRepRef(TypeHelper.buildTypeName(e.EventHandlerType)); iface.Events.Add(eventRep); } }
private void buildInterface(InterfaceRepTemplate iface, Type t) { if (t.IsGenericType) { iface.TypeName = t.GetGenericTypeDefinition().FullName; string[] tParams = new string[t.GetGenericArguments().Length]; for (int i = 0; i < t.GetGenericArguments().Length; i++) { tParams[i] = t.GetGenericArguments()[i].Name; } iface.TypeParams = tParams; } else { iface.TypeName = t.FullName; } List <String> bases = new List <String>(); if (t.BaseType != null) { bases.Add(TypeHelper.buildTypeName(t.BaseType)); } foreach (Type iTy in t.GetInterfaces()) { bases.Add(TypeHelper.buildTypeName(iTy)); } iface.Inherits = bases.ToArray(); // Grab Methods foreach (MethodInfo m in t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance)) { if (m.IsSpecialName) { // e.g., a property's getter / setter method continue; } MethodRepTemplate methRep = new MethodRepTemplate(); methRep.Name = m.Name; methRep.Return = new TypeRepRef(TypeHelper.buildTypeName(m.ReturnType)); if (m.IsGenericMethod) { string[] tParams = new string[m.GetGenericArguments().Length]; for (int i = 0; i < m.GetGenericArguments().Length; i++) { tParams[i] = m.GetGenericArguments()[i].Name; } methRep.TypeParams = tParams; } buildParameters(methRep.Params, m); if (m.IsStatic) { methRep.IsStatic = true; } methRep.SurroundingType = iface; iface.Methods.Add(methRep); } // Grab Properties foreach (PropertyInfo p in t.GetProperties()) { PropRepTemplate propRep = new PropRepTemplate(); propRep.Name = p.Name; propRep.Type = new TypeRepRef(TypeHelper.buildTypeName(p.PropertyType)); propRep.CanRead = p.CanRead; propRep.CanWrite = p.CanWrite; iface.Properties.Add(propRep); } // Grab Events foreach (EventInfo e in t.GetEvents()) { FieldRepTemplate eventRep = new FieldRepTemplate(); eventRep.Name = e.Name; eventRep.Type = new TypeRepRef(TypeHelper.buildTypeName(e.EventHandlerType)); iface.Events.Add(eventRep); } }