Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 514266d

Browse files
fix #434: Code action in BaseMethodParameterNameMismatchIssue doesn't rename symbols
1 parent 4329ac1 commit 514266d

2 files changed

Lines changed: 39 additions & 21 deletions

File tree

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using ICSharpCode.AvalonEdit.Editing;
2525
using ICSharpCode.AvalonEdit.Snippets;
2626
using ICSharpCode.AvalonEdit.Document;
27+
using ICSharpCode.Core;
2728
using ICSharpCode.NRefactory;
2829
using ICSharpCode.NRefactory.CSharp;
2930
using ICSharpCode.NRefactory.CSharp.Refactoring;
@@ -32,6 +33,10 @@
3233
using ICSharpCode.SharpDevelop;
3334
using ICSharpCode.SharpDevelop.Dom;
3435
using ICSharpCode.SharpDevelop.Editor;
36+
using ICSharpCode.SharpDevelop.Editor.Commands;
37+
using ICSharpCode.SharpDevelop.Editor.Dialogs;
38+
using ICSharpCode.SharpDevelop.Gui;
39+
using ICSharpCode.SharpDevelop.Refactoring;
3540
using ICSharpCode.SharpDevelop.Workbench;
3641

3742
namespace CSharpBinding.Refactoring
@@ -102,6 +107,11 @@ public override Task Link(params AstNode[] nodes)
102107
return tcs.Task;
103108
}
104109

110+
public override void Rename(ISymbol symbol, string name = null)
111+
{
112+
RenameSymbolCommand.RunRename(symbol, name);
113+
}
114+
105115
public override Task<Script> InsertWithCursor(string operation, InsertPosition defaultPosition, IList<AstNode> nodes)
106116
{
107117
// TODO : Use undo group

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

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -52,35 +52,43 @@ public class RenameSymbolCommand : ResolveResultMenuCommand
5252
{
5353
public override void Run(ResolveResult symbol)
5454
{
55-
var entity = GetSymbol(symbol);
56-
if ((entity is IMember) && ((entity.SymbolKind == SymbolKind.Constructor) || (entity.SymbolKind == SymbolKind.Destructor))) {
55+
RunRename(GetSymbol(symbol));
56+
}
57+
58+
public static void RunRename(ISymbol symbol, string newName = null)
59+
{
60+
if ((symbol is IMember) && ((symbol.SymbolKind == SymbolKind.Constructor) || (symbol.SymbolKind == SymbolKind.Destructor))) {
5761
// Don't rename constructors/destructors, rename their declaring type instead
58-
entity = ((IMember) entity).DeclaringType.GetDefinition();
62+
symbol = ((IMember) symbol).DeclaringType.GetDefinition();
5963
}
60-
if (entity != null) {
61-
var project = GetProjectFromSymbol(entity);
64+
if (symbol != null) {
65+
var project = GetProjectFromSymbol(symbol);
6266
if (project != null) {
6367
var languageBinding = project.LanguageBinding;
64-
65-
RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding))
66-
{
67-
Owner = SD.Workbench.MainWindow,
68-
OldSymbolName = entity.Name,
69-
NewSymbolName = entity.Name
70-
};
71-
if ((bool) renameDialog.ShowDialog()) {
72-
AsynchronousWaitDialog.ShowWaitDialogForAsyncOperation(
73-
"${res:SharpDevelop.Refactoring.Rename}",
74-
progressMonitor =>
75-
FindReferenceService.RenameSymbol(entity, renameDialog.NewSymbolName, progressMonitor)
76-
.ObserveOnUIThread()
77-
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {}));
68+
if (newName == null) {
69+
RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding))
70+
{
71+
Owner = SD.Workbench.MainWindow,
72+
OldSymbolName = symbol.Name,
73+
NewSymbolName = symbol.Name
74+
};
75+
if (renameDialog.ShowDialog() == true) {
76+
newName = renameDialog.NewSymbolName;
77+
} else {
78+
return;
79+
}
7880
}
81+
AsynchronousWaitDialog.ShowWaitDialogForAsyncOperation(
82+
"${res:SharpDevelop.Refactoring.Rename}",
83+
progressMonitor =>
84+
FindReferenceService.RenameSymbol(symbol, newName, progressMonitor)
85+
.ObserveOnUIThread()
86+
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {}));
7987
}
8088
}
8189
}
8290

83-
ICSharpCode.SharpDevelop.Project.IProject GetProjectFromSymbol(ISymbol symbol)
91+
static ICSharpCode.SharpDevelop.Project.IProject GetProjectFromSymbol(ISymbol symbol)
8492
{
8593
switch (symbol.SymbolKind) {
8694
case SymbolKind.None:
@@ -113,7 +121,7 @@ ICSharpCode.SharpDevelop.Project.IProject GetProjectFromSymbol(ISymbol symbol)
113121
}
114122
}
115123

116-
bool CheckName(string name, ILanguageBinding language)
124+
static bool CheckName(string name, ILanguageBinding language)
117125
{
118126
if (string.IsNullOrEmpty(name))
119127
return false;

0 commit comments

Comments
 (0)