public ValidatedStatement(ProcessedStatement processedStatement, IList<ValidationResult> validationResults)
        {
            Contract.Requires(processedStatement != null);
            Contract.Requires(validationResults != null);

            _processedStatement = processedStatement;
            _validationResults = validationResults.Count == 0 ? new[] { ValidationResult.CreateNoError(processedStatement.CSharpStatement) } : validationResults;
        }
        private static IEnumerable<ValidationResult> ValidateStatement(IList<ValidationRule> validationRules, 
            IList<ProcessedStatement> contractBlock, ProcessedStatement currentStatement)
        {
            Contract.Requires(contractBlock != null);
            Contract.Requires(currentStatement != null);
            Contract.Ensures(Contract.Result<IEnumerable<ValidationResult>>() != null);

            return validationRules
                .Select(rule => rule.Validate(currentStatement, contractBlock))
                .Where(vr => vr.ErrorType != ErrorType.NoError)
                .ToList();
        }
 public ValidationResult Validate(ProcessedStatement currentStatement, IList<ProcessedStatement> contractBlock)
 {
     var validationResult = DoValidate(currentStatement, contractBlock);
     validationResult.SetProcessedStatement(currentStatement);
     return validationResult;
 }
        protected override ValidationResult DoValidate(ProcessedStatement currentStatement, 
            IList<ProcessedStatement> contractBlock)
        {
            if (currentStatement.ContractStatement != null)
                return ValidationResult.CreateNoError(currentStatement.CSharpStatement);

            return _statementValidationRule(currentStatement.CSharpStatement);
        }
 protected abstract ValidationResult DoValidate(ProcessedStatement currentStatement,
     IList<ProcessedStatement> contractBlock);