コード例 #1
0
    public bool TryInferConditions(ProofObligation obl, ICodeFixesManager codefixesManager, out InferredConditions preConditions)
    {
      preConditions = null;
      foreach (var inferencer in this.inferencers)
      {
        if (inferencer == null)
          continue;

        InferredConditions tmp;
        if (inferencer.TryInferConditions(obl, codefixesManager, out tmp))
        {
          Contract.Assert(tmp != null);
          if (preConditions == null)
          {
            preConditions = tmp;
          }
          else
          {
            preConditions.AddRange(tmp);
          }
        }
      }

      return preConditions != null;
    }
コード例 #2
0
 public bool TryInferConditions(ProofObligation obl, ICodeFixesManager codefixesManager, out InferredConditions preConditions)
 {
     preConditions = null;
     return(false);
 }
コード例 #3
0
        public bool TryInferConditions(ProofObligation obl, ICodeFixesManager codefixesManager, out InferredConditions preConditions)
        {
            var watch = new Stopwatch();

            watch.Start();
            var result = inner.TryInferConditions(obl, codefixesManager, out preConditions);

            watch.Stop();

            inferenceTime += watch.Elapsed;

            if (preConditions == null)
            {
                return(false);
            }

            if (result)
            {
                inferred += preConditions.Count();
            }

            return(result);
        }
コード例 #4
0
        virtual public bool TryInferConditions(ProofObligation obl, ICodeFixesManager codefixesManager, out InferredConditions preConditions)
        {
            var preConds = PreconditionSuggestion.ExpressionsInPreState(obl.ConditionForPreconditionInference, this.MethodDriver.Context, this.MethodDriver.MetaDataDecoder, obl.PC, allowedKinds: ExpressionInPreStateKind.All);

            preConditions = /*preConds == null ? null : */ preConds.Where(pre => pre.hasVariables).AsInferredPreconditions(isSufficient: true);
            return /*preConditions != null && */ (preConditions.Any());
        }
コード例 #5
0
        public override bool TryInferConditions(ProofObligation obl, ICodeFixesManager codefixesManager, out InferredConditions preConditions)
        {
            // First we try to read exp in the prestate

            if (base.TryInferConditions(obl, codefixesManager, out preConditions))
            {
                // if we succeed, now we should prove it is a precondition according to Sect. 4 of [CCL-VMCAI11]
                var necessarypreConditions = preConditions.Where(pre => new PreconditionCheckedAllOverThePathsAnalysis(this.obligations, this.MethodDriver).CheckPreconditionAdmissibility(pre.Expr)).AsInferredPreconditions();
                obl.NotifySufficientYetNotNecessaryPreconditions(preConditions.Except(necessarypreConditions));

                preConditions = necessarypreConditions;
                return(necessarypreConditions.Any());
            }

            return(false);
        }
コード例 #6
0
        public bool TryInferConditions(ProofObligation obl, ICodeFixesManager codefixesManager, out InferredConditions preConditions)
        {
            preConditions = null;
            foreach (var inferencer in this.inferencers)
            {
                if (inferencer == null)
                {
                    continue;
                }

                InferredConditions tmp;
                if (inferencer.TryInferConditions(obl, codefixesManager, out tmp))
                {
                    Contract.Assert(tmp != null);
                    if (preConditions == null)
                    {
                        preConditions = tmp;
                    }
                    else
                    {
                        preConditions.AddRange(tmp);
                    }
                }
            }

            return(preConditions != null);
        }