public CommandOutput Execute(CommandLineArgs arg)
        {
            var output = new CommandOutput();

            var slnFile = VerifiedFile.GetFileIfExisting(arg.SolutionFile);

            if (slnFile == null)
            {
                output.Messages.Add(new SmartStringBuilder()
                                    .AppendFatal("Unable to find solution ")
                                    .AppendHighlighted(arg.SolutionFile));
                return(output);
            }

            int previousProblemCount = int.MaxValue;

            while (true)
            {
                var solution = _solutionReader.ReadSolution(slnFile);
                var problems = _problemDetector.DetectAllSolutionProblems(solution);
                output.DetectedProblems.Clear();
                output.DetectedProblems.AddRange(problems);

                if (problems.Length >= previousProblemCount)
                {
                    output.Messages.Add(new SmartStringBuilder()
                                        .Append("Unable to solve ")
                                        .AppendHighlighted(problems.Length)
                                        .Append(" problems"));

                    return(output);
                }

                previousProblemCount = problems.Length;

                var result = problems
                             .Select(p => _correctorService.TryCorrectProblem(p))
                             .FirstOrDefault(p => p.Resolution != Resolution.NoActionTaken);

                if (result != null && result.Resolution == Resolution.FailedToSolve)
                {
                    output.Messages.Add(new SmartStringBuilder()
                                        .AppendFatal("Error trying to solve problem: ")
                                        .AppendHighlighted(result.Problem.GetType().Name));

                    return(output);
                }
                else if (result != null && result.Resolution == Resolution.Solved)
                {
                    output.CorrectedProblems.Add(result.Problem);
                }
            }
        }
        public CommandOutput Execute(CommandLineArgs arg)
        {
            var output = new CommandOutput();

            var slnFile = VerifiedFile.GetFileIfExisting(arg.SolutionFile);

            if (slnFile == null)
            {
                output.Messages.Add(new SmartStringBuilder()
                                    .AppendFatal("Unable to find solution ")
                                    .AppendHighlighted(arg.SolutionFile));
                return(output);
            }

            var solution = _solutionReader.ReadSolution(slnFile);
            var problems = _problemDetector.DetectAllSolutionProblems(solution);

            foreach (var problem in problems)
            {
                output.DetectedProblems.Add(problem);
            }

            return(output);
        }
Пример #3
0
 public VerifiedFile TryVerify()
 {
     return(VerifiedFile.GetFileIfExisting(_file.FullName));
 }