Skip to content

Commit ee70c71

Browse files
committed
Merge pull request #972 from SlavaRa/feature/issue_237
closes #237
2 parents 77a41e2 + bf06961 commit ee70c71

File tree

6 files changed

+98
-17
lines changed

6 files changed

+98
-17
lines changed

External/Plugins/CodeRefactor/CodeRefactor.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
<Compile Include="Provider\DocumentHelper.cs" />
115115
<Compile Include="Provider\MovingHelper.cs" />
116116
<Compile Include="Provider\RefactoringHelper.cs" />
117+
<Compile Include="Provider\RenamingHelper.cs" />
117118
<Compile Include="Provider\UserInterfaceManager.cs" />
118119
<Compile Include="RefactorItem.cs" />
119120
<Compile Include="Settings.cs" />

External/Plugins/CodeRefactor/Commands/Rename.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,8 @@ public Rename(ASResult target, Boolean outputResults, String newName, Boolean ig
111111
}
112112
return;
113113
}
114-
Boolean isEnum = target.Type.IsEnum();
115-
Boolean isVoid = target.Type.IsVoid();
116-
Boolean isClass = !isVoid && target.IsStatic && (target.Member == null || RefactoringHelper.CheckFlag(target.Member.Flags, FlagType.Constructor));
117114

118-
if (!string.IsNullOrEmpty(newName))
119-
this.newName = newName;
120-
else if (isEnum || isClass)
121-
this.newName = GetNewName(target.Type.Name);
122-
else
123-
this.newName = GetNewName(target.Member.Name);
115+
this.newName = !string.IsNullOrEmpty(newName) ? newName : GetNewName(RefactoringHelper.GetRefactorTargetName(target));
124116

125117
if (string.IsNullOrEmpty(this.newName)) return;
126118

@@ -372,10 +364,10 @@ private String GetNewName(String originalName)
372364
String label = TextHelper.GetString("Label.NewName");
373365
String title = String.Format(TextHelper.GetString("Title.RenameDialog"), originalName);
374366
LineEntryDialog askName = new LineEntryDialog(title, label, originalName);
375-
DialogResult choice = askName.ShowDialog();
376-
if (choice == DialogResult.OK && askName.Line.Trim().Length > 0 && askName.Line.Trim() != originalName)
367+
if (askName.ShowDialog() == DialogResult.OK)
377368
{
378-
return askName.Line.Trim();
369+
string newName = askName.Line.Trim();
370+
if(newName.Length > 0 && newName != originalName) return newName;
379371
}
380372
return null;
381373
}

