public static void AddPostCondition <Local, Parameter, Method, Field, Property, Event, Type, Expression, Variable, Attribute, Assembly>(
            IExpressionContext <Local, Parameter, Method, Field, Type, Expression, Variable> context,
            System.Collections.Generic.List <string> postconditions, int rank, string symptom, IOutput output, IDecodeMetaData <Local, Parameter, Method, Field, Property, Event, Type, Attribute, Assembly> mdDecoder)
            where Type : IEquatable <Type>
        {
            var isProperty = mdDecoder.IsPropertyGetter(context.MethodContext.CurrentMethod) || mdDecoder.IsPropertySetter(context.MethodContext.CurrentMethod);

            if (!output.LogOptions.SuggestNonNullReturn && !output.LogOptions.SuggestEnsures(isProperty))
            {
                return;
            }

            APC sourcePC = GetPCForMethodEntry(context);

            foreach (string post in postconditions)
            {
                output.Suggestion("postcondition", sourcePC, MakePostconditionString(post));

                try
                {
                    SuggestPostConditionViaPex <Local, Parameter, Method, Field, Property, Event, Type, Expression, Variable, Attribute, Assembly>(context, rank, symptom, output, mdDecoder, post);
                }
                catch
                {
                    // guard against errors in ExtendedReflection version/VS integration
                }
            }
        }