diff --git a/app/MindWork AI Studio/Settings/ExpressionExtensions.cs b/app/MindWork AI Studio/Settings/ExpressionExtensions.cs new file mode 100644 index 00000000..582bf65c --- /dev/null +++ b/app/MindWork AI Studio/Settings/ExpressionExtensions.cs @@ -0,0 +1,26 @@ +using System.Linq.Expressions; + +namespace AIStudio.Settings; + +public static class ExpressionExtensions +{ + private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(typeof(ExpressionExtensions)); + + public static MemberExpression GetMemberExpression(this Expression> expression) + { + switch (expression.Body) + { + // Case for value types, which are wrapped in UnaryExpression: + case UnaryExpression { NodeType: ExpressionType.Convert } unaryExpression: + return (MemberExpression)unaryExpression.Operand; + + // Case for reference types, which are directly MemberExpressions: + case MemberExpression memberExpression: + return memberExpression; + + default: + LOGGER.LogError($"Expression '{expression}' is not a valid property expression."); + throw new ArgumentException($"Expression '{expression}' is not a valid property expression.", nameof(expression)); + } + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Settings/SettingsLocker.cs b/app/MindWork AI Studio/Settings/SettingsLocker.cs index b23e1085..e7da5c07 100644 --- a/app/MindWork AI Studio/Settings/SettingsLocker.cs +++ b/app/MindWork AI Studio/Settings/SettingsLocker.cs @@ -4,12 +4,11 @@ namespace AIStudio.Settings; public sealed class SettingsLocker { - private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(); private readonly Dictionary> lockedProperties = new(); public void Register(Expression> propertyExpression, Guid configurationPluginId) { - var memberExpression = GetMemberExpression(propertyExpression); + var memberExpression = propertyExpression.GetMemberExpression(); var className = typeof(T).Name; var propertyName = memberExpression.Member.Name; @@ -21,7 +20,7 @@ public sealed class SettingsLocker public void Remove(Expression> propertyExpression) { - var memberExpression = GetMemberExpression(propertyExpression); + var memberExpression = propertyExpression.GetMemberExpression(); var className = typeof(T).Name; var propertyName = memberExpression.Member.Name; @@ -38,7 +37,7 @@ public sealed class SettingsLocker public Guid GetConfigurationPluginId(Expression> propertyExpression) { - var memberExpression = GetMemberExpression(propertyExpression); + var memberExpression = propertyExpression.GetMemberExpression(); var className = typeof(T).Name; var propertyName = memberExpression.Member.Name; @@ -51,28 +50,10 @@ public sealed class SettingsLocker public bool IsLocked(Expression> propertyExpression) { - var memberExpression = GetMemberExpression(propertyExpression); + var memberExpression = propertyExpression.GetMemberExpression(); var className = typeof(T).Name; var propertyName = memberExpression.Member.Name; return this.lockedProperties.TryGetValue(className, out var props) && props.ContainsKey(propertyName); } - - private static MemberExpression GetMemberExpression(Expression> expression) - { - switch (expression.Body) - { - // Case for value types, which are wrapped in UnaryExpression: - case UnaryExpression { NodeType: ExpressionType.Convert } unaryExpression: - return (MemberExpression)unaryExpression.Operand; - - // Case for reference types, which are directly MemberExpressions: - case MemberExpression memberExpression: - return memberExpression; - - default: - LOGGER.LogError($"Expression '{expression}' is not a valid property expression."); - throw new ArgumentException($"Expression '{expression}' is not a valid property expression.", nameof(expression)); - } - } } \ No newline at end of file