From 15f4a433ce5cd4f2175c0dc0639ae585f1d16cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kon=C3=AD=C4=8Dek?= Date: Sun, 11 Jul 2010 23:21:43 +0000 Subject: [PATCH] "F12 to Find references" also works on local variables. Added error messages if F11 is pressed when caret is not over valid symbol. (Go to definition / Find references stays without error message - error message might be annoying; I think F11 needs some explanation to the user though) git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6098 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Editor/Commands/FindBaseClasses.cs | 12 +++++------ .../Commands/FindDerivedClassesOrOverrides.cs | 21 +++++++++---------- .../Src/Editor/Commands/FindReferences.cs | 20 +++++++++--------- .../Commands/SymbolUnderCaretCommand.cs | 16 ++++++++++++++ .../FindReferencesAndRenameHelper.cs | 13 ++++++++++-- .../LocalVariableRefactoring.cs | 6 +----- 6 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindBaseClasses.cs b/src/Main/Base/Project/Src/Editor/Commands/FindBaseClasses.cs index 00ab0bf8b3..24a25aaa3c 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/FindBaseClasses.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/FindBaseClasses.cs @@ -5,6 +5,7 @@ // $Revision: $ // using System; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Refactoring; @@ -17,14 +18,13 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands { protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol) { - if (symbol == null) - return; - if (symbol is TypeResolveResult) { - var classUnderCaret = ((TypeResolveResult)symbol).ResolvedClass; - if (classUnderCaret == null) - return; + var classUnderCaret = GetClass(symbol); + if (classUnderCaret != null) + { ContextActionsHelper.MakePopupWithBaseClasses(classUnderCaret).Open(editor); + return; } + MessageService.ShowError("${res:ICSharpCode.Refactoring.NoClassUnderCursorError}"); } } } diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindDerivedClassesOrOverrides.cs b/src/Main/Base/Project/Src/Editor/Commands/FindDerivedClassesOrOverrides.cs index 7906842b54..98bf5cdcca 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/FindDerivedClassesOrOverrides.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/FindDerivedClassesOrOverrides.cs @@ -5,6 +5,7 @@ // $Revision: $ // using System; +using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Refactoring; @@ -17,20 +18,18 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands { protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol) { - if (symbol == null) - return; - if (symbol is TypeResolveResult) { - var classUnderCaret = ((TypeResolveResult)symbol).ResolvedClass; - if (classUnderCaret == null) - return; + var classUnderCaret = GetClass(symbol); + if (classUnderCaret != null) { ContextActionsHelper.MakePopupWithDerivedClasses(classUnderCaret).Open(editor); + return; } - if (symbol is MemberResolveResult) { - IMember memberUnderCaret = ((MemberResolveResult)symbol).ResolvedMember as IMember; - if (memberUnderCaret != null && memberUnderCaret.IsOverridable) { - ContextActionsHelper.MakePopupWithOverrides(memberUnderCaret).Open(editor); - } + var memberUnderCaret = GetMember(symbol); + if (memberUnderCaret != null && memberUnderCaret.IsOverridable) + { + ContextActionsHelper.MakePopupWithOverrides(memberUnderCaret).Open(editor); + return; } + MessageService.ShowError("${res:ICSharpCode.Refactoring.NoClassOrOverridableSymbolUnderCursorError}"); } } } diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs b/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs index bb0cb31815..9ac795f323 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs @@ -17,19 +17,19 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands { protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol) { - if (symbol == null) - return; - if (symbol is TypeResolveResult) { - var classUnderCaret = ((TypeResolveResult)symbol).ResolvedClass; - if (classUnderCaret == null) - return; + var classUnderCaret = GetClass(symbol); + if (classUnderCaret != null) { FindReferencesAndRenameHelper.RunFindReferences(classUnderCaret); + return; } - if (symbol is MemberResolveResult) { - IMember memberUnderCaret = ((MemberResolveResult)symbol).ResolvedMember as IMember; - if (memberUnderCaret == null) - return; + var memberUnderCaret = GetMember(symbol); + if (memberUnderCaret != null) + { FindReferencesAndRenameHelper.RunFindReferences(memberUnderCaret); + return; + } + if (symbol is LocalResolveResult) { + FindReferencesAndRenameHelper.RunFindReferences((LocalResolveResult)symbol); } } } diff --git a/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretCommand.cs b/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretCommand.cs index 1770079dea..cc7630d55b 100644 --- a/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretCommand.cs +++ b/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretCommand.cs @@ -30,6 +30,22 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands RunImpl(editor, caretOffset, resolveResult); } + public IClass GetClass(ResolveResult symbol) + { + if (symbol == null || !(symbol is TypeResolveResult)) { + return null; + } + return ((TypeResolveResult)symbol).ResolvedClass; + } + + public IMember GetMember(ResolveResult symbol) + { + if (symbol == null || !(symbol is MemberResolveResult)) { + return null; + } + return ((MemberResolveResult)symbol).ResolvedMember; + } + protected abstract void RunImpl(ITextEditor editor, int caretOffset, ResolveResult symbol); } } diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs index a801085def..8a9b7a71c7 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs @@ -545,11 +545,20 @@ namespace ICSharpCode.SharpDevelop.Refactoring } } + public static void RunFindReferences(LocalResolveResult local) + { + FindReferencesAndRenameHelper.ShowAsSearchResults( + StringParser.Parse("${res:SharpDevelop.Refactoring.ReferencesTo}", + new string[,] {{ "Name", local.VariableName }}), + RefactoringService.FindReferences(local, null) + ); + } + public static ICSharpCode.Core.WinForms.MenuCommand MakeFindReferencesMenuCommand(EventHandler handler) { return new ICSharpCode.Core.WinForms.MenuCommand("${res:SharpDevelop.Refactoring.FindReferencesCommand}", handler) { - ShortcutKeys = System.Windows.Forms.Keys.F12 - }; + ShortcutKeys = System.Windows.Forms.Keys.F12 + }; } #endregion } diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs b/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs index 3cd85e865f..aa4f89700b 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs @@ -18,11 +18,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring { RefactoringMenuContext context = (RefactoringMenuContext)Owner; LocalResolveResult local = (LocalResolveResult)context.ResolveResult; - FindReferencesAndRenameHelper.ShowAsSearchResults( - StringParser.Parse("${res:SharpDevelop.Refactoring.ReferencesTo}", - new string[,] {{ "Name", local.VariableName }}), - RefactoringService.FindReferences(local, null) - ); + FindReferencesAndRenameHelper.RunFindReferences(local); } }