Patcher.Data.Plugins.Content.MemberInfo.MemberInfo C# (CSharp) Method

MemberInfo() public method

public MemberInfo ( MemberAttribute attribute, PropertyInfo property ) : System
attribute MemberAttribute
property System.Reflection.PropertyInfo
return System
        public MemberInfo(MemberAttribute attribute, PropertyInfo property)
        {
            this.property = property;

            fieldNames = attribute.FieldNames;

            IsLazy = property.GetCustomAttributes(typeof(LazyAttribute), false).Length > 0;
            IsFakeFloat = property.GetCustomAttributes(typeof(FakeFloatAttribute), false).Length > 0;
            Initialize = property.GetCustomAttributes(typeof(InitializeAttribute), false).Length > 0;
            IsRequired = property.GetCustomAttributes(typeof(RequiredAttribute), false).Length > 0;

            var orderAttribute = (OrderAttribute)property.GetCustomAttributes(typeof(OrderAttribute), false).FirstOrDefault();
            if (orderAttribute != null)
            {
                Order = orderAttribute.Order;
            }

            var localizedStringAttribute = (LocalizedStringAttribute)property.GetCustomAttributes(typeof(LocalizedStringAttribute), false).FirstOrDefault();
            if (localizedStringAttribute != null)
            {
                localizedStringGroup = localizedStringAttribute.LocalizedStringGroup;
            }

            var referenceAttribute = (ReferenceAttribute)property.GetCustomAttributes(typeof(ReferenceAttribute), false).FirstOrDefault();
            if (referenceAttribute != null)
            {
                IsReference = true;
                ReferencedFormKinds = referenceAttribute.ReferenceFormKinds;
            }

            if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
            {
                fieldType = property.PropertyType.GetGenericArguments()[0];
                IsListType = true;

                addValueToListMethod = typeof(ICollection<>).MakeGenericType(property.PropertyType.GetGenericArguments()).GetMethod("Add");
                createListCtor = typeof(List<>).MakeGenericType(property.PropertyType.GetGenericArguments()).GetConstructor(paramlessTypes);
            }
            else if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
            {
                fieldType = property.PropertyType.GetGenericArguments()[0];
                IsNullableType = true;
            }
            else
            {
                fieldType = property.PropertyType;
                IsListType = false;
            }

            IsPrimitiveType = !typeof(Field).IsAssignableFrom(fieldType);

            // Field is dynamic if any of its field names contains a .
            IsDynamic = fieldNames.Where(n => n.Contains('.')).Any();

            if (IsDynamic)
            {
                // Replace . with (.|\n) to cover also new line
                var pattern = string.Join("|", fieldNames).Replace(".", "(.|\n)");
                DynamicArrayRegex = new Regex(pattern);
            }

            //Enums treat enums as if the where the underlaying primitive type.
            if (fieldType.IsEnum)
            {
                fieldType = fieldType.GetEnumUnderlyingType();
            }
        }