External/Plugins/CodeRefactor/PluginMain.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,7 @@ private void RenameClicked(Object sender, EventArgs e)
423423
{
424424
try
425425
{
426-
Rename command = new Rename(true);
427-
command.Execute();
426+
RenamingHelper.AddToQueue(RefactoringHelper.GetDefaultRefactorTarget());
428427
}
429428
catch (Exception ex)
430429
{

External/Plugins/CodeRefactor/Provider/MovingHelper.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public static void AddToQueue(Dictionary<string, string> oldPathToNewPath, bool
2626
public static void AddToQueue(Dictionary<string, string> oldPathToNewPath, bool outputResults, bool renaming)
2727
{
2828
queue.Add(new QueueItem(oldPathToNewPath, outputResults, renaming));
29-
if (currentCommand == null) MoveFirst();
29+
if (currentCommand == null) ExecuteFirst();
3030
}
3131

32-
private static void MoveFirst()
32+
private static void ExecuteFirst()
3333
{
3434
try
3535
{
@@ -60,7 +60,7 @@ private static void OnRefactorComplete(object sender, RefactorCompleteEventArgs<
6060
results[path].AddRange(entry.Value);
6161
}
6262
}
63-
if (queue.Count > 0) MoveFirst();
63+
if (queue.Count > 0) ExecuteFirst();
6464
else
6565
{
6666
if (results.Count > 0) ReportResults();

External/Plugins/CodeRefactor/Provider/RefactoringHelper.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,15 @@ public static ASResult GetDefaultRefactorTarget()
102102
return DeclarationLookupResult(sci, position);
103103
}
104104

105+
public static string GetRefactorTargetName(ASResult target)
106+
{
107+
ClassModel type = target.Type;
108+
MemberModel member = target.Member;
109+
if (type.IsEnum() || !type.IsVoid() && target.IsStatic && (member == null || (member.Flags & FlagType.Constructor) > 0))
110+
return type.Name;
111+
return member.Name;
112+
}
113+
105114
/// <summary>
106115
/// Retrieves the refactoring target based on the file.
107116
/// </summary>
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using CodeRefactor.Commands;
2+
using PluginCore.FRService;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Windows.Forms;
7+
using ASCompletion.Completion;
8+
using ASCompletion.Context;
9+
using ASCompletion.Model;
10+
using PluginCore.Localization;
11+
using PluginCore.Managers;
12+
using ProjectManager.Helpers;
13+
14+
namespace CodeRefactor.Provider
15+
{
16+
class RenamingHelper
17+
{
18+
static readonly List<Rename> queue = new List<Rename>();
19+
static Rename currentCommand;
20+
21+
public static void AddToQueue(ASResult target)
22+
{
23+
AddToQueue(target, true);
24+
}
25+
public static void AddToQueue(ASResult target, bool outputResults)
26+
{
27+
string originalName = RefactoringHelper.GetRefactorTargetName(target);
28+
string label = TextHelper.GetString("Label.NewName");
29+
string title = string.Format(TextHelper.GetString("Title.RenameDialog"), originalName);
30+
LineEntryDialog askName = new LineEntryDialog(title, label, originalName);
31+
if (askName.ShowDialog() == DialogResult.OK)
32+
{
33+
string newName = askName.Line.Trim();
34+
if (newName.Length == 0 || newName == originalName) return;
35+
queue.Add(new Rename(target, outputResults, newName));
36+
if (ASContext.Context.CurrentModel.haXe && target.Member != null &&
37+
(target.Member.Flags & (FlagType.Getter | FlagType.Setter)) > 0)
38+
{
39+
List<MemberModel> list = target.Member.Parameters;
40+
if (list[0].Name == "get") RenameMember(target.InClass, "get_" + originalName, "get_" + newName, outputResults);
41+
if (list[1].Name == "set") RenameMember(target.InClass, "set_" + originalName, "set_" + newName, outputResults);
42+
}
43+
if (currentCommand == null) ExecuteFirst();
44+
}
45+
}
46+
47+
static void RenameMember(ClassModel inClass, string name, string newName, bool outputResults)
48+
{
49+
MemberModel m = inClass.Members.Items.FirstOrDefault(it => it.Name == name);
50+
if (m == null) return;
51+
ASResult result = new ASResult();
52+
ASComplete.FindMember(name, inClass, result, FlagType.Dynamic | FlagType.Function, 0);
53+
if (result.Member == null) return;
54+
queue.Add(new Rename(result, outputResults, newName));
55+
}
56+
57+
static void ExecuteFirst()
58+
{
59+
try
60+
{
61+
currentCommand = queue[0];
62+
queue.Remove(currentCommand);
63+
currentCommand.OnRefactorComplete += OnRefactorComplete;
64+
currentCommand.Execute();
65+
}
66+
catch (Exception ex)
67+
{
68+
queue.Clear();
69+
currentCommand = null;
70+
ErrorManager.ShowError(ex);
71+
}
72+
}
73+
74+
static void OnRefactorComplete(object sender, RefactorCompleteEventArgs<IDictionary<string, List<SearchMatch>>> e)
75+
{
76+
if (queue.Count > 0) ExecuteFirst();
77+
else currentCommand = null;
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)