using System; using System.Collections.Generic; using System.Reflection; using Torch.Utils; namespace Torch.Tests { public class ReflectionTestManager { #region FieldProvider public struct FieldRef { public FieldInfo Field; public FieldRef(FieldInfo f) { Field = f; } public override string ToString() { if (Field == null) return "Ignored"; return Field.DeclaringType?.FullName + "." + Field.Name; } } private readonly HashSet _getters = new HashSet(); private readonly HashSet _setters = new HashSet(); private readonly HashSet _invokers = new HashSet(); public ReflectionTestManager() { _getters.Add(new object[] { new FieldRef(null) }); _setters.Add(new object[] { new FieldRef(null) }); _invokers.Add(new object[] { new FieldRef(null) }); } public ReflectionTestManager Init(Assembly asm) { foreach (Type type in asm.GetTypes()) Init(type); return this; } public ReflectionTestManager Init(Type type) { foreach (FieldInfo field in type.GetFields(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) { if (field.GetCustomAttribute() != null) _invokers.Add(new object[] { new FieldRef(field) }); if (field.GetCustomAttribute() != null) _getters.Add(new object[] { new FieldRef(field) }); if (field.GetCustomAttribute() != null) _setters.Add(new object[] { new FieldRef(field) }); } return this; } public IEnumerable Getters => _getters; public IEnumerable Setters => _setters; public IEnumerable Invokers => _invokers; #endregion } }