public Solution SafelyRefactorSolution(Solution solution, Document document, int index) { var numInitialErrors = solution.CompilationErrorCount(); var oldErrors = solution.GetDiagnostics().Where(d => d.Severity == DiagnosticSeverity.Error).Select(a => a.Id); var oldSolution = solution; try { solution = ExecuteRefactoring(document, solution, index); var oldFile= document.GetTextAsync().Result; var newFile = solution.GetDocument(document.Id).GetTextAsync().Result; if (solution.CompilationErrorCount() > numInitialErrors) { Fail.Info("{0}", document.FilePath); Fail.Info("{0}\r\n*************************************************************************************************", oldFile); Fail.Info("{0}\r\n=================================================================================================", newFile); Fail.Error("=============================================SOLUTIONERRORS======================================================="); foreach ( var diagnostic in solution.GetDiagnostics().Where(d => d.Severity == DiagnosticSeverity.Error && !oldErrors.Any(a=> a.Equals(d.Id)))) { Fail.Error("{0}", diagnostic); } Fail.Error("========================================================================================================================="); CompilationError = true; RefactoredSolution = solution; solution = oldSolution; } else { Success.Info("{0}", document.FilePath); Success.Info("{0}\r\n*************************************************************************************************", oldFile); Success.Info("{0}\r\n=================================================================================================", newFile); RefactoredSolution = solution; NumMethodSymbolLookups += SemanticModelExtensions.NumMethodSymbolLookups; SemanticModelExtensions.ResetSymbolLookupCounter(); } } catch (RefactoringException e) { Logger.Error("Refactoring failed: index={0}: {1}: {2}", index, e.Message, e); solution = oldSolution; RefactoringExceptionWasThrown = true; } catch (NotImplementedException e) { Logger.Error("Not implemented: index={0}: {1}: {2}", index, e.Message, e); solution = oldSolution; NotImplementedExceptionWasThrown = true; } catch (PreconditionException e) { Logger.Error("Precondition failed: {0}: {1}", e.Message, e); solution = oldSolution; PreconditionFailed = true; } catch (Exception e) { Logger.Error("Unhandled exception while refactoring: index={0}: {1}\n{2}", index, e.Message, e); solution = oldSolution; OtherExceptionWasThrown = true; } return solution; }