public void PackageMethodContracts(IMethodDefinition method, bool isPure)
            {
                Contract.Requires(method != null);

                #region Package purity
                if (isPure)
                {
                    PackageContract(new XPure(this.host, isPure, docTracker));
                }
                //Don't package anything if it isn't pure. (That way it is easyer to deal with on the Sandcastle side)
                #endregion
                #region Package contracts from this implementation
                IMethodContract thisContract;
                if (CCDocContractHelper.TryGetMethodContract(host, method, out thisContract, docTracker))
                {
                    PackageMethodContracts(thisContract, null, null);
                }
                #endregion
                #region Package contracts from base overrides
                if (!method.IsNewSlot) // REVIEW: Is there a better test?
                {
                    IMethodDefinition overriddenMethod = MemberHelper.GetImplicitlyOverriddenBaseClassMethod(method) as IMethodDefinition;
                    while (overriddenMethod != null && overriddenMethod != Dummy.Method)
                    {
                        IMethodContract /*?*/ overriddenContract;
                        if (CCDocContractHelper.TryGetMethodContract(host, overriddenMethod, out overriddenContract, docTracker))
                        {
                            SubstituteParameters sps         = new SubstituteParameters(this.host, method, overriddenMethod);
                            IMethodContract      newContract = sps.Rewrite(overriddenContract) as MethodContract;
                            var unspecializedMethod          = MethodHelper.Unspecialize(overriddenMethod);
                            var methodId = MemberHelper.GetMemberSignature(unspecializedMethod, NameFormattingOptions.DocumentationId);
                            var typeName = TypeHelper.GetTypeName(unspecializedMethod.ContainingType, NameFormattingOptions.OmitContainingNamespace | NameFormattingOptions.OmitContainingType);
                            PackageMethodContracts(newContract, methodId, typeName);
                        }
                        overriddenMethod = MemberHelper.GetImplicitlyOverriddenBaseClassMethod(overriddenMethod) as IMethodDefinition;
                    }
                }
                #endregion
                #region Package contracts from implicit interface implementations
                foreach (IMethodDefinition ifaceMethod in MemberHelper.GetImplicitlyImplementedInterfaceMethods(method))
                {
                    IMethodContract /*?*/ ifaceContract;
                    if (!CCDocContractHelper.TryGetMethodContract(host, ifaceMethod, out ifaceContract, docTracker))
                    {
                        continue;
                    }
                    SubstituteParameters sps         = new SubstituteParameters(this.host, method, ifaceMethod);
                    IMethodContract      newContract = sps.Rewrite(ifaceContract) as MethodContract;
                    var unspecializedMethod          = MethodHelper.Unspecialize(ifaceMethod);
                    var methodId = MemberHelper.GetMemberSignature(unspecializedMethod, NameFormattingOptions.DocumentationId);
                    var typeName = TypeHelper.GetTypeName(unspecializedMethod.ContainingType, NameFormattingOptions.OmitContainingNamespace | NameFormattingOptions.OmitContainingType);
                    PackageMethodContracts(newContract, methodId, typeName);
                }
                #endregion
                #region Package contracts from explicit interface implementations
                // REVIEW: Why does GetExplicitlyOverriddenMethods return IMethodReference when GetImplicitlyImplementedInterfaceMethods
                // returns IMethodDefinition?
                foreach (IMethodReference ifaceMethodRef in MemberHelper.GetExplicitlyOverriddenMethods(method))
                {
                    IMethodDefinition /*?*/ ifaceMethod = ifaceMethodRef.ResolvedMethod;
                    if (ifaceMethod == null)
                    {
                        continue;
                    }
                    IMethodContract /*?*/ ifaceContract;
                    if (!CCDocContractHelper.TryGetMethodContract(host, ifaceMethod, out ifaceContract, docTracker))
                    {
                        continue;
                    }
                    SubstituteParameters sps         = new SubstituteParameters(this.host, method, ifaceMethod);
                    IMethodContract      newContract = sps.Rewrite(ifaceContract) as MethodContract;
                    var unspecializedMethod          = MethodHelper.Unspecialize(ifaceMethod);
                    var methodId = MemberHelper.GetMemberSignature(unspecializedMethod, NameFormattingOptions.DocumentationId);
                    var typeName = TypeHelper.GetTypeName(unspecializedMethod.ContainingType, NameFormattingOptions.OmitContainingNamespace | NameFormattingOptions.OmitContainingType);
                    PackageMethodContracts(newContract, methodId, typeName);;
                }
                #endregion
            }