SettingsCompiler.SettingsCompiler.ReflectType C# (CSharp) Method

ReflectType() static private method

static private ReflectType ( Type settingsType, List settings, List enumTypes, string group ) : void
settingsType System.Type
settings List
enumTypes List
group string
return void
        static void ReflectType(Type settingsType, List<Setting> settings, List<Type> enumTypes,
                                string group)
        {
            object settingsInstance = Activator.CreateInstance(settingsType);

            BindingFlags flags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
            FieldInfo[] fields = settingsType.GetFields(flags);
            foreach(FieldInfo field in fields)
            {
                foreach(Setting setting in settings)
                    if(setting.Name == field.Name)
                        throw new Exception(string.Format("Duplicate setting \"{0}\" detected", setting.Name));

                Type fieldType = field.FieldType;
                object fieldValue = field.GetValue(settingsInstance);
                if(fieldType == typeof(float))
                    settings.Add(new FloatSetting((float)fieldValue, field, group));
                else if(fieldType == typeof(int))
                    settings.Add(new IntSetting((int)fieldValue, field, group));
                else if(fieldType == typeof(bool))
                    settings.Add(new BoolSetting((bool)fieldValue, field, group));
                else if(fieldType.IsEnum)
                {
                    if(enumTypes.Contains(fieldType) == false)
                        enumTypes.Add(fieldType);
                    settings.Add(new EnumSetting(fieldValue, field, fieldType, group));
                }
                else if(fieldType == typeof(Direction))
                    settings.Add(new DirectionSetting((Direction)fieldValue, field, group));
                else if(fieldType == typeof(Orientation))
                    settings.Add(new OrientationSetting((Orientation)fieldValue, field, group));
                else if(fieldType == typeof(Color))
                    settings.Add(new ColorSetting((Color)fieldValue, field, group));
                else
                    throw new Exception("Invalid type for setting " + field.Name);
            }
        }