protected IAnalyzerFactory GetAnalyzerFactory(ITypeDefinition typeToAnalyze, string engine, CancellationToken cancellationToken) { var workingDir = new DirectoryInfo(ConfigurationManager.AppSettings["WorkingDir"]); if (workingDir.Exists && workingDir.CreationTimeUtc < DateTime.UtcNow.AddDays(-3)) { workingDir.Delete(true); } workingDir.Create(); var queryGenerator = new CciQueryGenerator(); IAnalyzerFactory analyzerFactory; switch (engine) { case "CodeContracts": var codeContracts = Environment.GetEnvironmentVariable("CodeContractsInstallDir"); if (string.IsNullOrEmpty(codeContracts)) { var msg = new StringBuilder(); msg.AppendLine("The environment variable %CodeContractsInstallDir% does not exist."); msg.AppendLine("Please make sure that Code Contracts is installed correctly."); msg.AppendLine("This might be because the system was not restarted after Code Contracts installation."); throw new DirectoryNotFoundException(msg.ToString()); } var cccheckArgs = ConfigurationManager.AppSettings["CccheckArgs"]; Contract.Assert(cccheckArgs != null); var cccheck = new FileInfo(ConfigurationManager.AppSettings["CccheckFullName"]); Contract.Assert(cccheck.Exists); analyzerFactory = new CodeContractsAnalyzerFactory(workingDir, cccheckArgs, string.Empty, queryGenerator, inputAssembly as CciAssembly, inputFile.FullName, typeToAnalyze, cancellationToken); break; case "Corral": var corralDefaultArgs = ConfigurationManager.AppSettings["CorralDefaultArgs"]; analyzerFactory = new CorralAnalyzerFactory(corralDefaultArgs, workingDir, queryGenerator, inputAssembly as CciAssembly, inputFile.FullName, typeToAnalyze, cancellationToken); break; default: throw new NotSupportedException(); } return(analyzerFactory); }
protected static TypeAnalysisResult GenerateEpa(CciAssembly inputAssembly, ITypeDefinition typeToAnalyze, Options options) { System.Console.WriteLine("Starting analysis for type {0}", typeToAnalyze); var cancellationSource = new CancellationTokenSource(); var workingDir = CreateOrCleanupWorkingDirectory(); var queryGenerator = new CciQueryGenerator(); IAnalyzerFactory analyzerFactory; switch (options.Backend) { case "CodeContracts": var codeContracts = Environment.GetEnvironmentVariable("CodeContractsInstallDir"); if (string.IsNullOrEmpty(codeContracts)) { var msg = new StringBuilder(); msg.AppendLine("The environment variable %CodeContractsInstallDir% does not exist."); msg.AppendLine("Please make sure that Code Contracts is installed correctly."); msg.AppendLine("This might be because the system was not restarted after Code Contracts installation."); throw new DirectoryNotFoundException(msg.ToString()); } var cccheckArgs = ConfigurationManager.AppSettings["CccheckArgs"]; Contract.Assert(cccheckArgs != null); var cccheck = new FileInfo(ConfigurationManager.AppSettings["CccheckFullName"]); Contract.Assert(cccheck.Exists); analyzerFactory = new CodeContractsAnalyzerFactory(workingDir, cccheckArgs, string.Empty, queryGenerator, inputAssembly, options.InputAssembly, typeToAnalyze, cancellationSource.Token); break; case "Corral": var corralDefaultArgs = ConfigurationManager.AppSettings["CorralDefaultArgs"]; Contract.Assert(corralDefaultArgs != null); analyzerFactory = new CorralAnalyzerFactory(corralDefaultArgs, workingDir, queryGenerator, inputAssembly, options.InputAssembly, typeToAnalyze, cancellationSource.Token); break; default: throw new NotSupportedException(); } var generator = new EpaGenerator(analyzerFactory, options.Cutter); var epaBuilder = new EpaBuilder(typeToAnalyze); var epaBuilderObservable = new ObservableEpaBuilder(epaBuilder); epaBuilderObservable.TransitionAdded += OnTransitionAdded; TypeAnalysisResult analysisResult; if (!options.Methods.Equals("All")) { var selectedMethods = options.Methods.Split(';'); analysisResult = generator.GenerateEpa(typeToAnalyze, selectedMethods, epaBuilderObservable).Result; } else { analysisResult = generator.GenerateEpa(typeToAnalyze, epaBuilderObservable).Result; } return(analysisResult); }