internal static void CleanupBuildCallbacks()
 {
     BuildPipelineInterfaces.buildTargetProcessors = null;
     BuildPipelineInterfaces.buildPreprocessors    = null;
     BuildPipelineInterfaces.buildPostprocessors   = null;
     BuildPipelineInterfaces.sceneProcessors       = null;
     BuildPipelineInterfaces.previousFlags         = BuildPipelineInterfaces.BuildCallbacks.None;
 }
        internal static void InitializeBuildCallbacks(BuildPipelineInterfaces.BuildCallbacks findFlags)
        {
            BuildPipelineInterfaces.CleanupBuildCallbacks();
            HashSet <string> hashSet = new HashSet <string>();

            hashSet.Add("UnityEditor");
            hashSet.Add("UnityEngine.UI");
            hashSet.Add("Unity.PackageManager");
            hashSet.Add("UnityEngine.Networking");
            hashSet.Add("nunit.framework");
            hashSet.Add("UnityEditor.TreeEditor");
            hashSet.Add("UnityEditor.Graphs");
            hashSet.Add("UnityEditor.UI");
            hashSet.Add("UnityEditor.TestRunner");
            hashSet.Add("UnityEngine.TestRunner");
            hashSet.Add("UnityEngine.HoloLens");
            hashSet.Add("SyntaxTree.VisualStudio.Unity.Bridge");
            hashSet.Add("UnityEditor.Android.Extensions");
            bool         flag        = (findFlags & BuildPipelineInterfaces.BuildCallbacks.BuildProcessors) == BuildPipelineInterfaces.BuildCallbacks.BuildProcessors;
            bool         flag2       = (findFlags & BuildPipelineInterfaces.BuildCallbacks.SceneProcessors) == BuildPipelineInterfaces.BuildCallbacks.SceneProcessors;
            bool         flag3       = (findFlags & BuildPipelineInterfaces.BuildCallbacks.BuildTargetProcessors) == BuildPipelineInterfaces.BuildCallbacks.BuildTargetProcessors;
            BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

            Type[] expectedArguments = new Type[]
            {
                typeof(BuildTarget),
                typeof(string)
            };
            for (int i = 0; i < EditorAssemblies.loadedAssemblies.Length; i++)
            {
                Assembly assembly = EditorAssemblies.loadedAssemblies[i];
                bool     flag4    = !hashSet.Contains(assembly.FullName.Substring(0, assembly.FullName.IndexOf(',')));
                Type[]   array    = null;
                try
                {
                    array = assembly.GetTypes();
                }
                catch (ReflectionTypeLoadException ex)
                {
                    array = ex.Types;
                }
                for (int j = 0; j < array.Length; j++)
                {
                    Type type = array[j];
                    if (type != null)
                    {
                        object obj   = null;
                        bool   flag5 = false;
                        if (flag)
                        {
                            flag5 = typeof(IOrderedCallback).IsAssignableFrom(type);
                            if (flag5)
                            {
                                if (BuildPipelineInterfaces.ValidateType <IPreprocessBuild>(type))
                                {
                                    obj = Activator.CreateInstance(type);
                                    BuildPipelineInterfaces.AddToList <IPreprocessBuild>(obj, ref BuildPipelineInterfaces.buildPreprocessors);
                                }
                                if (BuildPipelineInterfaces.ValidateType <IPostprocessBuild>(type))
                                {
                                    obj = ((obj != null) ? obj : Activator.CreateInstance(type));
                                    BuildPipelineInterfaces.AddToList <IPostprocessBuild>(obj, ref BuildPipelineInterfaces.buildPostprocessors);
                                }
                            }
                        }
                        if (flag2)
                        {
                            if (!flag || flag5)
                            {
                                if (BuildPipelineInterfaces.ValidateType <IProcessScene>(type))
                                {
                                    obj = ((obj != null) ? obj : Activator.CreateInstance(type));
                                    BuildPipelineInterfaces.AddToList <IProcessScene>(obj, ref BuildPipelineInterfaces.sceneProcessors);
                                }
                            }
                        }
                        if (flag3)
                        {
                            if (!flag || flag5)
                            {
                                if (BuildPipelineInterfaces.ValidateType <IActiveBuildTargetChanged>(type))
                                {
                                    obj = ((obj != null) ? obj : Activator.CreateInstance(type));
                                    BuildPipelineInterfaces.AddToList <IActiveBuildTargetChanged>(obj, ref BuildPipelineInterfaces.buildTargetProcessors);
                                }
                            }
                        }
                        if (flag4)
                        {
                            MethodInfo[] methods = type.GetMethods(bindingAttr);
                            for (int k = 0; k < methods.Length; k++)
                            {
                                MethodInfo methodInfo = methods[k];
                                if (!methodInfo.IsSpecialName)
                                {
                                    if (flag && BuildPipelineInterfaces.ValidateMethod <PostProcessBuildAttribute>(methodInfo, expectedArguments))
                                    {
                                        BuildPipelineInterfaces.AddToList <IPostprocessBuild>(new BuildPipelineInterfaces.AttributeCallbackWrapper(methodInfo), ref BuildPipelineInterfaces.buildPostprocessors);
                                    }
                                    if (flag2 && BuildPipelineInterfaces.ValidateMethod <PostProcessSceneAttribute>(methodInfo, Type.EmptyTypes))
                                    {
                                        BuildPipelineInterfaces.AddToList <IProcessScene>(new BuildPipelineInterfaces.AttributeCallbackWrapper(methodInfo), ref BuildPipelineInterfaces.sceneProcessors);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            if (BuildPipelineInterfaces.buildPreprocessors != null)
            {
                List <IPreprocessBuild> arg_356_0 = BuildPipelineInterfaces.buildPreprocessors;
                if (BuildPipelineInterfaces.< > f__mg$cache0 == null)
                {
                    BuildPipelineInterfaces.< > f__mg$cache0 = new Comparison <IPreprocessBuild>(BuildPipelineInterfaces.CompareICallbackOrder);
                }
                arg_356_0.Sort(BuildPipelineInterfaces.< > f__mg$cache0);
            }
            if (BuildPipelineInterfaces.buildPostprocessors != null)
            {
                List <IPostprocessBuild> arg_387_0 = BuildPipelineInterfaces.buildPostprocessors;
                if (BuildPipelineInterfaces.< > f__mg$cache1 == null)
                {
                    BuildPipelineInterfaces.< > f__mg$cache1 = new Comparison <IPostprocessBuild>(BuildPipelineInterfaces.CompareICallbackOrder);
                }
                arg_387_0.Sort(BuildPipelineInterfaces.< > f__mg$cache1);
            }
            if (BuildPipelineInterfaces.buildTargetProcessors != null)
            {
                List <IActiveBuildTargetChanged> arg_3B8_0 = BuildPipelineInterfaces.buildTargetProcessors;
                if (BuildPipelineInterfaces.< > f__mg$cache2 == null)
                {
                    BuildPipelineInterfaces.< > f__mg$cache2 = new Comparison <IActiveBuildTargetChanged>(BuildPipelineInterfaces.CompareICallbackOrder);
                }
                arg_3B8_0.Sort(BuildPipelineInterfaces.< > f__mg$cache2);
            }
            if (BuildPipelineInterfaces.sceneProcessors != null)
            {
                List <IProcessScene> arg_3E9_0 = BuildPipelineInterfaces.sceneProcessors;
                if (BuildPipelineInterfaces.< > f__mg$cache3 == null)
                {
                    BuildPipelineInterfaces.< > f__mg$cache3 = new Comparison <IProcessScene>(BuildPipelineInterfaces.CompareICallbackOrder);
                }
                arg_3E9_0.Sort(BuildPipelineInterfaces.< > f__mg$cache3);
            }
        }
 internal static void InitializeBuildCallbacks(BuildPipelineInterfaces.BuildCallbacks findFlags)
 {
     if (findFlags != BuildPipelineInterfaces.previousFlags)
     {
         BuildPipelineInterfaces.previousFlags = findFlags;
         BuildPipelineInterfaces.CleanupBuildCallbacks();
         bool   flag              = (findFlags & BuildPipelineInterfaces.BuildCallbacks.BuildProcessors) == BuildPipelineInterfaces.BuildCallbacks.BuildProcessors;
         bool   flag2             = (findFlags & BuildPipelineInterfaces.BuildCallbacks.SceneProcessors) == BuildPipelineInterfaces.BuildCallbacks.SceneProcessors;
         bool   flag3             = (findFlags & BuildPipelineInterfaces.BuildCallbacks.BuildTargetProcessors) == BuildPipelineInterfaces.BuildCallbacks.BuildTargetProcessors;
         Type[] expectedArguments = new Type[]
         {
             typeof(BuildTarget),
             typeof(string)
         };
         foreach (Type current in EditorAssemblies.GetAllTypesWithInterface <IOrderedCallback>())
         {
             if (!current.IsAbstract && !current.IsInterface)
             {
                 object obj = null;
                 if (flag)
                 {
                     if (BuildPipelineInterfaces.ValidateType <IPreprocessBuild>(current))
                     {
                         BuildPipelineInterfaces.AddToList <IPreprocessBuild>(obj = Activator.CreateInstance(current), ref BuildPipelineInterfaces.buildPreprocessors);
                     }
                     if (BuildPipelineInterfaces.ValidateType <IPostprocessBuild>(current))
                     {
                         BuildPipelineInterfaces.AddToList <IPostprocessBuild>(obj = ((obj != null) ? obj : Activator.CreateInstance(current)), ref BuildPipelineInterfaces.buildPostprocessors);
                     }
                 }
                 if (flag2 && BuildPipelineInterfaces.ValidateType <IProcessScene>(current))
                 {
                     BuildPipelineInterfaces.AddToList <IProcessScene>(obj = ((obj != null) ? obj : Activator.CreateInstance(current)), ref BuildPipelineInterfaces.sceneProcessors);
                 }
                 if (flag3 && BuildPipelineInterfaces.ValidateType <IActiveBuildTargetChanged>(current))
                 {
                     BuildPipelineInterfaces.AddToList <IActiveBuildTargetChanged>((obj != null) ? obj : Activator.CreateInstance(current), ref BuildPipelineInterfaces.buildTargetProcessors);
                 }
             }
         }
         if (flag)
         {
             foreach (MethodInfo current2 in EditorAssemblies.GetAllMethodsWithAttribute <PostProcessBuildAttribute>(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
             {
                 if (BuildPipelineInterfaces.ValidateMethod <PostProcessBuildAttribute>(current2, expectedArguments))
                 {
                     BuildPipelineInterfaces.AddToList <IPostprocessBuild>(new BuildPipelineInterfaces.AttributeCallbackWrapper(current2), ref BuildPipelineInterfaces.buildPostprocessors);
                 }
             }
         }
         if (flag2)
         {
             foreach (MethodInfo current3 in EditorAssemblies.GetAllMethodsWithAttribute <PostProcessSceneAttribute>(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
             {
                 if (BuildPipelineInterfaces.ValidateMethod <PostProcessSceneAttribute>(current3, Type.EmptyTypes))
                 {
                     BuildPipelineInterfaces.AddToList <IProcessScene>(new BuildPipelineInterfaces.AttributeCallbackWrapper(current3), ref BuildPipelineInterfaces.sceneProcessors);
                 }
             }
         }
         if (BuildPipelineInterfaces.buildPreprocessors != null)
         {
             List <IPreprocessBuild> arg_263_0 = BuildPipelineInterfaces.buildPreprocessors;
             if (BuildPipelineInterfaces.< > f__mg$cache0 == null)
             {
                 BuildPipelineInterfaces.< > f__mg$cache0 = new Comparison <IPreprocessBuild>(BuildPipelineInterfaces.CompareICallbackOrder);
             }
             arg_263_0.Sort(BuildPipelineInterfaces.< > f__mg$cache0);
         }
         if (BuildPipelineInterfaces.buildPostprocessors != null)
         {
             List <IPostprocessBuild> arg_294_0 = BuildPipelineInterfaces.buildPostprocessors;
             if (BuildPipelineInterfaces.< > f__mg$cache1 == null)
             {
                 BuildPipelineInterfaces.< > f__mg$cache1 = new Comparison <IPostprocessBuild>(BuildPipelineInterfaces.CompareICallbackOrder);
             }
             arg_294_0.Sort(BuildPipelineInterfaces.< > f__mg$cache1);
         }
         if (BuildPipelineInterfaces.buildTargetProcessors != null)
         {
             List <IActiveBuildTargetChanged> arg_2C5_0 = BuildPipelineInterfaces.buildTargetProcessors;
             if (BuildPipelineInterfaces.< > f__mg$cache2 == null)
             {
                 BuildPipelineInterfaces.< > f__mg$cache2 = new Comparison <IActiveBuildTargetChanged>(BuildPipelineInterfaces.CompareICallbackOrder);
             }
             arg_2C5_0.Sort(BuildPipelineInterfaces.< > f__mg$cache2);
         }
         if (BuildPipelineInterfaces.sceneProcessors != null)
         {
             List <IProcessScene> arg_2F6_0 = BuildPipelineInterfaces.sceneProcessors;
             if (BuildPipelineInterfaces.< > f__mg$cache3 == null)
             {
                 BuildPipelineInterfaces.< > f__mg$cache3 = new Comparison <IProcessScene>(BuildPipelineInterfaces.CompareICallbackOrder);
             }
             arg_2F6_0.Sort(BuildPipelineInterfaces.< > f__mg$cache3);
         }
     }
 }