Example #1
0
        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);
        }
Example #2
0
        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);
        }