Esempio n. 1
0
 public virtual void VisitMemberReferenceCollection(MemberReferenceCollection members)
 {
     foreach (MemberReference memberRef in members)
     {
         VisitMemberReference(memberRef);
     }
 }
Esempio n. 2
0
 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);
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
                    }
                }
            }
        }
Esempio n. 8
0
 public void VisitMemberReferenceCollection(MemberReferenceCollection members)
 {
 }
Esempio n. 9
0
        bool MemberReferencesContains(MemberReferenceCollection members, MemberReference member)
        {
            MemberReference mr = GetMemberReference(members, member);

            return(mr != null);
        }
Esempio n. 10
0
        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));
            }
        }
Esempio n. 11
0
        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);
        }