internal static void InitializeBuildCallbacks()
        {
            buildPostProjectGeneratedProcessors = new List <IPostGenerateGradleAndroidProject>();

            foreach (var type in EditorAssemblies.GetAllTypesWithInterface <IPostGenerateGradleAndroidProject>())
            {
                if (type.IsAbstract || type.IsInterface)
                {
                    continue;
                }
                buildPostProjectGeneratedProcessors.Add(Activator.CreateInstance(type) as IPostGenerateGradleAndroidProject);
            }

            buildPostProjectGeneratedProcessors.Sort(BuildPipelineInterfaces.CompareICallbackOrder);
        }
        internal static void InitializeBuildCallbacks(BuildCallbacks findFlags)
        {
            if (findFlags == previousFlags)
            {
                return;
            }

            CleanupBuildCallbacks();
            previousFlags = findFlags;

            bool findBuildProcessors  = (findFlags & BuildCallbacks.BuildProcessors) == BuildCallbacks.BuildProcessors;
            bool findSceneProcessors  = (findFlags & BuildCallbacks.SceneProcessors) == BuildCallbacks.SceneProcessors;
            bool findTargetProcessors = (findFlags & BuildCallbacks.BuildTargetProcessors) == BuildCallbacks.BuildTargetProcessors;
            bool findFilterProcessors = (findFlags & BuildCallbacks.FilterAssembliesProcessors) == BuildCallbacks.FilterAssembliesProcessors;
            bool findShaderProcessors = (findFlags & BuildCallbacks.ShaderProcessors) == BuildCallbacks.ShaderProcessors;

            var postProcessBuildAttributeParams = new Type[] { typeof(BuildTarget), typeof(string) };

            foreach (var t in EditorAssemblies.GetAllTypesWithInterface <IOrderedCallback>())
            {
                if (t.IsAbstract || t.IsInterface)
                {
                    continue;
                }

                // Defer creating the instance until we actually add it to one of the lists
                object instance = null;

                if (findBuildProcessors)
                {
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.buildPreprocessors);
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.buildPreprocessorsWithReport);
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.buildPostprocessors);
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.buildPostprocessorsWithReport);
                }

                if (findSceneProcessors)
                {
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.sceneProcessors);
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.sceneProcessorsWithReport);
                }

                if (findTargetProcessors)
                {
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.buildTargetProcessors);
                }

                if (findFilterProcessors)
                {
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.filterBuildAssembliesProcessor);
                }

                if (findShaderProcessors)
                {
                    AddToListIfTypeImplementsInterface(t, ref instance, ref processors.shaderProcessors);
                }
            }

            if (findBuildProcessors)
            {
                foreach (var m in EditorAssemblies.GetAllMethodsWithAttribute <Callbacks.PostProcessBuildAttribute>())
                {
                    if (ValidateMethod <Callbacks.PostProcessBuildAttribute>(m, postProcessBuildAttributeParams))
                    {
                        AddToList(new AttributeCallbackWrapper(m), ref processors.buildPostprocessorsWithReport);
                    }
                }
            }

            if (findSceneProcessors)
            {
                foreach (var m in EditorAssemblies.GetAllMethodsWithAttribute <Callbacks.PostProcessSceneAttribute>())
                {
                    if (ValidateMethod <Callbacks.PostProcessSceneAttribute>(m, Type.EmptyTypes))
                    {
                        AddToList(new AttributeCallbackWrapper(m), ref processors.sceneProcessorsWithReport);
                    }
                }
            }

            if (processors.buildPreprocessors != null)
            {
                processors.buildPreprocessors.Sort(CompareICallbackOrder);
            }
            if (processors.buildPreprocessorsWithReport != null)
            {
                processors.buildPreprocessorsWithReport.Sort(CompareICallbackOrder);
            }
            if (processors.buildPostprocessors != null)
            {
                processors.buildPostprocessors.Sort(CompareICallbackOrder);
            }
            if (processors.buildPostprocessorsWithReport != null)
            {
                processors.buildPostprocessorsWithReport.Sort(CompareICallbackOrder);
            }
            if (processors.buildTargetProcessors != null)
            {
                processors.buildTargetProcessors.Sort(CompareICallbackOrder);
            }
            if (processors.sceneProcessors != null)
            {
                processors.sceneProcessors.Sort(CompareICallbackOrder);
            }
            if (processors.sceneProcessorsWithReport != null)
            {
                processors.sceneProcessorsWithReport.Sort(CompareICallbackOrder);
            }
            if (processors.filterBuildAssembliesProcessor != null)
            {
                processors.filterBuildAssembliesProcessor.Sort(CompareICallbackOrder);
            }
            if (processors.shaderProcessors != null)
            {
                processors.shaderProcessors.Sort(CompareICallbackOrder);
            }
        }
        internal static void InitializeBuildCallbacks(BuildCallbacks findFlags)
        {
            if (findFlags == previousFlags)
            {
                return;
            }

            CleanupBuildCallbacks();
            previousFlags = findFlags;

            bool findBuildProcessors             = (findFlags & BuildCallbacks.BuildProcessors) == BuildCallbacks.BuildProcessors;
            bool findSceneProcessors             = (findFlags & BuildCallbacks.SceneProcessors) == BuildCallbacks.SceneProcessors;
            bool findTargetProcessors            = (findFlags & BuildCallbacks.BuildTargetProcessors) == BuildCallbacks.BuildTargetProcessors;
            var  postProcessBuildAttributeParams = new Type[] { typeof(BuildTarget), typeof(string) };

            foreach (var t in EditorAssemblies.GetAllTypesWithInterface <IOrderedCallback>())
            {
                if (t.IsAbstract || t.IsInterface)
                {
                    continue;
                }
                object instance = null;
                if (findBuildProcessors)
                {
                    if (ValidateType <IPreprocessBuild>(t))
                    {
                        AddToList(instance = Activator.CreateInstance(t), ref buildPreprocessors);
                    }

                    if (ValidateType <IPostprocessBuild>(t))
                    {
                        AddToList(instance = instance == null ? Activator.CreateInstance(t) : instance, ref buildPostprocessors);
                    }
                }

                if (findSceneProcessors && ValidateType <IProcessScene>(t))
                {
                    AddToList(instance = instance == null ? Activator.CreateInstance(t) : instance, ref sceneProcessors);
                }

                if (findTargetProcessors && ValidateType <IActiveBuildTargetChanged>(t))
                {
                    AddToList(instance = instance == null ? Activator.CreateInstance(t) : instance, ref buildTargetProcessors);
                }
            }

            if (findBuildProcessors)
            {
                foreach (var m in EditorAssemblies.GetAllMethodsWithAttribute <Callbacks.PostProcessBuildAttribute>())
                {
                    if (ValidateMethod <Callbacks.PostProcessBuildAttribute>(m, postProcessBuildAttributeParams))
                    {
                        AddToList(new AttributeCallbackWrapper(m), ref buildPostprocessors);
                    }
                }
            }

            if (findSceneProcessors)
            {
                foreach (var m in EditorAssemblies.GetAllMethodsWithAttribute <Callbacks.PostProcessSceneAttribute>())
                {
                    if (ValidateMethod <Callbacks.PostProcessSceneAttribute>(m, Type.EmptyTypes))
                    {
                        AddToList(new AttributeCallbackWrapper(m), ref sceneProcessors);
                    }
                }
            }

            if (buildPreprocessors != null)
            {
                buildPreprocessors.Sort(CompareICallbackOrder);
            }
            if (buildPostprocessors != null)
            {
                buildPostprocessors.Sort(CompareICallbackOrder);
            }
            if (buildTargetProcessors != null)
            {
                buildTargetProcessors.Sort(CompareICallbackOrder);
            }
            if (sceneProcessors != null)
            {
                sceneProcessors.Sort(CompareICallbackOrder);
            }
        }
 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);
         }
     }
 }