From 830d6809d903d925c92a462e67abfa15cd9a6901 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 27 Aug 2005 13:18:23 +0000 Subject: [PATCH] Improved RefactoringMenuBuilder. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@447 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Gui/Pads/ClassBrowser/Nodes/MemberNode.cs | 5 + .../RefactoringMenuBuilder.cs | 117 ++++++++++++++---- .../Resources/StringResources.resources | Bin 257354 -> 257564 bytes src/Main/StartUp/Project/StartUp.csproj | 1 - 4 files changed, 95 insertions(+), 28 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs index 8ba89d2224..8e69d3db2c 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ClassBrowser/Nodes/MemberNode.cs @@ -69,6 +69,11 @@ namespace ICSharpCode.SharpDevelop.Gui } } + public static string GetText(IMember member) + { + return Create(member).Text; + } + public static MemberNode Create(IMember member) { if (member is IMethod) diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs index 80f19ccf9c..0ad3bd3797 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs @@ -20,12 +20,14 @@ using ICSharpCode.TextEditor.Document; namespace ICSharpCode.SharpDevelop.Refactoring { /// - /// Description of RefactoringMenuBuilder + /// Build a menu with refactoring commands for the item that has been clicked on in the text editor. /// public class RefactoringMenuBuilder : ISubmenuBuilder { public ToolStripItem[] BuildSubmenu(Codon codon, object owner) { + ToolStripMenuItem item; + TextEditorControl textEditorControl = (TextEditorControl)owner; if (textEditorControl.FileName == null) return new ToolStripItem[0]; @@ -34,43 +36,66 @@ namespace ICSharpCode.SharpDevelop.Refactoring IDocument doc = textArea.Document; int caretLine = textArea.Caret.Line; - bool lineHasDefinitions = false; + // list of dotnet names that have definition bookmarks in this line + List definitions = new List(); // Include definitions (use the bookmarks which should already be present) foreach (Bookmark mark in doc.BookmarkManager.Marks) { if (mark != null && mark.LineNumber == caretLine) { - string path = null; - int iconIndex = 0; - string name = null; ClassMemberBookmark cmb = mark as ClassMemberBookmark; ClassBookmark cb = mark as ClassBookmark; + IClass type = null; if (cmb != null) { - path = ClassMemberBookmark.ContextMenuPath; - iconIndex = cmb.IconIndex; - name = cmb.Member.Name; + definitions.Add(cmb.Member.DotNetName); + item = new ToolStripMenuItem(MemberNode.GetText(cmb.Member), + ClassBrowserIconService.ImageList.Images[cmb.IconIndex]); + MenuService.AddItemsToMenu(item.DropDown.Items, mark, ClassMemberBookmark.ContextMenuPath); + resultItems.Add(item); + type = cmb.Member.DeclaringType; } else if (cb != null) { - path = ClassBookmark.ContextMenuPath; - iconIndex = ClassBrowserIconService.GetIcon(cb.Class); - name = cb.Class.Name; + type = cb.Class; } - if (path != null) { - lineHasDefinitions = true; - ToolStripMenuItem item = new ToolStripMenuItem(name, ClassBrowserIconService.ImageList.Images[iconIndex]); - MenuService.AddItemsToMenu(item.DropDown.Items, mark, path); + if (type != null) { + definitions.Add(type.DotNetName); + item = new ToolStripMenuItem(type.Name, ClassBrowserIconService.ImageList.Images[ClassBrowserIconService.GetIcon(type)]); + MenuService.AddItemsToMenu(item.DropDown.Items, + cb ?? new ClassBookmark(textArea.Document, type), + ClassBookmark.ContextMenuPath); resultItems.Add(item); } } } - if (!lineHasDefinitions) { - ResolveResult rr = ResolveAtCaret(textEditorControl, textArea); - ToolStripMenuItem item = null; - if (rr is MemberResolveResult) { - item = MakeItem(((MemberResolveResult)rr).ResolvedMember); - } else if (rr is TypeResolveResult) { - item = MakeItem(((TypeResolveResult)rr).ResolvedClass); + // Include menu for member that has been clicked on + ResolveResult rr = ResolveAtCaret(textEditorControl, textArea); + item = null; + if (rr is MemberResolveResult) { + item = MakeItem(definitions, ((MemberResolveResult)rr).ResolvedMember); + } else if (rr is TypeResolveResult) { + item = MakeItem(definitions, ((TypeResolveResult)rr).ResolvedClass); + } + if (item != null) { + resultItems.Add(item); + } + + // Include menu for current class and method + IMember callingMember = null; + if (rr != null) { + callingMember = rr.CallingMember; + } else { + ParseInformation parseInfo = ParserService.GetParseInformation(textEditorControl.FileName); + if (parseInfo != null) { + ICompilationUnit cu = parseInfo.MostRecentCompilationUnit; + if (cu != null) { + IClass callingClass = cu.GetInnermostClass(caretLine + 1, textArea.Caret.Column + 1); + callingMember = GetCallingMember(callingClass, caretLine + 1, textArea.Caret.Column + 1); + } } + } + if (callingMember != null) { + item = MakeItem(definitions, callingMember); if (item != null) { + item.Text = StringParser.Parse("${res:SharpDevelop.Refactoring.CurrentMethod}: ") + callingMember.Name; resultItems.Add(item); } } @@ -85,22 +110,59 @@ namespace ICSharpCode.SharpDevelop.Refactoring } } - ToolStripMenuItem MakeItem(IMember member) + IMember GetCallingMember(IClass callingClass, int caretLine, int caretColumn) + { + if (callingClass == null) { + return null; + } + foreach (IMethod method in callingClass.Methods) { + if (method.BodyRegion != null && method.BodyRegion.IsInside(caretLine, caretColumn)) { + return method; + } + } + foreach (IProperty property in callingClass.Properties) { + if (property.BodyRegion != null && property.BodyRegion.IsInside(caretLine, caretColumn)) { + return property; + } + } + return null; + } + + ToolStripMenuItem MakeItem(List definitions, IMember member) { if (member == null) return null; - return MakeItem(MemberNode.Create(member), member.DeclaringType.CompilationUnit, member.Region); + if (definitions.Contains(member.DotNetName)) return null; + definitions.Add(member.DotNetName); + ToolStripMenuItem item = MakeItem(member.FullyQualifiedName, MemberNode.Create(member), member.DeclaringType.CompilationUnit, member.Region); + ToolStripMenuItem declaringType = MakeItem(null, member.DeclaringType); + if (declaringType != null) { + item.DropDown.Items.Add(new ToolStripSeparator()); + declaringType.Text = StringParser.Parse("${res:SharpDevelop.Refactoring.DeclaringType}: ") + declaringType.Text; + item.DropDown.Items.Add(declaringType); + } + return item; } - ToolStripMenuItem MakeItem(IClass c) + ToolStripMenuItem MakeItem(List definitions, IClass c) { if (c == null) return null; - return MakeItem(new ClassNode(c.ProjectContent.Project, c), c.CompilationUnit, c.Region); + if (definitions != null) { + if (definitions.Contains(c.DotNetName)) return null; + definitions.Add(c.DotNetName); + } + return MakeItem(c.FullyQualifiedName, new ClassNode(c.ProjectContent.Project, c), c.CompilationUnit, c.Region); } - ToolStripMenuItem MakeItem(ExtTreeNode classBrowserTreeNode, ICompilationUnit cu, IRegion region) + ToolStripMenuItem MakeItem(string title, ExtTreeNode classBrowserTreeNode, ICompilationUnit cu, IRegion region) { ToolStripMenuItem item = new ToolStripMenuItem(classBrowserTreeNode.Text, ClassBrowserIconService.ImageList.Images[classBrowserTreeNode.ImageIndex]); + + //ToolStripMenuItem titleItem = new ToolStripMenuItem(title); + //titleItem.Enabled = false; + //item.DropDown.Items.Add(titleItem); + //item.DropDown.Items.Add(new ToolStripSeparator()); + if (cu.FileName != null && region != null) { ToolStripMenuItem gotoDefinitionItem = new ToolStripMenuItem(StringParser.Parse("${res:ICSharpCode.NAntAddIn.GotoDefinitionMenuLabel}"), ClassBrowserIconService.ImageList.Images[ClassBrowserIconService.GotoArrowIndex]); @@ -111,6 +173,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring item.DropDown.Items.Add(gotoDefinitionItem); item.DropDown.Items.Add(new ToolStripSeparator()); } + MenuService.AddItemsToMenu(item.DropDown.Items, classBrowserTreeNode, classBrowserTreeNode.ContextmenuAddinTreePath); return item; } diff --git a/src/Main/StartUp/Project/Resources/StringResources.resources b/src/Main/StartUp/Project/Resources/StringResources.resources index d49b1d43563b51a69e6d51b8b56de5489f2934d4..23ca702d830da65d4f4a0db3f7b2b90f7bb80135 100644 GIT binary patch delta 13038 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 I%T+P_AGZuN0{{R3 delta 12859 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 true Resources\StartUp.snk - Exe .\Resources\SharpDevelop.ico ..\src\Tools\UpdateAssemblyInfo\bin\Debug\UpdateAssemblyInfo.exe StartupOnly