Skip to content

Commit e940bd9

Browse files
committed
Move RefactorRename and its commands to ISeelctionService
1 parent 2f44375 commit e940bd9

File tree

8 files changed

+131
-116
lines changed

8 files changed

+131
-116
lines changed

Rubberduck.CodeAnalysis/QuickFixes/RenameDeclarationQuickFix.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,26 @@
1010
using Rubberduck.Refactorings.Rename;
1111
using Rubberduck.Resources;
1212
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
13+
using Rubberduck.VBEditor.Utility;
1314

1415
namespace Rubberduck.Inspections.QuickFixes
1516
{
1617
public sealed class RenameDeclarationQuickFix : QuickFixBase
1718
{
18-
private readonly IVBE _vbe;
19+
private readonly ISelectionService _selectionService;
1920
private readonly RubberduckParserState _state;
2021
private readonly IRewritingManager _rewritingManager;
2122
private readonly IMessageBox _messageBox;
2223
private readonly IRefactoringPresenterFactory _factory;
2324

24-
public RenameDeclarationQuickFix(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
25+
public RenameDeclarationQuickFix(RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2526
: base(typeof(HungarianNotationInspection),
2627
typeof(UseMeaningfulNameInspection),
2728
typeof(DefaultProjectNameInspection),
2829
typeof(UnderscoreInPublicClassModuleMemberInspection),
2930
typeof(ExcelUdfNameIsValidCellReferenceInspection))
3031
{
31-
_vbe = vbe;
32+
_selectionService = selectionService;
3233
_state = state;
3334
_rewritingManager = rewritingManager;
3435
_messageBox = messageBox;
@@ -38,7 +39,7 @@ public RenameDeclarationQuickFix(IVBE vbe, RubberduckParserState state, IMessage
3839
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
3940
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
4041
{
41-
var refactoring = new RenameRefactoring(_vbe, _factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager);
42+
var refactoring = new RenameRefactoring(_factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
4243
refactoring.Refactor(result.Target);
4344
}
4445

Rubberduck.Core/UI/CodeExplorer/Commands/RenameCommand.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using Rubberduck.Parsing.VBA;
77
using Rubberduck.Refactorings;
88
using Rubberduck.Refactorings.Rename;
9-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
9+
using Rubberduck.VBEditor.Utility;
1010

1111
namespace Rubberduck.UI.CodeExplorer.Commands
1212
{
@@ -19,15 +19,15 @@ public sealed class RenameCommand : CodeExplorerCommandBase
1919
typeof(CodeExplorerMemberViewModel)
2020
};
2121

22-
private readonly IVBE _vbe;
2322
private readonly RubberduckParserState _state;
2423
private readonly IRefactoringPresenterFactory _factory;
2524
private readonly IMessageBox _msgBox;
2625
private readonly IRewritingManager _rewritingManager;
26+
private readonly ISelectionService _selectionService;
2727

28-
public RenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
28+
public RenameCommand(RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2929
{
30-
_vbe = vbe;
30+
_selectionService = selectionService;
3131
_state = state;
3232
_rewritingManager = rewritingManager;
3333
_msgBox = msgBox;
@@ -38,7 +38,7 @@ public RenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox msgBox,
3838

3939
protected override bool EvaluateCanExecute(object parameter)
4040
{
41-
return base.EvaluateCanExecute(parameter) && _state.Status == ParserState.Ready;
41+
return _state.Status == ParserState.Ready && base.EvaluateCanExecute(parameter);
4242
}
4343

4444
protected override void OnExecute(object parameter)
@@ -50,7 +50,7 @@ protected override void OnExecute(object parameter)
5050
return;
5151
}
5252

53-
var refactoring = new RenameRefactoring(_vbe, _factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager);
53+
var refactoring = new RenameRefactoring(_factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
5454
refactoring.Refactor(node.Declaration);
5555
}
5656
}

Rubberduck.Core/UI/Command/Refactorings/CodePaneRefactorRenameCommand.cs

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Rubberduck.Refactorings.Rename;
88
using Rubberduck.UI.Refactorings.Rename;
99
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10+
using Rubberduck.VBEditor.Utility;
1011

1112
namespace Rubberduck.UI.Command.Refactorings
1213
{
@@ -17,61 +18,54 @@ public class CodePaneRefactorRenameCommand : RefactorCommandBase
1718
private readonly IRewritingManager _rewritingManager;
1819
private readonly IMessageBox _messageBox;
1920
private readonly IRefactoringPresenterFactory _factory;
21+
private readonly ISelectionService _selectionService;
2022

21-
public CodePaneRefactorRenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
23+
public CodePaneRefactorRenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2224
: base (vbe)
2325
{
2426
_state = state;
2527
_rewritingManager = rewritingManager;
2628
_messageBox = messageBox;
2729
_factory = factory;
30+
_selectionService = selectionService;
2831
}
2932

3033
protected override bool EvaluateCanExecute(object parameter)
3134
{
32-
Declaration target;
33-
using (var activePane = Vbe.ActiveCodePane)
35+
if (_state.Status != ParserState.Ready)
3436
{
35-
if (activePane == null || activePane.IsWrappingNullReference)
36-
{
37-
return false;
38-
}
39-
40-
target = _state.FindSelectedDeclaration(activePane);
37+
return false;
38+
}
39+
40+
var activeSelection = _selectionService.ActiveSelection();
41+
if (!activeSelection.HasValue)
42+
{
43+
return false;
4144
}
4245

43-
return _state.Status == ParserState.Ready
44-
&& target != null
46+
var target = _state.DeclarationFinder.FindSelectedDeclaration(activeSelection.Value);
47+
48+
return target != null
4549
&& target.IsUserDefined
4650
&& !_state.IsNewOrModified(target.QualifiedModuleName);
4751
}
4852

4953
protected override void OnExecute(object parameter)
5054
{
51-
Declaration target;
52-
using (var activePane = Vbe.ActiveCodePane)
55+
var activeSelection = _selectionService.ActiveSelection();
56+
if (!activeSelection.HasValue)
5357
{
54-
if (activePane == null || activePane.IsWrappingNullReference)
55-
{
56-
return;
57-
}
58-
59-
if (parameter != null)
60-
{
61-
target = parameter as Declaration;
62-
}
63-
else
64-
{
65-
target = _state.FindSelectedDeclaration(activePane);
66-
}
58+
return;
6759
}
6860

61+
var target = _state.DeclarationFinder.FindSelectedDeclaration(activeSelection.Value);
62+
6963
if (target == null || !target.IsUserDefined)
7064
{
7165
return;
7266
}
7367

74-
var refactoring = new RenameRefactoring(Vbe, _factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager);
68+
var refactoring = new RenameRefactoring(_factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
7569
refactoring.Refactor(target);
7670
}
7771
}

Rubberduck.Core/UI/Command/Refactorings/FormDesignerRefactorRenameCommand.cs

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Rubberduck.Refactorings.Rename;
99
using Rubberduck.VBEditor;
1010
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
11+
using Rubberduck.VBEditor.Utility;
1112

1213
namespace Rubberduck.UI.Command.Refactorings
1314
{
@@ -18,25 +19,34 @@ public class FormDesignerRefactorRenameCommand : RefactorCommandBase
1819
private readonly IRewritingManager _rewritingManager;
1920
private readonly IMessageBox _messageBox;
2021
private readonly IRefactoringPresenterFactory _factory;
22+
private readonly ISelectionService _selectionService;
23+
private readonly IVBE _vbe;
2124

22-
public FormDesignerRefactorRenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
25+
public FormDesignerRefactorRenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2326
: base (vbe)
2427
{
2528
_state = state;
2629
_rewritingManager = rewritingManager;
2730
_messageBox = messageBox;
2831
_factory = factory;
32+
_selectionService = selectionService;
33+
_vbe = vbe;
2934
}
3035

3136
protected override bool EvaluateCanExecute(object parameter)
3237
{
38+
if (_state.Status != ParserState.Ready)
39+
{
40+
return false;
41+
}
42+
3343
var target = GetTarget();
34-
return _state.Status == ParserState.Ready && target != null && !_state.IsNewOrModified(target.QualifiedModuleName);
44+
return target != null && !_state.IsNewOrModified(target.QualifiedModuleName);
3545
}
3646

3747
protected override void OnExecute(object parameter)
3848
{
39-
var refactoring = new RenameRefactoring(Vbe, _factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager);
49+
var refactoring = new RenameRefactoring(_factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
4050
var target = GetTarget();
4151
if (target != null)
4252
{
@@ -45,48 +55,43 @@ protected override void OnExecute(object parameter)
4555

4656
}
4757

48-
private Declaration GetTarget(QualifiedModuleName? qualifiedModuleName = null)
58+
private Declaration GetTarget()
4959
{
50-
if (qualifiedModuleName.HasValue)
51-
{
52-
return GetTarget(qualifiedModuleName.Value);
53-
}
54-
5560
string projectId;
56-
using (var activeProject = Vbe.ActiveVBProject)
61+
using (var activeProject = _vbe.ActiveVBProject)
5762
{
5863
projectId = activeProject.ProjectId;
5964
}
6065

61-
using (var component = Vbe.SelectedVBComponent)
66+
using (var component = _vbe.SelectedVBComponent)
6267
{
63-
if (component?.HasDesigner ?? false)
68+
if (!(component?.HasDesigner ?? false))
6469
{
65-
DeclarationType selectedType;
66-
string selectedName;
67-
using (var selectedControls = component.SelectedControls)
68-
{
69-
var selectedCount = selectedControls.Count;
70-
if (selectedCount > 1)
71-
{
72-
return null;
73-
}
70+
return null;
71+
}
7472

75-
// Cannot use DeclarationType.UserForm, parser only assigns UserForms the ClassModule flag
76-
(selectedType, selectedName) = selectedCount == 0
77-
? (DeclarationType.ClassModule, component.Name)
78-
: (DeclarationType.Control, selectedControls[0].Name);
73+
DeclarationType selectedType;
74+
string selectedName;
75+
using (var selectedControls = component.SelectedControls)
76+
{
77+
var selectedCount = selectedControls.Count;
78+
if (selectedCount > 1)
79+
{
80+
return null;
7981
}
8082

81-
return _state.DeclarationFinder
82-
.MatchName(selectedName)
83-
.SingleOrDefault(m => m.ProjectId == projectId
84-
&& m.DeclarationType.HasFlag(selectedType)
85-
&& m.ComponentName == component.Name);
83+
// Cannot use DeclarationType.UserForm, parser only assigns UserForms the ClassModule flag
84+
(selectedType, selectedName) = selectedCount == 0
85+
? (DeclarationType.ClassModule, component.Name)
86+
: (DeclarationType.Control, selectedControls[0].Name);
8687
}
87-
}
8888

89-
return null;
89+
return _state.DeclarationFinder
90+
.MatchName(selectedName)
91+
.SingleOrDefault(m => m.ProjectId == projectId
92+
&& m.DeclarationType.HasFlag(selectedType)
93+
&& m.ComponentName == component.Name);
94+
}
9095
}
9196

9297
private Declaration GetTarget(QualifiedModuleName qualifiedModuleName)

Rubberduck.Core/UI/Command/Refactorings/ProjectExplorerRefactorRenameCommand.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
using Rubberduck.Parsing.VBA;
77
using Rubberduck.Refactorings;
88
using Rubberduck.Refactorings.Rename;
9-
using Rubberduck.UI.Refactorings.Rename;
109
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10+
using Rubberduck.VBEditor.Utility;
1111

1212
namespace Rubberduck.UI.Command.Refactorings
1313
{
@@ -18,14 +18,18 @@ public class ProjectExplorerRefactorRenameCommand : RefactorCommandBase
1818
private readonly IRewritingManager _rewritingManager;
1919
private readonly IMessageBox _msgBox;
2020
private readonly IRefactoringPresenterFactory _factory;
21+
private readonly ISelectionService _selectionService;
22+
private readonly IVBE _vbe;
2123

22-
public ProjectExplorerRefactorRenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
24+
public ProjectExplorerRefactorRenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2325
: base(vbe)
2426
{
2527
_state = state;
2628
_rewritingManager = rewritingManager;
2729
_msgBox = msgBox;
2830
_factory = factory;
31+
_selectionService = selectionService;
32+
_vbe = vbe;
2933
}
3034

3135
protected override bool EvaluateCanExecute(object parameter)
@@ -35,7 +39,7 @@ protected override bool EvaluateCanExecute(object parameter)
3539

3640
protected override void OnExecute(object parameter)
3741
{
38-
var refactoring = new RenameRefactoring(Vbe, _factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager);
42+
var refactoring = new RenameRefactoring(_factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
3943
var target = GetTarget();
4044
if (target != null)
4145
{
@@ -46,13 +50,13 @@ protected override void OnExecute(object parameter)
4650
private Declaration GetTarget()
4751
{
4852
string selectedComponentName;
49-
using (var selectedComponent = Vbe.SelectedVBComponent)
53+
using (var selectedComponent = _vbe.SelectedVBComponent)
5054
{
5155
selectedComponentName = selectedComponent?.Name;
5256
}
5357

5458
string activeProjectId;
55-
using (var activeProject = Vbe.ActiveVBProject)
59+
using (var activeProject = _vbe.ActiveVBProject)
5660
{
5761
activeProjectId = activeProject?.ProjectId;
5862
}

0 commit comments

Comments
 (0)