| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | using System;using System.Collections.Generic;using System.Linq;using System.Reflection;namespace AssetBundleBrowser.AssetBundleDataSource{    internal class ABDataSourceProviderUtility {        private static List<Type> s_customNodes;        internal static List<Type> CustomABDataSourceTypes {            get {                if(s_customNodes == null) {                    s_customNodes = BuildCustomABDataSourceList();                }                return s_customNodes;            }        }        private static List<Type> BuildCustomABDataSourceList()        {            var properList = new List<Type>();            properList.Add(null); //empty spot for "default"             var x = AppDomain.CurrentDomain.GetAssemblies();            foreach (var assembly in x)            {                try                {                    var list = new List<Type>(                        assembly                        .GetTypes()                        .Where(t => t != typeof(ABDataSource))                        .Where(t => typeof(ABDataSource).IsAssignableFrom(t)));                    for (int count = 0; count < list.Count; count++)                    {                        if (list[count].Name == "AssetDatabaseABDataSource")                            properList[0] = list[count];                        else if (list[count] != null)                            properList.Add(list[count]);                    }                }                catch (System.Exception)                {                    //assembly which raises exception on the GetTypes() call - ignore it                }            }            return properList;        }    }}
 |