static private CreateValueDescriptor ( |
||
memberInfo | ||
attr | MigraDoc.DocumentObjectModel.Internals.DVAttribute | |
리턴 |
internal static ValueDescriptor CreateValueDescriptor(MemberInfo memberInfo, DVAttribute attr)
{
VDFlags flags = VDFlags.None;
if (attr.RefOnly)
flags |= VDFlags.RefOnly;
string name = memberInfo.Name;
Type type;
if (memberInfo is FieldInfo)
type = ((FieldInfo)memberInfo).FieldType;
else
type = ((PropertyInfo)memberInfo).PropertyType;
if (type == typeof(NBool))
return new NullableDescriptor(name, typeof(Boolean), type, memberInfo, flags);
if (type == typeof(NInt))
return new NullableDescriptor(name, typeof(Int32), type, memberInfo, flags);
if (type == typeof(NDouble))
return new NullableDescriptor(name, typeof(Double), type, memberInfo, flags);
if (type == typeof(NString))
return new NullableDescriptor(name, typeof(String), type, memberInfo, flags);
if (type == typeof(String))
return new ValueTypeDescriptor(name, typeof(String), type, memberInfo, flags);
if (type == typeof(NEnum))
{
Type valueType = attr.Type;
Debug.Assert(valueType.IsSubclassOf(typeof(Enum)), "NEnum must have 'Type' attribute with the underlying type");
return new NullableDescriptor(name, valueType, type, memberInfo, flags);
}
if (type.IsSubclassOf(typeof(ValueType)))
return new ValueTypeDescriptor(name, type, type, memberInfo, flags);
if (typeof(DocumentObjectCollection).IsAssignableFrom(type))
return new DocumentObjectCollectionDescriptor(name, type, type, memberInfo, flags);
if (typeof(DocumentObject).IsAssignableFrom(type))
return new DocumentObjectDescriptor(name, type, type, memberInfo, flags);
Debug.Assert(false, type.FullName);
return null;
}
/// <summary> /// Adds a value descriptor for each field and property found in type to meta. /// </summary> static void AddValueDescriptors(Meta meta, Type type) { #if !NETFX_CORE FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); #else var fieldInfos = type.GetTypeInfo().DeclaredFields; #endif foreach (FieldInfo fieldInfo in fieldInfos) { #if DEBUG_ string name = fieldInfo.Name; if (name == "parent") { name.GetType(); } #endif DVAttribute[] dvs = (DVAttribute[])fieldInfo.GetCustomAttributes(typeof(DVAttribute), false); if (dvs.Length == 1) { ValueDescriptor vd = ValueDescriptor.CreateValueDescriptor(fieldInfo, dvs[0]); meta.ValueDescriptors.Add(vd); } } #if !NETFX_CORE PropertyInfo[] propInfos = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); #else var propInfos = type.GetTypeInfo().DeclaredProperties; #endif foreach (PropertyInfo propInfo in propInfos) { #if DEBUG_ string name = propInfo.Name; if (name == "Font") { name.GetType(); } #endif DVAttribute[] dvs = (DVAttribute[])propInfo.GetCustomAttributes(typeof(DVAttribute), false); if (dvs.Length == 1) { ValueDescriptor vd = ValueDescriptor.CreateValueDescriptor(propInfo, dvs[0]); meta.ValueDescriptors.Add(vd); } } }