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 @@
// <version>$Revision: $</version> // <version>$Revision: $</version>
// </file> // </file>
using System; using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Refactoring; using ICSharpCode.SharpDevelop.Refactoring;
@ -17,14 +18,13 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{ {
protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol) protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol)
{ {
if (symbol == null) var classUnderCaret = GetClass(symbol);
return; if (classUnderCaret != null)
if (symbol is TypeResolveResult) { {
var classUnderCaret = ((TypeResolveResult)symbol).ResolvedClass;
if (classUnderCaret == null)
return;
ContextActionsHelper.MakePopupWithBaseClasses(classUnderCaret).Open(editor); 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 @@
// <version>$Revision: $</version> // <version>$Revision: $</version>
// </file> // </file>
using System; using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Refactoring; using ICSharpCode.SharpDevelop.Refactoring;
@ -17,20 +18,18 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{ {
protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol) protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol)
{ {
if (symbol == null) var classUnderCaret = GetClass(symbol);
return; if (classUnderCaret != null) {
if (symbol is TypeResolveResult) {
var classUnderCaret = ((TypeResolveResult)symbol).ResolvedClass;
if (classUnderCaret == null)
return;
ContextActionsHelper.MakePopupWithDerivedClasses(classUnderCaret).Open(editor); ContextActionsHelper.MakePopupWithDerivedClasses(classUnderCaret).Open(editor);
return;
} }
if (symbol is MemberResolveResult) { var memberUnderCaret = GetMember(symbol);
IMember memberUnderCaret = ((MemberResolveResult)symbol).ResolvedMember as IMember; if (memberUnderCaret != null && memberUnderCaret.IsOverridable)
if (memberUnderCaret != null && memberUnderCaret.IsOverridable) { {
ContextActionsHelper.MakePopupWithOverrides(memberUnderCaret).Open(editor); 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
{ {
protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol) protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol)
{ {
if (symbol == null) var classUnderCaret = GetClass(symbol);
return; if (classUnderCaret != null) {
if (symbol is TypeResolveResult) {
var classUnderCaret = ((TypeResolveResult)symbol).ResolvedClass;
if (classUnderCaret == null)
return;
FindReferencesAndRenameHelper.RunFindReferences(classUnderCaret); FindReferencesAndRenameHelper.RunFindReferences(classUnderCaret);
return;
} }
if (symbol is MemberResolveResult) { var memberUnderCaret = GetMember(symbol);
IMember memberUnderCaret = ((MemberResolveResult)symbol).ResolvedMember as IMember; if (memberUnderCaret != null)
if (memberUnderCaret == null) {
return;
FindReferencesAndRenameHelper.RunFindReferences(memberUnderCaret); 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
RunImpl(editor, caretOffset, resolveResult); 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); 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
} }
} }
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) public static ICSharpCode.Core.WinForms.MenuCommand MakeFindReferencesMenuCommand(EventHandler handler)
{ {
return new ICSharpCode.Core.WinForms.MenuCommand("${res:SharpDevelop.Refactoring.FindReferencesCommand}", 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 #endregion
} }

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

@ -18,11 +18,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
{ {
RefactoringMenuContext context = (RefactoringMenuContext)Owner; RefactoringMenuContext context = (RefactoringMenuContext)Owner;
LocalResolveResult local = (LocalResolveResult)context.ResolveResult; LocalResolveResult local = (LocalResolveResult)context.ResolveResult;
FindReferencesAndRenameHelper.ShowAsSearchResults( FindReferencesAndRenameHelper.RunFindReferences(local);
StringParser.Parse("${res:SharpDevelop.Refactoring.ReferencesTo}",
new string[,] {{ "Name", local.VariableName }}),
RefactoringService.FindReferences(local, null)
);
} }
} }

Loading…
Cancel
Save