public static void AcceptChanges(IProgressMonitor monitor, List <Change> changes, MonoDevelop.Projects.Text.ITextFileProvider fileProvider) { var rctx = new RefactoringOptions(null); var handler = new RenameHandler(changes); FileService.FileRenamed += handler.FileRename; var fileNames = new HashSet <FilePath> (); for (int i = 0; i < changes.Count; i++) { changes[i].PerformChange(monitor, rctx); var replaceChange = changes[i] as TextReplaceChange; if (replaceChange == null) { continue; } for (int j = i + 1; j < changes.Count; j++) { var change = changes[j] as TextReplaceChange; if (change == null) { continue; } fileNames.Add(change.FileName); if (replaceChange.Offset >= 0 && change.Offset >= 0 && replaceChange.FileName == change.FileName) { if (replaceChange.Offset < change.Offset) { change.Offset -= replaceChange.RemovedChars; if (!string.IsNullOrEmpty(replaceChange.InsertedText)) { change.Offset += replaceChange.InsertedText.Length; } } else if (replaceChange.Offset < change.Offset + change.RemovedChars) { change.RemovedChars = Math.Max(0, change.RemovedChars - replaceChange.RemovedChars); change.Offset = replaceChange.Offset + (!string.IsNullOrEmpty(replaceChange.InsertedText) ? replaceChange.InsertedText.Length : 0); } } } } FileService.NotifyFilesChanged(fileNames); FileService.FileRenamed -= handler.FileRename; TextReplaceChange.FinishRefactoringOperation(); }
public static void AcceptChanges(IProgressMonitor monitor, ProjectDom dom, List <Change> changes, MonoDevelop.Projects.Text.ITextFileProvider fileProvider) { RefactorerContext rctx = new RefactorerContext(dom, fileProvider, null); RenameHandler handler = new RenameHandler(changes); FileService.FileRenamed += handler.FileRename; for (int i = 0; i < changes.Count; i++) { changes[i].PerformChange(monitor, rctx); TextReplaceChange replaceChange = changes[i] as TextReplaceChange; if (replaceChange == null) { continue; } for (int j = i + 1; j < changes.Count; j++) { TextReplaceChange change = changes[j] as TextReplaceChange; if (change == null) { continue; } if (replaceChange.Offset >= 0 && change.Offset >= 0 && replaceChange.FileName == change.FileName) { if (replaceChange.Offset < change.Offset) { change.Offset -= replaceChange.RemovedChars; if (!string.IsNullOrEmpty(replaceChange.InsertedText)) { change.Offset += replaceChange.InsertedText.Length; } } else if (replaceChange.Offset < change.Offset + change.RemovedChars) { change.RemovedChars -= replaceChange.RemovedChars; change.Offset = replaceChange.Offset + replaceChange.InsertedText.Length; } } } } FileService.FileRenamed -= handler.FileRename; TextReplaceChange.FinishRefactoringOperation(); }