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. 34
      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; @@ -24,6 +24,7 @@ using System.Windows.Threading;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Refactoring;
@ -32,6 +33,10 @@ using ICSharpCode.NRefactory.TypeSystem; @@ -32,6 +33,10 @@ using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
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;
namespace CSharpBinding.Refactoring
@ -102,6 +107,11 @@ namespace CSharpBinding.Refactoring @@ -102,6 +107,11 @@ namespace CSharpBinding.Refactoring
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)
{
// TODO : Use undo group

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

@ -52,35 +52,43 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -52,35 +52,43 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{
public override void Run(ResolveResult symbol)
{
var entity = GetSymbol(symbol);
if ((entity is IMember) && ((entity.SymbolKind == SymbolKind.Constructor) || (entity.SymbolKind == SymbolKind.Destructor))) {
RunRename(GetSymbol(symbol));
}
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
entity = ((IMember) entity).DeclaringType.GetDefinition();
symbol = ((IMember) symbol).DeclaringType.GetDefinition();
}
if (entity != null) {
var project = GetProjectFromSymbol(entity);
if (symbol != null) {
var project = GetProjectFromSymbol(symbol);
if (project != null) {
var languageBinding = project.LanguageBinding;
if (newName == null) {
RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding))
{
Owner = SD.Workbench.MainWindow,
OldSymbolName = entity.Name,
NewSymbolName = entity.Name
OldSymbolName = symbol.Name,
NewSymbolName = symbol.Name
};
if ((bool) renameDialog.ShowDialog()) {
if (renameDialog.ShowDialog() == true) {
newName = renameDialog.NewSymbolName;
} else {
return;
}
}
AsynchronousWaitDialog.ShowWaitDialogForAsyncOperation(
"${res:SharpDevelop.Refactoring.Rename}",
progressMonitor =>
FindReferenceService.RenameSymbol(entity, renameDialog.NewSymbolName, 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) {
case SymbolKind.None:
@ -113,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -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))
return false;

Loading…
Cancel
Save