public string runPhase3(IAnalysisArtifacts analysisArtifacts) { O2Cmd.log.write("\n\n***** PHASE 3 ***"); // setup expected target folders workflowFolder = analysisArtifacts.targetFolder; folderWithArtifacts_Phase2 = Path.Combine(workflowFolder, "Phase 2 - Artifacts"); folderWithArtifacts_Phase3 = Path.Combine(workflowFolder, "Phase 3 - Artifacts"); Files.checkIfDirectoryExistsAndCreateIfNot(folderWithArtifacts_Phase3); // create Phase 2 folder (if required) // check if required folders exist Assert.That(Directory.Exists(folderWithArtifacts_Phase2), "folderWithArtifacts_forPhase2 could not be found"); Assert.That(Directory.Exists(folderWithArtifacts_Phase3), "folderWithArtifacts_forPhase3 could not be found"); if (analysisArtifacts.phase_3.task1_handleKnownSinks) { task1_handleKnownSinks(); } if (analysisArtifacts.phase_3.task2_filterFindings) { var targetFolder = Path.Combine(folderWithArtifacts_Phase3, "Filtered_Findings"); Files.checkIfDirectoryExistsAndCreateIfNot(targetFolder); Files.deleteAllFilesFromDir(targetFolder); var allTraces_KnownSinks = XUtils_Analysis.getAllTraces_KnownSinks(folderWithArtifacts_Phase2); var allTraces_LostSinks = XUtils_Analysis.getAllTraces_LostSinks(folderWithArtifacts_Phase2); task2_filterFindings((KAnalysisArtifacts)analysisArtifacts, allTraces_KnownSinks, targetFolder, "Known Sinks"); task2_filterFindings((KAnalysisArtifacts)analysisArtifacts, allTraces_LostSinks, targetFolder, "Lost Sinks"); } if (analysisArtifacts.phase_3.task3_filter_FindingsWithNoTraces) { var allTraces_NoTraces = XUtils_Analysis.getAllTraces_NoTraces(folderWithArtifacts_Phase2); task3_filter_FindingsWithNoTraces(allTraces_NoTraces); } if (analysisArtifacts.phase_3.task4_CalculateStrutsFindings) { task4_CalculateStrutsFindings(); } O2Cmd.log.write("\n\n***** PHASE 3 COMPLETED ***"); return("Phase 3 completed"); }