Beispiel #1
0
        private static void StartAnalysis()
        {
            IEnumerable<string> appsToAnalyze;
            if (bool.Parse(ConfigurationManager.AppSettings["OnlyAnalyzeSubsetApps"]))
            {
                appsToAnalyze = File.ReadAllLines(SubsetApps).Select(appName => CodeCorpusPath + appName);
            }
            else
            {
                appsToAnalyze = Directory.GetDirectories(CodeCorpusPath)
                    .Where(a => a.Split('\\').Last() == "src");
            }

            using (var context = new CodeAnalysisResults())
            {
                foreach (var appPath in appsToAnalyze)
                {
                    string appName = appPath.Split('\\').Last();

                    var app = context.AppResults.Include(a => a.Projects)
                        .SingleOrDefault(a => a.Name == appName);

                    if (app == null)
                    {
                        app = new App()
                        {
                            Name = appName,
                            Path = appPath,
                            Projects = new List<Project>(),
                            CompletedAnalyses = AnalysisType.None
                        };

                        context.AppResults.Add(app);
                    }

                    var unCompleted = AnalysisTypes.Where(a => (app.CompletedAnalyses & a) != a).ToList();

                    if (unCompleted.Any())
                    {
                        Logs.Console.Info("Analyzing {0}", appPath);
                        AnalyzeApp(context, app, unCompleted);
                    }
                    else
                    {
                        Logs.Console.Info("Already Analyzed {0}", appPath);
                    }


                    context.SaveChanges();
                }

            }
        }
Beispiel #2
0
        private static void AnalyzeApp(CodeAnalysisResults context, App app, List<AnalysisType> analyses)
        {
            var projectPaths = from f in Directory.GetFiles(app.Path, "*.csproj", SearchOption.AllDirectories)
                               let directoryName = Path.GetDirectoryName(f)
                               where !directoryName.Contains(@"\tags") &&
                                     !directoryName.Contains(@"\branches")
                               select f;

            foreach (var projectPath in projectPaths)
            {
                string[] separator = new string[] { ".csproj" };
                string name = projectPath.Split('\\').Last().Split(separator, StringSplitOptions.None).First();

                Project project = app.Projects.SingleOrDefault(a => a.Path == projectPath);

                if (project == null)
                {
                    project = new Project()
                    {
                        Name = projectPath.Split('\\').Last().Split(separator, StringSplitOptions.None).First(),
                        Path = projectPath,
                        AnalysisResults = new List<AnalysisResult>()
                    };
                    app.Projects.Add(project);
                }
                else
                {
                    context.Entry(project).Collection(a => a.AnalysisResults).Load();
                }

                AnalyzeProject(project, analyses);
            }

            foreach (var analysisType in analyses)
            {
                app.CompletedAnalyses |= analysisType;
            }
        }