public virtual void VisitMemberReferenceCollection(MemberReferenceCollection members) { foreach (MemberReference memberRef in members) { VisitMemberReference(memberRef); } }
public override void VisitMemberReferenceCollection(MemberReferenceCollection members) { foreach (MemberReference mr in members) { VisitMemberReference(mr); } }
static void CheckMemberReferenceDuplicates(MemberReferenceCollection references) { List <string> names = new List <string> (); foreach (MemberReference reference in references) { Assert.IsFalse(names.Contains(reference.ToString())); names.Add(reference.ToString()); } }
public MemberReference GetMemberReference(MemberReferenceCollection members, MemberReference member) { foreach (MemberReference mr in members) { if (mr.ToString() == member.ToString()) { return(mr); } } return(null); }
public static MemberReferenceCollection GetTypeMembers(TypeDefinition typeDefinition) { var members = new MemberReferenceCollection(typeDefinition.Module); foreach (MemberReference member in typeDefinition.Constructors) { members.Add(member); } foreach (MemberReference member in typeDefinition.Events) { members.Add(member); } foreach (MemberReference member in typeDefinition.Fields) { members.Add(member); } foreach (MemberReference member in typeDefinition.Methods) { if (member is MethodDefinition) { var methodDefinition = (MethodDefinition)member; if (methodDefinition.IsSpecialName && !MyMethodInfo.IsMethodNameMapped(methodDefinition.Name)) { continue; } } members.Add(member); } foreach (MemberReference member in typeDefinition.Properties) { members.Add(member); } foreach (MemberReference member in typeDefinition.NestedTypes) { members.Add(member); } return(members); }
MemberReferenceCollection GetReferences(RefactoringOptions options) { CodeRefactorer refactorer = IdeApp.Workspace.GetCodeRefactorer(IdeApp.ProjectOperations.CurrentSelectedSolution); IProgressMonitor monitor = IdeApp.Workbench.ProgressMonitors.GetBackgroundProgressMonitor(this.Name, null); if (options.SelectedItem is IType) { IType cls = (IType)options.SelectedItem; return(refactorer.FindClassReferences(monitor, cls, RefactoryScope.Solution, true)); } else if (options.SelectedItem is LocalVariable) { return(refactorer.FindVariableReferences(monitor, (LocalVariable)options.SelectedItem)); } else if (options.SelectedItem is IParameter) { return(refactorer.FindParameterReferences(monitor, (IParameter)options.SelectedItem, true)); } else if (options.SelectedItem is IMember) { IMember member = (IMember)options.SelectedItem; Dictionary <string, HashSet <DomLocation> > foundLocations = new Dictionary <string, HashSet <DomLocation> > (); MemberReferenceCollection result = new MemberReferenceCollection(); foreach (IMember m in CollectMembers(member.DeclaringType.SourceProjectDom, member)) { foreach (MemberReference r in refactorer.FindMemberReferences(monitor, m.DeclaringType, m, true)) { DomLocation location = new DomLocation(r.Line, r.Column); if (!foundLocations.ContainsKey(r.FileName)) { foundLocations[r.FileName] = new HashSet <DomLocation> (); } if (foundLocations[r.FileName].Contains(location)) { continue; } foundLocations[r.FileName].Add(location); result.Add(r); } } return(result); } return(null); }
public override void VisitMemberReferenceCollection(MemberReferenceCollection members) { foreach (MemberReference mr in members) { VisitMemberReference(mr); } //drop duplicates for (int i = 0; i < members.Count; i++) { MemberReference mr = members [i]; for (int j = i + 1; j < members.Count; j++) { if (members [j].ToString() == mr.ToString()) { members.RemoveAt(j); } } } }
public void VisitMemberReferenceCollection(MemberReferenceCollection members) { }
bool MemberReferencesContains(MemberReferenceCollection members, MemberReference member) { MemberReference mr = GetMemberReference(members, member); return(mr != null); }
public override void Run(RefactoringOptions options) { if (options.SelectedItem is LocalVariable || options.SelectedItem is IParameter) { MemberReferenceCollection col = GetReferences(options); if (col == null) { return; } TextEditorData data = options.GetTextEditorData(); Mono.TextEditor.TextEditor editor = data.Parent; if (editor == null) { MessageService.ShowCustomDialog(new RenameItemDialog(options, this)); return; } List <TextLink> links = new List <TextLink> (); TextLink link = new TextLink("name"); int baseOffset = Int32.MaxValue; foreach (MemberReference r in col) { baseOffset = Math.Min(baseOffset, data.Document.LocationToOffset(r.Line - 1, r.Column - 1)); } foreach (MemberReference r in col) { Segment segment = new Segment(data.Document.LocationToOffset(r.Line - 1, r.Column - 1) - baseOffset, r.Name.Length); if (segment.Offset <= data.Caret.Offset - baseOffset && data.Caret.Offset - baseOffset <= segment.EndOffset) { link.Links.Insert(0, segment); } else { link.AddLink(segment); } } links.Add(link); TextLinkEditMode tle = new TextLinkEditMode(editor, baseOffset, links); tle.SetCaretPosition = false; tle.SelectPrimaryLink = true; if (tle.ShouldStartTextLinkMode) { ModeHelpWindow helpWindow = new ModeHelpWindow(); helpWindow.TransientFor = IdeApp.Workbench.RootWindow; helpWindow.TitleText = options.SelectedItem is LocalVariable?GettextCatalog.GetString("<b>Local Variable -- Renaming</b>") : GettextCatalog.GetString("<b>Parameter -- Renaming</b>"); helpWindow.Items.Add(new KeyValuePair <string, string> (GettextCatalog.GetString("<b>Key</b>"), GettextCatalog.GetString("<b>Behavior</b>"))); helpWindow.Items.Add(new KeyValuePair <string, string> (GettextCatalog.GetString("<b>Return</b>"), GettextCatalog.GetString("<b>Accept</b> this refactoring."))); helpWindow.Items.Add(new KeyValuePair <string, string> (GettextCatalog.GetString("<b>Esc</b>"), GettextCatalog.GetString("<b>Cancel</b> this refactoring."))); tle.HelpWindow = helpWindow; tle.Cancel += delegate { editor.Document.Undo(); }; tle.OldMode = data.CurrentMode; tle.StartMode(); data.CurrentMode = tle; } } else { MessageService.ShowCustomDialog(new RenameItemDialog(options, this)); } }
public override List <Change> PerformChanges(RefactoringOptions options, object prop) { RenameProperties properties = (RenameProperties)prop; List <Change> result = new List <Change> (); MemberReferenceCollection col = GetReferences(options); if (col == null) { return(result); } if (properties.RenameFile && options.SelectedItem is IType) { IType cls = (IType)options.SelectedItem; int currentPart = 1; HashSet <string> alreadyRenamed = new HashSet <string> (); foreach (IType part in cls.Parts) { if (part.CompilationUnit.FileName != options.Document.FileName && System.IO.Path.GetFileNameWithoutExtension(part.CompilationUnit.FileName) != System.IO.Path.GetFileNameWithoutExtension(options.Document.FileName)) { continue; } if (alreadyRenamed.Contains(part.CompilationUnit.FileName)) { continue; } alreadyRenamed.Add(part.CompilationUnit.FileName); string oldFileName = System.IO.Path.GetFileNameWithoutExtension(part.CompilationUnit.FileName); string newFileName; int idx = oldFileName.IndexOf(cls.Name); if (idx >= 0) { newFileName = oldFileName.Substring(0, idx) + properties.NewName + oldFileName.Substring(idx + cls.Name.Length); } else { newFileName = currentPart != 1 ? properties.NewName + currentPart : properties.NewName; currentPart++; } int t = 0; while (System.IO.File.Exists(GetFullFileName(newFileName, part.CompilationUnit.FileName, t))) { t++; } result.Add(new RenameFileChange(part.CompilationUnit.FileName, GetFullFileName(newFileName, part.CompilationUnit.FileName, t))); } } foreach (MemberReference memberRef in col) { TextReplaceChange change = new TextReplaceChange(); change.FileName = memberRef.FileName; change.Offset = memberRef.Position; change.RemovedChars = memberRef.Name.Length; change.InsertedText = properties.NewName; change.Description = string.Format(GettextCatalog.GetString("Replace '{0}' with '{1}'"), memberRef.Name, properties.NewName); result.Add(change); } return(result); }