Esempio n. 1
0
        public INonNullInformation GetNonNullInfo(Method m)
        {
            INonNullInformation nonNullInfo = null;

            if (nonNullInfoCache.ContainsKey(m))
            {
                return(nonNullInfoCache[m]);
            }

            if (this.analyzer != null)
            {
                nonNullInfo = NonNullChecker.Check(this.typeSystem, m,
                                                   this.analyzer);
                nonNullInfoCache[m] = nonNullInfo;
            }
            return(nonNullInfo);
        }
Esempio n. 2
0
        public override Method VisitMethod(Method method)
        {
            if (this.analyzer != null)
            {
                INonNullInformation nonNullInfo = this.analyzer.NonNullInfo;
                if (nonNullInfo == null)
                {
                    nonNullInfo = NonNullChecker.Check(this.typeSystem, method,
                                                       this.analyzer);
                    nonNullInfoCache[method] = nonNullInfo;
                }
            }

            // To be sure that requires are computed
            // as I am bypassing that blocks of code
            if (method.Contract != null)
            {
                RequiresList requiresL = method.Contract.Requires;
                EnsuresList  ensuresL  = method.Contract.Ensures;
            }
            return(base.VisitMethod(method));
        }
Esempio n. 3
0
        /// <summary>
        /// Put general analysis targeting to general IL properties.
        /// </summary>
        /// <param name="method"></param>
        protected void GeneralAnalysis(Method method)
        {
            nonNullInfo = null;

            if (!this.CodeIsWellFormed)
            {
                return;
            }

            if (debug)
            {
                ControlFlowGraph cfg = GetCFG(method);
                if (cfg != null)
                {
                    cfg.Display(Console.Out);
                }
            }

            if (!method.Name.Name.StartsWith("Microsoft.Contracts"))
            {
                // Definite assignment checking

                //System.Console.WriteLine("--------------- Analyzing Method: {0}", method.Name);


                if (this.DefiniteAssignmentChecking)
                {
                    // For every statement, three things are returned from this pre- stage analysis
                    // 1) which program vars (that represent NN arrays) are created but not committed
                    // 2) which program vars (that represent NN arrays) are created and committed between
                    //    the creation and commitment of current array.
                    // 3) if the statement is a commitment call for an NN array, whether it
                    //    is ok to lift the array to be non-delayed.
                    PreDAStatus preAnalysisResult = MethodReachingDefNNArrayChecker.Check(typeSystem, method, this);
                    if (preAnalysisResult != null)
                    {
                        delayInfo = MethodDefiniteAssignmentChecker.Check(typeSystem, method, this, preAnalysisResult);
                    }
                }
                if (Analyzer.Debug)
                {
                    if (delayInfo != null)
                    {
                        System.Console.WriteLine("----- delay info count: {0}", delayInfo.Count());
                    }
                }

                if (this.ExposureChecking)
                {
                    ExposureChecker.Check(typeSystem, method, this);
                }

                // NonNull checking
                if (this.NonNullChecking)
                {
                    nonNullInfo = NonNullChecker.Check(typeSystem, method, this);
                }

                //System.Console.WriteLine("---------------- Finished Analyzing Method:{0}", method.Name);
            }
        }