| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using UnityEngine;using UnityEngine.Assertions;namespace XCharts.Runtime{    public static class RuntimeUtil    {        public static bool HasSubclass(Type type)        {            var typeMap = GetAllTypesDerivedFrom(type);            foreach (var t in typeMap)            {                return true;            }            return false;        }        public static IEnumerable<Type> GetAllTypesDerivedFrom<T>()        {#if UNITY_EDITOR && UNITY_2019_2_OR_NEWER            return UnityEditor.TypeCache.GetTypesDerivedFrom<T>();#else            return GetAllAssemblyTypes().Where(t => t.IsSubclassOf(typeof(T)));#endif        }        public static IEnumerable<Type> GetAllTypesDerivedFrom(Type type)        {#if UNITY_EDITOR && UNITY_2019_2_OR_NEWER            return UnityEditor.TypeCache.GetTypesDerivedFrom(type);#else            return GetAllAssemblyTypes().Where(t => t.IsSubclassOf(type));#endif        }        static IEnumerable<Type> m_AssemblyTypes;        public static IEnumerable<Type> GetAllAssemblyTypes()        {            if (m_AssemblyTypes == null)            {                m_AssemblyTypes = AppDomain.CurrentDomain.GetAssemblies()                    .SelectMany(t =>                    {                        var innerTypes = new Type[0];                        try                        {                            innerTypes = t.GetTypes();                        }                        catch { }                        return innerTypes;                    });            }            return m_AssemblyTypes;        }        public static T GetAttribute<T>(this Type type, bool check = true) where T : Attribute        {            if (type.IsDefined(typeof(T), false))                return (T) type.GetCustomAttributes(typeof(T), false) [0];            else            {                if (check)                    Assert.IsTrue(false, "Attribute not found:" + type.Name);                return null;            }        }        public static T GetAttribute<T>(this MemberInfo type, bool check = true) where T : Attribute        {            if (type.IsDefined(typeof(T), false))                return (T) type.GetCustomAttributes(typeof(T), false) [0];            else            {                if (check)                    Assert.IsTrue(false, "Attribute not found:" + type.Name);                return null;            }        }            }}
 |