Browse Source

"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
pull/1/head
Martin Koníček 16 years ago
parent
commit
15f4a433ce
  1. 12
      src/Main/Base/Project/Src/Editor/Commands/FindBaseClasses.cs
  2. 21
      src/Main/Base/Project/Src/Editor/Commands/FindDerivedClassesOrOverrides.cs
  3. 20
      src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs
  4. 16
      src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretCommand.cs
  5. 13
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
  6. 6
      src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs

12
src/Main/Base/Project/Src/Editor/Commands/FindBaseClasses.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision: $</version>
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Refactoring;
@ -17,14 +18,13 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -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}");
}
}
}

21
src/Main/Base/Project/Src/Editor/Commands/FindDerivedClassesOrOverrides.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision: $</version>
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Refactoring;
@ -17,20 +18,18 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -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}");
}
}
}

20
src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs

@ -17,19 +17,19 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -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);
}
}
}

16
src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretCommand.cs

@ -30,6 +30,22 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -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);
}
}

13
src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs

@ -545,11 +545,20 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -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
}

6
src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs

@ -18,11 +18,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -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);
}
}

Loading…
Cancel
Save