From 374101ad6c001ff50fb52246cbc1014bdb11594a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 11 Sep 2005 13:05:01 +0000 Subject: [PATCH] Allow find references and rename for local variables and parameters. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@476 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- AddIns/ICSharpCode.SharpDevelop.addin | 25 ++++++++ .../Project/ICSharpCode.SharpDevelop.csproj | 3 +- .../Dom/Implementations/CombinedReturnType.cs | 27 ++++++++- .../Implementations/DefaultTypeParameter.cs | 21 +++++++ .../Implementations/SearchClassReturnType.cs | 4 +- .../Project/Src/Dom/MemberLookupHelper.cs | 8 ++- .../ClassBrowserIconService.cs | 3 + .../FindReferencesAndRenameHelper.cs} | 23 ++++---- .../LocalVariableRefactoring.cs | 39 +++++++++++++ .../RefactoringMenuBuilder.cs | 34 ++++++++--- .../RefactoringService/RefactoringService.cs | 58 ++++++++++++++++--- .../Commands/ClassBookmarkMenuBuilder.cs | 14 ++--- .../Commands/ClassMemberMenuBuilder.cs | 22 +++---- 13 files changed, 232 insertions(+), 49 deletions(-) rename src/Main/Base/Project/Src/{TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs => Services/RefactoringService/FindReferencesAndRenameHelper.cs} (87%) create mode 100644 src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 0a19df0712..74ddcaf64b 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1462,6 +1462,31 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index aa380a5f22..5605a48881 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -672,7 +672,6 @@ - @@ -700,6 +699,8 @@ + + diff --git a/src/Main/Base/Project/Src/Dom/Implementations/CombinedReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/CombinedReturnType.cs index 1aeda69faf..2f3984799d 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/CombinedReturnType.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/CombinedReturnType.cs @@ -14,7 +14,7 @@ namespace ICSharpCode.SharpDevelop.Dom /// /// Combines multiple return types. /// - public class CombinedReturnType : IReturnType + public sealed class CombinedReturnType : IReturnType { IList baseTypes; @@ -23,6 +23,31 @@ namespace ICSharpCode.SharpDevelop.Dom string @namespace; string dotnetName; + public override bool Equals(object obj) + { + CombinedReturnType combined = obj as CombinedReturnType; + if (combined == null) return false; + if (baseTypes.Count != combined.baseTypes.Count) return false; + for (int i = 0; i < baseTypes.Count; i++) { + if (!baseTypes[i].Equals(combined.baseTypes[i])) { + return false; + } + } + return true; + } + + public override int GetHashCode() + { + unchecked { + int res = 0; + foreach (IReturnType rt in baseTypes) { + res *= 27; + res += rt.GetHashCode(); + } + return res; + } + } + public CombinedReturnType(IList baseTypes, string fullName, string name, string @namespace, string dotnetName) { this.baseTypes = baseTypes; diff --git a/src/Main/Base/Project/Src/Dom/Implementations/DefaultTypeParameter.cs b/src/Main/Base/Project/Src/Dom/Implementations/DefaultTypeParameter.cs index 787bb79eda..a2e8f7e883 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/DefaultTypeParameter.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/DefaultTypeParameter.cs @@ -103,6 +103,27 @@ namespace ICSharpCode.SharpDevelop.Dom } } + public override bool Equals(object obj) + { + DefaultTypeParameter tp = obj as DefaultTypeParameter; + if (tp == null) return false; + if (tp.index != index) return false; + if (tp.name != name) return false; + if (tp.hasConstructableContraint != hasConstructableContraint) return false; + if (tp.method != method) { + if (tp.method == null || method == null) return false; + if (tp.method.FullyQualifiedName == method.FullyQualifiedName) return false; + } else { + if (tp.targetClass.FullyQualifiedName == targetClass.FullyQualifiedName) return false; + } + return true; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + public override string ToString() { return String.Format("[{0}: {1}]", GetType().Name, name); diff --git a/src/Main/Base/Project/Src/Dom/Implementations/SearchClassReturnType.cs b/src/Main/Base/Project/Src/Dom/Implementations/SearchClassReturnType.cs index e332b4ca9c..af415d3900 100644 --- a/src/Main/Base/Project/Src/Dom/Implementations/SearchClassReturnType.cs +++ b/src/Main/Base/Project/Src/Dom/Implementations/SearchClassReturnType.cs @@ -56,7 +56,9 @@ namespace ICSharpCode.SharpDevelop.Dom public override int GetHashCode() { - return declaringClass.GetHashCode() ^ name.GetHashCode(); + unchecked { + return declaringClass.GetHashCode() ^ name.GetHashCode() ^ caretLine << 8 + caretColumn; + } } // we need to use a static Dictionary as cache to provide a easy was to clear all cached diff --git a/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs b/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs index 43a908ca32..9e9811f35a 100644 --- a/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs +++ b/src/Main/Base/Project/Src/Dom/MemberLookupHelper.cs @@ -515,7 +515,7 @@ namespace ICSharpCode.SharpDevelop.Dom // Identity conversion: if (from == to) return true; - if (from == null) return false; + if (from == null || to == null) return false; if (from.Equals(to)) { return true; } @@ -554,7 +554,7 @@ namespace ICSharpCode.SharpDevelop.Dom if (toIsDefault && (fromIsDefault || from.ArrayDimensions > 0)) { IClass c1 = from.GetUnderlyingClass(); IClass c2 = to.GetUnderlyingClass(); - if (c1.IsTypeInInheritanceTree(c2)) { + if (c1 != null && c1.IsTypeInInheritanceTree(c2)) { return true; } } @@ -578,6 +578,10 @@ namespace ICSharpCode.SharpDevelop.Dom /// public static int GetBetterConversion(IReturnType from, IReturnType to1, IReturnType to2) { + if (from == null) return 0; + if (to1 == null) return 2; + if (to2 == null) return 1; + // See ECMA-334, § 14.4.2.3 // If T1 and T2 are the same type, neither conversion is better. diff --git a/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs b/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs index 589efe6cb5..5138398e6b 100644 --- a/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs +++ b/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs @@ -26,6 +26,9 @@ namespace ICSharpCode.Core public const int LiteralIndex = 15; public const int GotoArrowIndex = 13; + public const int LocalVariableIndex = FieldIndex + privateModifierOffset; + public const int ParameterIndex = FieldIndex + privateModifierOffset; + public const int ClassIndex = 16; public const int StructIndex = ClassIndex + 1 * 4; public const int InterfaceIndex = ClassIndex + 2 * 4; diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs similarity index 87% rename from src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs rename to src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs index 5d1d604d32..c4ab6aa7a0 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/ParserBookmarkMenuBuilderBase.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs @@ -19,13 +19,12 @@ using ICSharpCode.SharpDevelop.Bookmarks; using ICSharpCode.SharpDevelop.Gui; using SearchAndReplace; using ICSharpCode.SharpDevelop.DefaultEditor.Commands; -using ICSharpCode.SharpDevelop.Refactoring; -namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands +namespace ICSharpCode.SharpDevelop.Refactoring { - public class ParserBookmarkMenuBuilderBase + public static class FindReferencesAndRenameHelper { - protected ProvidedDocumentInformation GetDocumentInformation(string fileName) + public static ProvidedDocumentInformation GetDocumentInformation(string fileName) { foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) { if (content is ITextEditorControlProvider && @@ -39,12 +38,12 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands return new ProvidedDocumentInformation(strategy, fileName, 0); } - protected bool IsReadOnly(IClass c) + public static bool IsReadOnly(IClass c) { return c.CompilationUnit.FileName == null; } - protected TextEditorControl JumpToDefinition(IMember member) + public static TextEditorControl JumpToDefinition(IMember member) { IViewContent viewContent = null; ICompilationUnit cu = member.DeclaringType.CompilationUnit; @@ -62,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands return (tecp == null) ? null : tecp.TextEditorControl; } - protected TextEditorControl JumpBehindDefinition(IMember member) + public static TextEditorControl JumpBehindDefinition(IMember member) { IViewContent viewContent = null; ICompilationUnit cu = member.DeclaringType.CompilationUnit; @@ -80,7 +79,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands return (tecp == null) ? null : tecp.TextEditorControl; } - protected bool CheckName(string name) + public static bool CheckName(string name) { if (name == null || name.Length == 0) return false; @@ -97,7 +96,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands return true; } - protected struct Modification + public struct Modification { public IDocument Document; public int Offset; @@ -111,7 +110,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands } } - protected void ModifyDocument(List modifications, IDocument doc, int offset, int length, string newName) + public static void ModifyDocument(List modifications, IDocument doc, int offset, int length, string newName) { foreach (Modification m in modifications) { if (m.Document == doc) { @@ -135,7 +134,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands } } - protected void ShowAsSearchResults(string pattern, List list) + public static void ShowAsSearchResults(string pattern, List list) { if (list == null) return; List results = new List(list.Count); @@ -147,7 +146,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands SearchReplaceInFilesManager.ShowSearchResults(pattern, results); } - protected void RenameReferences(List list, string newName) + public static void RenameReferences(List list, string newName) { List modifiedContents = new List(); List modifications = new List(); diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs b/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs new file mode 100644 index 0000000000..7697944b3d --- /dev/null +++ b/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs @@ -0,0 +1,39 @@ +// +// 2002-2005 AlphaSierraPapa +// GNU General Public License +// +// $Revision$ +// + +using System; +using System.Collections.Generic; +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Dom; + +namespace ICSharpCode.SharpDevelop.Refactoring +{ + public class FindLocalVariableReferencesCommand : AbstractMenuCommand + { + public override void Run() + { + LocalResolveResult local = (LocalResolveResult)Owner; + List list = RefactoringService.FindReferences(local, null); + FindReferencesAndRenameHelper.ShowAsSearchResults("References to " + local.Field.Name, list); + } + } + + public class RenameLocalVariableCommand : AbstractMenuCommand + { + public override void Run() + { + LocalResolveResult local = (LocalResolveResult)Owner; + string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameMemberText}", local.Field.Name); + if (!FindReferencesAndRenameHelper.CheckName(newName)) return; + + List list = RefactoringService.FindReferences(local, null); + if (list == null) return; + FindReferencesAndRenameHelper.RenameReferences(list, newName); + } + } +} diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs index c79cd4c6cd..3351ae7d1a 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringMenuBuilder.cs @@ -73,9 +73,14 @@ namespace ICSharpCode.SharpDevelop.Refactoring item = MakeItem(definitions, ((MemberResolveResult)rr).ResolvedMember); } else if (rr is TypeResolveResult) { item = MakeItem(definitions, ((TypeResolveResult)rr).ResolvedClass); + } else if (rr is LocalResolveResult) { + item = MakeItem((LocalResolveResult)rr, caretLine + 1 == ((LocalResolveResult)rr).Field.Region.BeginLine); } if (item != null) { - resultItems.Add(item); + if (rr is LocalResolveResult) + resultItems.Insert(0, item); + else + resultItems.Add(item); } // Include menu for current class and method @@ -100,8 +105,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring } } - // TODO XML.TextAreaContextMenu.Refactoring - if (resultItems.Count == 0) { return new ToolStripItem[0]; } else { @@ -128,6 +131,19 @@ namespace ICSharpCode.SharpDevelop.Refactoring return null; } + ToolStripMenuItem MakeItem(LocalResolveResult local, bool isDefinition) + { + ToolStripMenuItem item = MakeItemInternal(MemberNode.GetText(local.Field), + local.IsParameter ? ClassBrowserIconService.ParameterIndex : ClassBrowserIconService.LocalVariableIndex, + local.CallingClass.CompilationUnit, + isDefinition ? DomRegion.Empty : local.Field.Region); + string treePath = "/SharpDevelop/ViewContent/DefaultTextEditor/Refactoring/"; + treePath += local.IsParameter ? "Parameter" : "LocalVariable"; + if (isDefinition) treePath += "Definition"; + MenuService.AddItemsToMenu(item.DropDown.Items, local, treePath); + return item; + } + ToolStripMenuItem MakeItem(List definitions, IMember member) { if (member == null) return null; @@ -143,7 +159,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring return item; } - ToolStripMenuItem MakeItem(List definitions, IClass c) { if (c == null) return null; @@ -154,9 +169,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring return MakeItem(c.FullyQualifiedName, new ClassNode(c.ProjectContent.Project, c), c.CompilationUnit, c.Region); } - ToolStripMenuItem MakeItem(string title, ExtTreeNode classBrowserTreeNode, ICompilationUnit cu, DomRegion region) + ToolStripMenuItem MakeItemInternal(string title, int imageIndex, ICompilationUnit cu, DomRegion region) { - ToolStripMenuItem item = new ToolStripMenuItem(classBrowserTreeNode.Text, ClassBrowserIconService.ImageList.Images[classBrowserTreeNode.ImageIndex]); + ToolStripMenuItem item = new ToolStripMenuItem(title, ClassBrowserIconService.ImageList.Images[imageIndex]); //ToolStripMenuItem titleItem = new ToolStripMenuItem(title); //titleItem.Enabled = false; @@ -173,7 +188,12 @@ namespace ICSharpCode.SharpDevelop.Refactoring item.DropDown.Items.Add(gotoDefinitionItem); item.DropDown.Items.Add(new ToolStripSeparator()); } - + return item; + } + + ToolStripMenuItem MakeItem(string title, ExtTreeNode classBrowserTreeNode, ICompilationUnit cu, DomRegion region) + { + ToolStripMenuItem item = MakeItemInternal(classBrowserTreeNode.Text, classBrowserTreeNode.ImageIndex, cu, region); MenuService.AddItemsToMenu(item.DropDown.Items, classBrowserTreeNode, classBrowserTreeNode.ContextmenuAddinTreePath); return item; } diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs index 0a745c0d08..668b69a3f2 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs @@ -71,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring /// public static List FindReferences(IMember member, IProgressMonitor progressMonitor) { - return RunFindReferences(member.DeclaringType, member, progressMonitor); + return RunFindReferences(member.DeclaringType, member, false, progressMonitor); } /// @@ -79,16 +79,35 @@ namespace ICSharpCode.SharpDevelop.Refactoring /// public static List FindReferences(IClass @class, IProgressMonitor progressMonitor) { - return RunFindReferences(@class, null, progressMonitor); + return RunFindReferences(@class, null, false, progressMonitor); } - static List RunFindReferences(IClass ownerClass, IMember member, IProgressMonitor progressMonitor) + /// + /// Find all references to the specified local variable. + /// + public static List FindReferences(LocalResolveResult local, IProgressMonitor progressMonitor) + { + return RunFindReferences(local.CallingClass, local.Field, true, progressMonitor); + } + + /// + /// This method can be used in three modes: + /// 1. Find references to classes (parentClass = targetClass, member = null, isLocal = false) + /// 2. Find references to members (parentClass = parent, member = member, isLocal = false) + /// 3. Find references to local variables (parentClass = parent, member = local var as field, isLocal = true) + /// + static List RunFindReferences(IClass ownerClass, IMember member, + bool isLocal, + IProgressMonitor progressMonitor) { if (ParserService.LoadSolutionProjectsThreadRunning) { MessageService.ShowMessage("${res:SharpDevelop.Refactoring.LoadSolutionProjectsThreadRunning}"); return null; } - ownerClass = FixClass(ownerClass); + if (!isLocal) { + // for local va + ownerClass = FixClass(ownerClass); + } List files = GetPossibleFiles(ownerClass, member); ParseableFileContentEnumerator enumerator = new ParseableFileContentEnumerator(files.ToArray()); List references = new List(); @@ -106,7 +125,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring progressMonitor.WorkDone = enumerator.Index; } - AddReferences(references, ownerClass, member, enumerator.CurrentFileName, enumerator.CurrentFileContent); + AddReferences(references, ownerClass, member, isLocal, enumerator.CurrentFileName, enumerator.CurrentFileContent); } } finally { if (progressMonitor != null) { @@ -117,7 +136,13 @@ namespace ICSharpCode.SharpDevelop.Refactoring return references; } - static void AddReferences(List list, IClass parentClass, IMember member, string fileName, string fileContent) + /// + /// This method can be used in three modes (like RunFindReferences) + /// + static void AddReferences(List list, + IClass parentClass, IMember member, + bool isLocal, + string fileName, string fileContent) { string lowerFileContent = fileContent.ToLower(); string searchedText; // the text that is searched for @@ -157,7 +182,12 @@ namespace ICSharpCode.SharpDevelop.Refactoring // found in this file (the resolver should parse all methods at once) ResolveResult rr = ParserService.Resolve(expr, position.Y, position.X, fileName, fileContent); MemberResolveResult mrr = rr as MemberResolveResult; - if (member != null) { + if (isLocal) { + // find reference to local variable + if (IsReferenceToLocalVariable(rr, member)) { + list.Add(new Reference(fileName, pos, searchedText.Length, expr.Expression, rr)); + } + } else if (member != null) { // find reference to member if (IsReferenceToMember(member, rr)) { list.Add(new Reference(fileName, pos, searchedText.Length, expr.Expression, rr)); @@ -304,6 +334,20 @@ namespace ICSharpCode.SharpDevelop.Refactoring } #endregion + public static bool IsReferenceToLocalVariable(ResolveResult rr, IMember variable) + { + LocalResolveResult local = rr as LocalResolveResult; + if (local == null) { + return false; + } else { + return local.Field.Region.BeginLine == variable.Region.BeginLine + && local.Field.Region.BeginColumn == variable.Region.BeginColumn; + } + } + + /// + /// Gets if is a reference to . + /// public static bool IsReferenceToMember(IMember member, ResolveResult rr) { MemberResolveResult mrr = rr as MemberResolveResult; diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs b/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs index 02d10ea248..b06a0517a9 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs @@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands /// /// Build context menu for class members in the text editor. /// - public class ClassBookmarkMenuBuilder : ParserBookmarkMenuBuilderBase, ISubmenuBuilder + public class ClassBookmarkMenuBuilder : ISubmenuBuilder { public ToolStripItem[] BuildSubmenu(Codon codon, object owner) { @@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands } List list = new List(); - if (!IsReadOnly(c)) { + if (!FindReferencesAndRenameHelper.IsReadOnly(c)) { cmd = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename); cmd.Tag = c; list.Add(cmd); @@ -85,7 +85,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands IClass c = (IClass)item.Tag; c = c.DefaultReturnType.GetUnderlyingClass(); // get compound class if class is partial string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameClassText}", c.Name); - if (!CheckName(newName)) return; + if (!FindReferencesAndRenameHelper.CheckName(newName)) return; List list = RefactoringService.FindReferences(c, null); if (list == null) return; @@ -102,14 +102,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands } } - RenameReferences(list, newName); + FindReferencesAndRenameHelper.RenameReferences(list, newName); } void AddDeclarationAsReference(List list, string fileName, DomRegion region, string name) { if (fileName == null) return; - ProvidedDocumentInformation documentInformation = GetDocumentInformation(fileName); + ProvidedDocumentInformation documentInformation = FindReferencesAndRenameHelper.GetDocumentInformation(fileName); int offset = documentInformation.Document.PositionToOffset(new Point(region.BeginColumn - 1, region.BeginLine - 1)); string text = documentInformation.TextBuffer.GetText(offset, Math.Min(name.Length + 30, documentInformation.TextBuffer.Length - offset - 1)); int offsetChange = text.IndexOf(name); @@ -148,7 +148,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands if (derivedClass.CompilationUnit.FileName == null) continue; SearchResult res = new SimpleSearchResult(derivedClass.FullyQualifiedName, new Point(derivedClass.Region.BeginColumn - 1, derivedClass.Region.BeginLine - 1)); - res.ProvidedDocumentInformation = GetDocumentInformation(derivedClass.CompilationUnit.FileName); + res.ProvidedDocumentInformation = FindReferencesAndRenameHelper.GetDocumentInformation(derivedClass.CompilationUnit.FileName); results.Add(res); } SearchReplaceInFilesManager.ShowSearchResults("Classes deriving from " + c.Name, results); @@ -158,7 +158,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands { MenuCommand item = (MenuCommand)sender; IClass c = (IClass)item.Tag; - ShowAsSearchResults("References to " + c.Name, RefactoringService.FindReferences(c, null)); + FindReferencesAndRenameHelper.ShowAsSearchResults("References to " + c.Name, RefactoringService.FindReferences(c, null)); } } } diff --git a/src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs b/src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs index eaf68bd701..4ba49643a9 100644 --- a/src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs +++ b/src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs @@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands /// /// Build context menu for class members in the text editor. /// - public class ClassMemberMenuBuilder : ParserBookmarkMenuBuilderBase, ISubmenuBuilder + public class ClassMemberMenuBuilder : ISubmenuBuilder { public ToolStripItem[] BuildSubmenu(Codon codon, object owner) { @@ -42,7 +42,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands List list = new List(); if (method == null || !method.IsConstructor) { - if (!IsReadOnly(member.DeclaringType)) { + if (!FindReferencesAndRenameHelper.IsReadOnly(member.DeclaringType)) { cmd = new MenuCommand("${res:SharpDevelop.Refactoring.RenameCommand}", Rename); cmd.Tag = member; list.Add(cmd); @@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands cmd.Tag = foundProperty; list.Add(cmd); } else { - if (!IsReadOnly(member.DeclaringType)) { + if (!FindReferencesAndRenameHelper.IsReadOnly(member.DeclaringType)) { cmd = new MenuCommand("${res:SharpDevelop.Refactoring.CreateGetter}", CreateGetter); cmd.Tag = member; list.Add(cmd); @@ -112,7 +112,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands { MenuCommand item = (MenuCommand)sender; IMember member = (IMember)item.Tag; - TextEditorControl textEditor = JumpBehindDefinition(member); + TextEditorControl textEditor = FindReferencesAndRenameHelper.JumpBehindDefinition(member); AbstractPropertyCodeGenerator generator; if (includeSetter) @@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands void GotoTagMember(object sender, EventArgs e) { - JumpToDefinition((IMember)(sender as MenuCommand).Tag); + FindReferencesAndRenameHelper.JumpToDefinition((IMember)(sender as MenuCommand).Tag); } void GoToBase(object sender, EventArgs e) @@ -141,7 +141,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands IMember member = (IMember)item.Tag; IMember baseMember = RefactoringService.FindBaseMember(member); if (baseMember != null) { - JumpToDefinition(baseMember); + FindReferencesAndRenameHelper.JumpToDefinition(baseMember); } } @@ -150,11 +150,11 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands MenuCommand item = (MenuCommand)sender; IMember member = (IMember)item.Tag; string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameMemberText}", member.Name); - if (!CheckName(newName)) return; + if (!FindReferencesAndRenameHelper.CheckName(newName)) return; List list = RefactoringService.FindReferences(member, null); if (list == null) return; - RenameReferences(list, newName); + FindReferencesAndRenameHelper.RenameReferences(list, newName); if (member is IField) { IProperty property = FindProperty((IField)member); @@ -164,7 +164,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands if (MessageService.AskQuestionFormatted("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameFieldAndProperty}", property.FullyQualifiedName, newPropertyName)) { list = RefactoringService.FindReferences(property, null); if (list != null) { - RenameReferences(list, newPropertyName); + FindReferencesAndRenameHelper.RenameReferences(list, newPropertyName); } } } @@ -184,7 +184,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands IMember m = RefactoringService.FindSimilarMember(derivedClass, member); if (m != null && !m.Region.IsEmpty) { SearchResult res = new SimpleSearchResult(m.FullyQualifiedName, new Point(m.Region.BeginColumn - 1, m.Region.BeginLine - 1)); - res.ProvidedDocumentInformation = GetDocumentInformation(derivedClass.CompilationUnit.FileName); + res.ProvidedDocumentInformation = FindReferencesAndRenameHelper.GetDocumentInformation(derivedClass.CompilationUnit.FileName); results.Add(res); } } @@ -195,7 +195,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands { MenuCommand item = (MenuCommand)sender; IMember member = (IMember)item.Tag; - ShowAsSearchResults("References to " + member.Name, RefactoringService.FindReferences(member, null)); + FindReferencesAndRenameHelper.ShowAsSearchResults("References to " + member.Name, RefactoringService.FindReferences(member, null)); } } }