Пример #1
0
        /// <summary>
        /// 获取类型信息
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private Xml.Node get(Type type)
        {
            if (type != null)
            {
                Xml.Node node;
                if (typeLock.TryGetValue(type, out node))
                {
                    return(node);
                }

                HashString typeName;
                AutoCSer.Memory.Pointer buffer = UnmanagedPool.Default.GetPointer();
                try
                {
                    using (typeNameStream)
                    {
                        typeNameStream.Reset(ref buffer);
                        AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder nameBuilder = new AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder {
                            NameStream = typeNameStream, IsXml = true
                        };
                        nameBuilder.Xml(type);
                        typeName = typeNameStream.ToString();
                    }
                }
                finally { UnmanagedPool.Default.PushOnly(ref buffer); }
                if (types.TryGetValue(typeName, out node))
                {
                    types.Remove(typeName);
                }
                typeLock.Set(type, node);
                return(node);
            }
            return(default(Xml.Node));
        }
Пример #2
0
 /// <summary>
 /// 获取属性信息
 /// </summary>
 /// <param name="property"></param>
 /// <returns></returns>
 private Xml.Node get(PropertyInfo property)
 {
     if (property != null)
     {
         HashString propertyName;
         AutoCSer.Memory.Pointer buffer = UnmanagedPool.Default.GetPointer();
         try
         {
             using (propertyNameStream)
             {
                 propertyNameStream.Reset(ref buffer);
                 AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder nameBuilder = new AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder {
                     NameStream = propertyNameStream, IsXml = true
                 };
                 nameBuilder.Xml(property.DeclaringType);
                 propertyNameStream.Write('.');
                 propertyNameStream.SimpleWrite(property.Name);
                 propertyName = propertyNameStream.ToString();
             }
         }
         finally { UnmanagedPool.Default.PushOnly(ref buffer); }
         Xml.Node node;
         properties.TryGetValue(propertyName, out node);
         return(node);
     }
     return(default(Xml.Node));
 }
Пример #3
0
 /// <summary>
 /// 获取字段信息
 /// </summary>
 /// <param name="field"></param>
 /// <returns></returns>
 private Xml.Node get(FieldInfo field)
 {
     if (field != null)
     {
         HashString fieldName;
         AutoCSer.Memory.Pointer buffer = UnmanagedPool.Default.GetPointer();
         try
         {
             using (fieldNameStream)
             {
                 fieldNameStream.Reset(ref buffer);
                 AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder nameBuilder = new AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder {
                     NameStream = fieldNameStream, IsXml = true
                 };
                 nameBuilder.Xml(field.DeclaringType);
                 fieldNameStream.Write('.');
                 fieldNameStream.SimpleWrite(field.Name);
                 fieldName = fieldNameStream.ToString();
             }
         }
         finally { UnmanagedPool.Default.PushOnly(ref buffer); }
         Xml.Node node;
         fields.TryGetValue(fieldName, out node);
         return(node);
     }
     return(default(Xml.Node));
 }
Пример #4
0
        /// <summary>
        /// 获取方法信息
        /// </summary>
        /// <param name="method"></param>
        /// <returns></returns>
        private Xml.Node get(MethodInfo method)
        {
            if (method != null)
            {
                Xml.Node node;
                if (methodLock.TryGetValue(method, out node))
                {
                    return(node);
                }

                HashString methodName;
                AutoCSer.Memory.Pointer buffer = UnmanagedPool.Default.GetPointer();
                try
                {
                    using (methodNameStream)
                    {
                        methodNameStream.Reset(ref buffer);
                        AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder nameBuilder = new AutoCSer.Extensions.TypeExtensionCodeGenerator.NameBuilder {
                            NameStream = methodNameStream, IsXml = true
                        };
                        nameBuilder.Xml(method.DeclaringType);
                        methodNameStream.Write('.');
                        string name = method.Name;
                        if (name[0] == '.')
                        {
                            methodNameStream.Write('#');
                            methodNameStream.Write(new SubString {
                                String = name, Start = 1, Length = name.Length - 1
                            });
                        }
                        else
                        {
                            methodNameStream.SimpleWrite(name);
                        }
                        ParameterInfo[] parameters = method.GetParameters();
                        if (parameters.Length != 0)
                        {
                            bool isFirst = true;
                            methodNameStream.Write('(');
                            foreach (ParameterInfo parameter in parameters)
                            {
                                if (isFirst)
                                {
                                    isFirst = false;
                                }
                                else
                                {
                                    methodNameStream.Write(',');
                                }
                                nameBuilder.Xml(parameter.ParameterType);
                            }
                            methodNameStream.Write(')');
                        }
                        formatName(methodNameStream.Char, methodNameStream.CurrentChar);
                        methodName = methodNameStream.ToString();
                    }
                }
                finally { UnmanagedPool.Default.PushOnly(ref buffer); }
                methods.TryGetValue(methodName, out node);
                methodLock.Set(method, node);
                return(node);
            }
            return(default(Xml.Node));
        }