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