public UsedColumnsAnalysis(IMetadataHost h, ControlFlowGraph c, ConstantsInfoProvider ci, List <ITypeDefinition> r, List <ITypeDefinition> cd)
        {
            host        = h;
            cfg         = c;
            constInfo   = ci;
            rowTypes    = r;
            columnTypes = cd;

            Initialize();
        }
        public UsedColumnsAnalysis(IMetadataHost h, ControlFlowGraph c, ConstantsInfoProvider ci, ITypeDefinition r, ITypeDefinition cd)
        {
            host       = h;
            cfg        = c;
            constInfo  = ci;
            rowType    = r;
            columnType = cd;

            ColumnIndexAccesses  = 0;
            ColumnStringAccesses = 0;

            Initialize();
        }
Exemple #3
0
        /// <summary>
        /// Entry point method for performing used-columns analysis. The analysis expects results of
        /// constant-set propagation analysis.
        /// </summary>
        /// <param name="cfg"></param>
        /// <param name="cspInfo"></param>
        /// <param name="results"></param>
        /// <returns></returns>
        private UsedColumnsAnalysis DoUsedColumnsAnalysis(ControlFlowGraph cfg, ConstantsInfoProvider cspInfo, ScopeMethodAnalysisResult results)
        {
            Utils.WriteLine("Running used columns analysis...");
            var clsAnalysis = new UsedColumnsAnalysis(mhost, cfg, cspInfo, rowType, columnType);
            var outcome     = clsAnalysis.Analyze();

            results.UsedColumnsSummary = outcome;

            // We only save statistics about column accesses for methods with useful results.
            if (!results.UsedColumnsSummary.IsTop && !results.UsedColumnsSummary.IsBottom)
            {
                results.ColumnStringAccesses += clsAnalysis.ColumnStringAccesses;
                results.ColumnIndexAccesses  += clsAnalysis.ColumnIndexAccesses;
            }

            Utils.WriteLine(results.UsedColumnsSummary.ToString());
            Utils.WriteLine("Done with used columns analysis");
            return(clsAnalysis);
        }