From c0a547c58f121ec4cb94d12822a74ad4997a213c Mon Sep 17 00:00:00 2001 From: Govorunb Date: Wed, 8 Nov 2023 05:53:08 +1100 Subject: [PATCH] Allow short member names for static resolvers Removes the need to fully qualify the name of the static member if it's being referenced from a property under the exact same type --- Editor/Resolvers/StaticFieldValueResolver.cs | 24 ++++++++++++------- Editor/Resolvers/StaticMethodValueResolver.cs | 22 ++++++++++------- .../Resolvers/StaticPropertyValueResolver.cs | 24 ++++++++++++------- 3 files changed, 44 insertions(+), 26 deletions(-) diff --git a/Editor/Resolvers/StaticFieldValueResolver.cs b/Editor/Resolvers/StaticFieldValueResolver.cs index c937a172..f6c84fb4 100644 --- a/Editor/Resolvers/StaticFieldValueResolver.cs +++ b/Editor/Resolvers/StaticFieldValueResolver.cs @@ -12,17 +12,23 @@ public class StaticFieldValueResolver : ValueResolver public static bool TryResolve(TriPropertyDefinition propertyDefinition, string expression, out ValueResolver resolver) { - if (expression.IndexOf('.') == -1) - { - resolver = null; - return false; - } + var type = propertyDefinition.OwnerType; + var fieldName = expression; var separatorIndex = expression.LastIndexOf('.'); - var className = expression.Substring(0, separatorIndex); - var methodName = expression.Substring(separatorIndex + 1); + if (separatorIndex >= 0) + { + var className = expression.Substring(0, separatorIndex); + fieldName = expression.Substring(separatorIndex + 1); + + if (!TriReflectionUtilities.TryFindTypeByFullName(className, out type)) + { + resolver = null; + return false; + } + } - if (!TriReflectionUtilities.TryFindTypeByFullName(className, out var type)) + if (type == null) { resolver = null; return false; @@ -32,7 +38,7 @@ public static bool TryResolve(TriPropertyDefinition propertyDefinition, string e foreach (var fieldInfo in type.GetFields(flags)) { - if (fieldInfo.Name == methodName && + if (fieldInfo.Name == fieldName && typeof(T).IsAssignableFrom(fieldInfo.FieldType)) { resolver = new StaticFieldValueResolver(fieldInfo); diff --git a/Editor/Resolvers/StaticMethodValueResolver.cs b/Editor/Resolvers/StaticMethodValueResolver.cs index 33e3a6cf..da87b0ce 100644 --- a/Editor/Resolvers/StaticMethodValueResolver.cs +++ b/Editor/Resolvers/StaticMethodValueResolver.cs @@ -12,17 +12,23 @@ public class StaticMethodValueResolver : ValueResolver public static bool TryResolve(TriPropertyDefinition propertyDefinition, string expression, out ValueResolver resolver) { - if (expression.IndexOf('.') == -1) + var type = propertyDefinition.OwnerType; + var methodName = expression; + + var separatorIndex = expression.LastIndexOf('.'); + if (separatorIndex >= 0) { - resolver = null; - return false; - } + var className = expression.Substring(0, separatorIndex); + methodName = expression.Substring(separatorIndex + 1); - var separatorIndex = expression.LastIndexOf('.'); - var className = expression.Substring(0, separatorIndex); - var methodName = expression.Substring(separatorIndex + 1); + if (!TriReflectionUtilities.TryFindTypeByFullName(className, out type)) + { + resolver = null; + return false; + } + } - if (!TriReflectionUtilities.TryFindTypeByFullName(className, out var type)) + if (type == null) { resolver = null; return false; diff --git a/Editor/Resolvers/StaticPropertyValueResolver.cs b/Editor/Resolvers/StaticPropertyValueResolver.cs index bf130efa..3a3785e5 100644 --- a/Editor/Resolvers/StaticPropertyValueResolver.cs +++ b/Editor/Resolvers/StaticPropertyValueResolver.cs @@ -12,17 +12,23 @@ public class StaticPropertyValueResolver : ValueResolver public static bool TryResolve(TriPropertyDefinition propertyDefinition, string expression, out ValueResolver resolver) { - if (expression.IndexOf('.') == -1) + var type = propertyDefinition.OwnerType; + var propertyName = expression; + + var separatorIndex = expression.LastIndexOf('.'); + if (separatorIndex >= 0) { - resolver = null; - return false; - } + var className = expression.Substring(0, separatorIndex); + propertyName = expression.Substring(separatorIndex + 1); - var separatorIndex = expression.LastIndexOf('.'); - var className = expression.Substring(0, separatorIndex); - var methodName = expression.Substring(separatorIndex + 1); + if (!TriReflectionUtilities.TryFindTypeByFullName(className, out type)) + { + resolver = null; + return false; + } + } - if (!TriReflectionUtilities.TryFindTypeByFullName(className, out var type)) + if (type == null) { resolver = null; return false; @@ -32,7 +38,7 @@ public static bool TryResolve(TriPropertyDefinition propertyDefinition, string e foreach (var propertyInfo in type.GetProperties(flags)) { - if (propertyInfo.Name == methodName && + if (propertyInfo.Name == propertyName && typeof(T).IsAssignableFrom(propertyInfo.PropertyType) && propertyInfo.CanRead) {