public bool AddPostCondition(BoxedExpression postcondition, APC pc, Provenance provenance) { if (!this.CanAddEnsures()) { return(false); } var post = new BoxedExpression.AssertExpression(postcondition, "ensures", pc, provenance, null); this.inferredPostconditions.Add(post); return(true); }
GetCandidatePostconditionsForAutoProperties <Local, Parameter, Method, Field, Property, Event, Type, Attribute, Assembly> (IEnumerable <BoxedExpression> boxedExpressions, IDecodeMetaData <Local, Parameter, Method, Field, Property, Event, Type, Attribute, Assembly> mdd, FieldsDB <Local, Parameter, Method, Field, Property, Event, Type, Attribute, Assembly> fieldsDB) { var result = new List <Tuple <Method, BoxedExpression.AssertExpression, Provenance> >(); if (boxedExpressions != null) { foreach (var post in boxedExpressions.Where(exp => { return(exp.IsBinary); })) { Contract.Assume(post != null); BoxedExpression exp; if (post.IsCheckExpNotNotNull(out exp)) { var path = exp.AccessPath; if (path != null) { Method m; if (path[0].ToString() == "this" && path[path.Length - 1].IsMethodCall && path[path.Length - 1].TryMethod(out m) && mdd.IsAutoPropertyMember(m)) { Method setter; if (mdd.TryGetSetterFromGetter(m, out setter) && fieldsDB.IsCalledInANonConstructor(setter)) { #if DEBUG Console.WriteLine("[INFERENCE] Skipping the inference of the postcondition '{0}' to an autoproperty because found it is set in a non-constructor", post); #endif continue; } var t = mdd.ReturnType(m); var neqNull = BoxedExpression.Binary(BinaryOperator.Cne_Un, BoxedExpression.Result(t), BoxedExpression.Const(null, t, mdd)); #if DEBUG Console.WriteLine("[INFERENCE] Propagating the postcondition '{0}' to the autoproperty", post); #endif var p = new BoxedExpression.AssertExpression(neqNull, "ensures", APC.Dummy, null, null); result.Add(new Tuple <Method, BoxedExpression.AssertExpression, Provenance>(m, p, null)); } } } } } return(result); }