private void CopyAbbreviatorContracts(Method targetMethod, Method abbreviatorMethodInstance, Expression targetObject, ExpressionList actuals, RequiresList Preconditions, EnsuresList Postconditions, SourceContext useSite, RequiresList validations, Block contractInitializer) { Contract.Requires(validations != null); // make sure to have extracted contracts from the abbreviator method prior if (abbreviatorMethodInstance.DeclaringType.DeclaringModule == targetMethod.DeclaringType.DeclaringModule) { var abbrevMethod = abbreviatorMethodInstance; while (abbrevMethod.Template != null) { abbrevMethod = abbrevMethod.Template; } this.VisitMethod(abbrevMethod); } if (abbreviatorMethodInstance.Contract == null) return; var copier = new AbbreviationDuplicator(abbreviatorMethodInstance, targetMethod, this.contractNodes, abbreviatorMethodInstance, targetObject, actuals); var abbrevContract = HelperMethods.DuplicateContractAndClosureParts(copier, targetMethod, abbreviatorMethodInstance, this.contractNodes, true); if (abbrevContract == null) return; if (HelperMethods.IsNonTrivial(abbrevContract.ContractInitializer)) { contractInitializer.Statements.Add(abbrevContract.ContractInitializer); } MoveAbbreviatorRequires(targetMethod, abbrevContract.Requires, Preconditions, validations, useSite); MoveAbbreviatorEnsures(targetMethod, abbrevContract.Ensures, Postconditions, useSite); }
private void CopyValidatorContracts(Method targetMethod, Method validatorMethodInstance, Expression targetObject, ExpressionList actuals, RequiresList Preconditions, SourceContext useSite, Block validatorPrefix) { // make sure to have extracted contracts from the validator method prior if (validatorMethodInstance.DeclaringType.DeclaringModule == targetMethod.DeclaringType.DeclaringModule) { var validatorMethod = validatorMethodInstance; while (validatorMethod.Template != null) { validatorMethod = validatorMethod.Template; } this.VisitMethod(validatorMethod); } if (validatorMethodInstance.Contract == null) return; var copier = new AbbreviationDuplicator(validatorMethodInstance, targetMethod, this.contractNodes, validatorMethodInstance, targetObject, actuals); var validatorContract = HelperMethods.DuplicateContractAndClosureParts(copier, targetMethod, validatorMethodInstance, this.contractNodes, false); if (validatorContract == null) return; MoveValidatorRequires(targetMethod, validatorContract.Requires, Preconditions, useSite, validatorContract.ContractInitializer, validatorPrefix); }