示例#1
0
文件: Main.cs 项目: zsfelber/cs2j
 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);
         }
     }
 }
示例#2
0
文件: Main.cs 项目: exaphaser/cs2j
        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);
                }

            }

        }
示例#3
0
文件: Main.cs 项目: exaphaser/cs2j
        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);
            }
        }
示例#4
0
文件: Main.cs 项目: zsfelber/cs2j
        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);
            }
        }