diff --git a/src/UnityMvvmToolkit.Core/Internal/BindingContextMemberProvider.cs b/src/UnityMvvmToolkit.Core/Internal/BindingContextMemberProvider.cs index 399cec4..b12eaa3 100644 --- a/src/UnityMvvmToolkit.Core/Internal/BindingContextMemberProvider.cs +++ b/src/UnityMvvmToolkit.Core/Internal/BindingContextMemberProvider.cs @@ -4,6 +4,7 @@ using System.Runtime.CompilerServices; using UnityMvvmToolkit.Core.Attributes; using UnityMvvmToolkit.Core.Interfaces; +using UnityMvvmToolkit.Core.Internal.Extensions; using UnityMvvmToolkit.Core.Internal.Helpers; using UnityMvvmToolkit.Core.Internal.Interfaces; @@ -20,7 +21,7 @@ public void GetBindingContextMembers(Type bindingContextType, IDictionary + /// Gets all members from a given type, including members from all base types if the flag isn't set. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static MemberInfo[] GetAllMembers(this Type type, BindingFlags flags = BindingFlags.Default) + { + if ((flags & BindingFlags.DeclaredOnly) == BindingFlags.DeclaredOnly) + { + return type.GetMembers(flags); + } + + flags |= BindingFlags.DeclaredOnly; + + var currentType = type; + var members = new List(); + do + { + members.AddRange(currentType.GetMembers(flags)); + currentType = currentType.BaseType; + } + while (currentType != null); + + return members.ToArray(); + } + } +} \ No newline at end of file diff --git a/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/BindingContextMemberProvider.cs b/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/BindingContextMemberProvider.cs index 399cec4..b12eaa3 100644 --- a/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/BindingContextMemberProvider.cs +++ b/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/BindingContextMemberProvider.cs @@ -4,6 +4,7 @@ using System.Runtime.CompilerServices; using UnityMvvmToolkit.Core.Attributes; using UnityMvvmToolkit.Core.Interfaces; +using UnityMvvmToolkit.Core.Internal.Extensions; using UnityMvvmToolkit.Core.Internal.Helpers; using UnityMvvmToolkit.Core.Internal.Interfaces; @@ -20,7 +21,7 @@ public void GetBindingContextMembers(Type bindingContextType, IDictionary + /// Gets all members from a given type, including members from all base types if the flag isn't set. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static MemberInfo[] GetAllMembers(this Type type, BindingFlags flags = BindingFlags.Default) + { + if ((flags & BindingFlags.DeclaredOnly) == BindingFlags.DeclaredOnly) + { + return type.GetMembers(flags); + } + + flags |= BindingFlags.DeclaredOnly; + + var currentType = type; + var members = new List(); + do + { + members.AddRange(currentType.GetMembers(flags)); + currentType = currentType.BaseType; + } + while (currentType != null); + + return members.ToArray(); + } + } +} \ No newline at end of file diff --git a/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/Extensions/TypeExtensions.cs.meta b/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/Extensions/TypeExtensions.cs.meta new file mode 100644 index 0000000..be82141 --- /dev/null +++ b/src/UnityMvvmToolkit.UnityPackage/Assets/Plugins/UnityMvvmToolkit/Runtime/Core/Internal/Extensions/TypeExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a12e48ed7db07fc43847fbd9cd5c3ea5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: