예제 #1
0
        public void Audit(ProjectReport projectReport, IProgressBar progressBar = null)
        {
            var userAssemblies = GetPlayerAssemblies();

            if (userAssemblies.Count > 0)
            {
                m_AssemblyResolver = new DefaultAssemblyResolver();
#if UNITY_2019_1_OR_NEWER
                List <string> assemblyPaths = new List <string>();
                assemblyPaths.AddRange(CompilationPipeline.GetPrecompiledAssemblyPaths(CompilationPipeline.PrecompiledAssemblySources
                                                                                       .UserAssembly));
                assemblyPaths.AddRange(CompilationPipeline.GetPrecompiledAssemblyPaths(CompilationPipeline.PrecompiledAssemblySources
                                                                                       .UnityEngine));
                foreach (var dir in assemblyPaths.Select(path => Path.GetDirectoryName(path)).Distinct())
                {
                    m_AssemblyResolver.AddSearchDirectory(dir);
                }
#else
                m_AssemblyResolver.AddSearchDirectory(Path.Combine(EditorApplication.applicationContentsPath, "Managed", "UnityEngine"));
#endif
                m_AssemblyResolver.AddSearchDirectory(Path.Combine(EditorApplication.applicationContentsPath, "UnityExtensions", "Unity", "GUISystem"));

                foreach (var dir in userAssemblies.Select(path => Path.GetDirectoryName(path)).Distinct())
                {
                    m_AssemblyResolver.AddSearchDirectory(dir);
                }

                var callCrawler = new CallCrawler();

                if (progressBar != null)
                {
                    progressBar.Initialize("Analyzing Scripts", "Analyzing project scripts", m_PlayerAssemblies.Length);
                }

                // Analyse all Player assemblies, including Package assemblies.
                foreach (var assemblyPath in userAssemblies)
                {
                    if (progressBar != null)
                    {
                        progressBar.AdvanceProgressBar(string.Format("Analyzing {0} scripts", Path.GetFileName(assemblyPath)));
                    }

                    if (!File.Exists(assemblyPath))
                    {
                        Debug.LogError(assemblyPath + " not found.");
                        continue;
                    }

                    AnalyzeAssembly(assemblyPath, projectReport, callCrawler);
                }

                if (progressBar != null)
                {
                    progressBar.ClearProgressBar();
                }

                callCrawler.BuildCallHierarchies(projectReport, progressBar);
            }
        }
예제 #2
0
        public void Audit(ProjectReport projectReport, IProgressBar progressBar = null)
        {
            if (!AssemblyHelper.CompileAssemblies())
            {
                return;
            }

            var callCrawler = new CallCrawler();

            using (var assemblyResolver = new DefaultAssemblyResolver())
            {
                var compiledAssemblyPaths = AssemblyHelper.GetCompiledAssemblyPaths();

                foreach (var dir in AssemblyHelper.GetPrecompiledAssemblyDirectories())
                {
                    assemblyResolver.AddSearchDirectory(dir);
                }

                foreach (var dir in AssemblyHelper.GetPrecompiledEngineAssemblyDirectories())
                {
                    assemblyResolver.AddSearchDirectory(dir);
                }

                foreach (var dir in AssemblyHelper.GetCompiledAssemblyDirectories())
                {
                    assemblyResolver.AddSearchDirectory(dir);
                }

                if (progressBar != null)
                {
                    progressBar.Initialize("Analyzing Scripts", "Analyzing project scripts", m_PlayerAssemblies.Length);
                }

                // Analyse all Player assemblies, including Package assemblies.
                foreach (var assemblyPath in compiledAssemblyPaths)
                {
                    if (progressBar != null)
                    {
                        progressBar.AdvanceProgressBar(string.Format("Analyzing {0} scripts", Path.GetFileName(assemblyPath)));
                    }

                    if (!File.Exists(assemblyPath))
                    {
                        Debug.LogError(assemblyPath + " not found.");
                        continue;
                    }

                    AnalyzeAssembly(assemblyPath, assemblyResolver, projectReport, callCrawler);
                }
            }

            if (progressBar != null)
            {
                progressBar.ClearProgressBar();
            }

            callCrawler.BuildCallHierarchies(projectReport, progressBar);
        }