Beispiel #1
0
        private void CreateCompilationCommands(Utility.CompileCommandFileWriter fileWriter, EnvDTE.Project project, ref int projectsProcessed)
        {
            try
            {
                SolutionParser.SolutionParser solutionParser = new SolutionParser.SolutionParser(new VsPathResolver(_targetDir));

                solutionParser.CreateCompileCommands(
                    project, _configurationName, _platformName, _cStandard, _additionalClangOptions, _nonSystemIncludesUseAngleBrackets,
                    (CompileCommand command) => { fileWriter.PushCommand(command); }
                    );

                lock (_lockObject)
                {
                    projectsProcessed++;
                }

                float relativProgress = (float)projectsProcessed / (float)_projects.Count;
                Logging.Logging.LogInfo("Processing project \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "\"");
                backgroundWorker1.ReportProgress((int)(relativProgress * 100), "Processing project \"" + project.Name + "\"");
            }
            catch (Exception e)
            {
                Logging.Logging.LogError("Failed to create CDB for project with exception: " + e.Message);
                Logging.Logging.LogError("Stack Trace: " + e.StackTrace);
                throw;
            }
        }
Beispiel #2
0
        private void CreateCompilationDatabase()
        {
            File.WriteAllText(_targetDir + "\\" + _fileName + ".json", "");
            File.AppendAllText(_targetDir + "\\" + _fileName + ".json", "[\n");

            Utility.CompileCommandFileWriter fileWriter = new Utility.CompileCommandFileWriter(_fileName + ".json", _targetDir);
            fileWriter.StartWorking();

            try
            {
                Multitasking.LimitedThreadsTaskScheduler scheduler = new Multitasking.LimitedThreadsTaskScheduler(_threadCount);
                TaskFactory factory = new TaskFactory(scheduler);
                List <Task> tasks   = new List <Task>();

                int projectsProcessed = 0;
                foreach (EnvDTE.Project project in _projects.GetRange(0, _projects.Count))
                {
                    Logging.Logging.LogInfo("Scheduling project \"" + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(project.Name) + "\" for parsing.");

                    Task task = factory.StartNew(() =>
                    {
                        CreateCompilationCommands(fileWriter, project, ref projectsProcessed);
                    });

                    tasks.Add(task);
                }

                Task.WaitAll(tasks.ToArray());

                fileWriter.StopWorking();

                backgroundWorker1.ReportProgress(100, "Writing data to file. This might take several minutes...");
            }
            catch (Exception e)
            {
                Logging.Logging.LogError("Failed to create CDB for solution with exception: " + e.Message);
                Logging.Logging.LogError("Stack Trace: " + e.StackTrace);
            }
            finally
            {
                File.AppendAllText(_targetDir + "\\" + _fileName + ".json", "\n]");
            }
        }