private static ValidationResult CheckCompatibilityOfContractResultWithMethodReturnType( CodeContractStatement statement) { var contractResultTypes = statement.CodeContractExpression .Value .With(x => x as ContractEnsures) .Return(ensures => ensures.ContractResultTypes, Enumerable.Empty<IDeclaredType>().ToList()); var method = statement.GetDeclaredMethod(); var methodResult = method .With(x => x.DeclaredElement) .Return(x => x.ReturnType); if (methodResult != null && contractResultTypes.Count != 0) { if (methodResult.IsVoid()) { return ValidationResult.CreateError(statement.Statement, MalformedContractError.EnsuresInVoidReturnMethod, ErrorForIncompatibleEnsuresAndReturnType(methodResult, contractResultTypes.First(), method)); } if (!MethodResultIsCompatibleWith(methodResult, contractResultTypes)) { return ValidationResult.CreateError(statement.Statement, MalformedContractError.ResultTypeInEnsuresIsIncompatibleWithMethodReturnType, ErrorForIncompatibleEnsuresAndReturnType(methodResult, contractResultTypes.First(), method)); } } return ValidationResult.CreateNoError(statement.Statement); }