private static void Analyze(Arguments arguments, Config configuration)
{
Console.WriteLine ("Parsing project at: " + arguments.Target);
Console.WriteLine ();
var stopwatch = Stopwatch.StartNew ();
Console.WriteLine ("Building ASTs..");
ParseResult parseResult = ParseTarget (arguments, configuration);
Console.WriteLine (" - AST build for " + parseResult.ParsedFiles.Count + " files (" + parseResult.FilesThatFailedToParse.Count + " failed)..");
Console.WriteLine ("Traversing ASTs..");
var filesCollection = new List<File> ();
foreach (var parsedFile in parseResult.ParsedFiles) {
ExtractFunctions (parsedFile);
}
/*Parallel.ForEach(parseResult.ParsedFiles,parsedFile =>
{
ExtractFunctions(parsedFile);
});*/
var bag = new ConcurrentBag<File> ();
Parallel.ForEach (parseResult.ParsedFiles, parsedFile => {
Console.WriteLine ("File: " + parsedFile.Key);
var file = BuildFileCFGAndExtractFileInformation (parsedFile);
bag.Add (file);
});
filesCollection.AddRange (bag);
Console.WriteLine ("Creating CTLLTL Model...");
File mainfile = filesCollection.Find (x => x.Name == arguments.Main);
IncludeResolver ir = new IncludeResolver (filesCollection);
var c = new CTLLTL ();
string p = Path.Combine (arguments.Result, "graph-ctl");
mainfile.CFG.VisualizeGraph (p, Configuration.GraphSettings);
c.makeModel ((QuickGraph.BidirectionalGraph<CFGBlock, QuickGraph.TaggedEdge<CFGBlock, EdgeTag>>)mainfile.CFG, ir, Path.Combine (arguments.Result, "model.smv"));
stopwatch.Stop ();
Console.WriteLine ("Time spent: " + stopwatch.Elapsed);
}