/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }