Browse Source

fix #434: Code action in BaseMethodParameterNameMismatchIssue doesn't rename symbols

pull/520/head
Siegfried Pammer 11 years ago
parent
commit
514266dfec
  1. 10
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs
  2. 50
      src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs

10
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs

@ -24,6 +24,7 @@ using System.Windows.Threading;
using ICSharpCode.AvalonEdit.Editing; using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Snippets; using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.NRefactory; using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.CSharp.Refactoring;
@ -32,6 +33,10 @@ using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.Commands;
using ICSharpCode.SharpDevelop.Editor.Dialogs;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Refactoring;
using ICSharpCode.SharpDevelop.Workbench; using ICSharpCode.SharpDevelop.Workbench;
namespace CSharpBinding.Refactoring namespace CSharpBinding.Refactoring
@ -102,6 +107,11 @@ namespace CSharpBinding.Refactoring
return tcs.Task; return tcs.Task;
} }
public override void Rename(ISymbol symbol, string name = null)
{
RenameSymbolCommand.RunRename(symbol, name);
}
public override Task<Script> InsertWithCursor(string operation, InsertPosition defaultPosition, IList<AstNode> nodes) public override Task<Script> InsertWithCursor(string operation, InsertPosition defaultPosition, IList<AstNode> nodes)
{ {
// TODO : Use undo group // TODO : Use undo group

50
src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs

@ -52,35 +52,43 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{ {
public override void Run(ResolveResult symbol) public override void Run(ResolveResult symbol)
{ {
var entity = GetSymbol(symbol); RunRename(GetSymbol(symbol));
if ((entity is IMember) && ((entity.SymbolKind == SymbolKind.Constructor) || (entity.SymbolKind == SymbolKind.Destructor))) { }
public static void RunRename(ISymbol symbol, string newName = null)
{
if ((symbol is IMember) && ((symbol.SymbolKind == SymbolKind.Constructor) || (symbol.SymbolKind == SymbolKind.Destructor))) {
// Don't rename constructors/destructors, rename their declaring type instead // Don't rename constructors/destructors, rename their declaring type instead
entity = ((IMember) entity).DeclaringType.GetDefinition(); symbol = ((IMember) symbol).DeclaringType.GetDefinition();
} }
if (entity != null) { if (symbol != null) {
var project = GetProjectFromSymbol(entity); var project = GetProjectFromSymbol(symbol);
if (project != null) { if (project != null) {
var languageBinding = project.LanguageBinding; var languageBinding = project.LanguageBinding;
if (newName == null) {
RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding)) RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding))
{ {
Owner = SD.Workbench.MainWindow, Owner = SD.Workbench.MainWindow,
OldSymbolName = entity.Name, OldSymbolName = symbol.Name,
NewSymbolName = entity.Name NewSymbolName = symbol.Name
}; };
if ((bool) renameDialog.ShowDialog()) { if (renameDialog.ShowDialog() == true) {
AsynchronousWaitDialog.ShowWaitDialogForAsyncOperation( newName = renameDialog.NewSymbolName;
"${res:SharpDevelop.Refactoring.Rename}", } else {
progressMonitor => return;
FindReferenceService.RenameSymbol(entity, renameDialog.NewSymbolName, progressMonitor) }
.ObserveOnUIThread()
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {}));
} }
AsynchronousWaitDialog.ShowWaitDialogForAsyncOperation(
"${res:SharpDevelop.Refactoring.Rename}",
progressMonitor =>
FindReferenceService.RenameSymbol(symbol, newName, progressMonitor)
.ObserveOnUIThread()
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {}));
} }
} }
} }
ICSharpCode.SharpDevelop.Project.IProject GetProjectFromSymbol(ISymbol symbol) static ICSharpCode.SharpDevelop.Project.IProject GetProjectFromSymbol(ISymbol symbol)
{ {
switch (symbol.SymbolKind) { switch (symbol.SymbolKind) {
case SymbolKind.None: case SymbolKind.None:
@ -113,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
} }
} }
bool CheckName(string name, ILanguageBinding language) static bool CheckName(string name, ILanguageBinding language)
{ {
if (string.IsNullOrEmpty(name)) if (string.IsNullOrEmpty(name))
return false; return false;

Loading…
Cancel
Save