Skip to content

Commit 5a31af2

Browse files
committed
Move ReorderParameters and its command to ISelectionService
1 parent 047fd73 commit 5a31af2

File tree

4 files changed

+116
-193
lines changed

4 files changed

+116
-193
lines changed

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

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Rubberduck.Refactorings.ReorderParameters;
1010
using Rubberduck.UI.Refactorings.ReorderParameters;
1111
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
12+
using Rubberduck.VBEditor.Utility;
1213

1314
namespace Rubberduck.UI.Command.Refactorings
1415
{
@@ -19,14 +20,16 @@ public class RefactorReorderParametersCommand : RefactorCommandBase
1920
private readonly IRewritingManager _rewritingManager;
2021
private readonly IMessageBox _msgbox;
2122
private readonly IRefactoringPresenterFactory _factory;
23+
private readonly ISelectionService _selectionService;
2224

23-
public RefactorReorderParametersCommand(IVBE vbe, RubberduckParserState state, IRefactoringPresenterFactory factory, IMessageBox msgbox, IRewritingManager rewritingManager)
25+
public RefactorReorderParametersCommand(IVBE vbe, RubberduckParserState state, IRefactoringPresenterFactory factory, IMessageBox msgbox, IRewritingManager rewritingManager, ISelectionService selectionService)
2426
: base (vbe)
2527
{
2628
_state = state;
2729
_rewritingManager = rewritingManager;
2830
_msgbox = msgbox;
2931
_factory = factory;
32+
_selectionService = selectionService;
3033
}
3134

3235
private static readonly DeclarationType[] ValidDeclarationTypes =
@@ -46,22 +49,18 @@ protected override bool EvaluateCanExecute(object parameter)
4649
return false;
4750
}
4851

49-
var selection = Vbe.GetActiveSelection();
50-
if (selection == null)
52+
var activeSelection = _selectionService.ActiveSelection();
53+
if (!activeSelection.HasValue)
5154
{
5255
return false;
5356
}
54-
var member = _state.AllUserDeclarations.FindTarget(selection.Value, ValidDeclarationTypes);
55-
if (member == null)
56-
{
57-
return false;
58-
}
59-
if (_state.IsNewOrModified(member.QualifiedModuleName))
57+
var member = _state.AllUserDeclarations.FindTarget(activeSelection.Value, ValidDeclarationTypes);
58+
if (member == null || _state.IsNewOrModified(member.QualifiedModuleName))
6059
{
6160
return false;
6261
}
6362

64-
var parameters = _state.AllUserDeclarations.Where(item => item.DeclarationType == DeclarationType.Parameter && member.Equals(item.ParentScopeDeclaration)).ToList();
63+
var parameters = _state.DeclarationFinder.UserDeclarations(DeclarationType.Parameter).Where(item => member.Equals(item.ParentScopeDeclaration)).ToList();
6564
var canExecute = (member.DeclarationType == DeclarationType.PropertyLet || member.DeclarationType == DeclarationType.PropertySet)
6665
? parameters.Count > 2
6766
: parameters.Count > 1;
@@ -71,15 +70,15 @@ protected override bool EvaluateCanExecute(object parameter)
7170

7271
protected override void OnExecute(object parameter)
7372
{
74-
var selection = Vbe.GetActiveSelection();
73+
var activeSelection = _selectionService.ActiveSelection();
7574

76-
if (selection == null)
75+
if (!activeSelection.HasValue)
7776
{
7877
return;
7978
}
8079

81-
var refactoring = new ReorderParametersRefactoring(_state, Vbe, _factory, _msgbox, _rewritingManager);
82-
refactoring.Refactor(selection.Value);
80+
var refactoring = new ReorderParametersRefactoring(_state, _factory, _msgbox, _rewritingManager, _selectionService);
81+
refactoring.Refactor(activeSelection.Value);
8382
}
8483
}
8584
}

Rubberduck.Refactorings/ReorderParameters/ReorderParametersRefactoring.cs

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,30 @@ namespace Rubberduck.Refactorings.ReorderParameters
1818
public class ReorderParametersRefactoring : IRefactoring
1919
{
2020
private readonly RubberduckParserState _state;
21-
private readonly IVBE _vbe;
2221
private readonly IRefactoringPresenterFactory _factory;
2322
private ReorderParametersModel _model;
2423
private readonly IMessageBox _messageBox;
2524
private readonly IRewritingManager _rewritingManager;
25+
private readonly ISelectionService _selectionService;
2626

27-
public ReorderParametersRefactoring(RubberduckParserState state, IVBE vbe, IRefactoringPresenterFactory factory, IMessageBox messageBox, IRewritingManager rewritingManager)
27+
public ReorderParametersRefactoring(RubberduckParserState state, IRefactoringPresenterFactory factory, IMessageBox messageBox, IRewritingManager rewritingManager, ISelectionService selectionService)
2828
{
2929
_state = state;
30-
_vbe = vbe;
30+
_selectionService = selectionService;
3131
_factory = factory;
3232
_messageBox = messageBox;
3333
_rewritingManager = rewritingManager;
3434
}
3535

3636
private ReorderParametersModel InitializeModel()
3737
{
38-
var selection = _vbe.GetActiveSelection();
39-
if (!selection.HasValue)
38+
var activeSelection = _selectionService.ActiveSelection();
39+
if (!activeSelection.HasValue)
4040
{
4141
return null;
4242
}
4343

44-
return new ReorderParametersModel(_state, selection.Value);
44+
return new ReorderParametersModel(_state, activeSelection.Value);
4545
}
4646

4747
public void Refactor()
@@ -77,14 +77,9 @@ public void Refactor()
7777

7878
public void Refactor(QualifiedSelection target)
7979
{
80-
using (var pane = _vbe.ActiveCodePane)
80+
if (!_selectionService.TrySetActiveSelection(target))
8181
{
82-
if (pane == null || pane.IsWrappingNullReference)
83-
{
84-
return;
85-
}
86-
87-
pane.Selection = target.Selection;
82+
return;
8883
}
8984
Refactor();
9085
}
@@ -96,15 +91,7 @@ public void Refactor(Declaration target)
9691
throw new ArgumentException("Invalid declaration type");
9792
}
9893

99-
using (var pane = _vbe.ActiveCodePane)
100-
{
101-
if (pane == null || pane.IsWrappingNullReference)
102-
{
103-
return;
104-
}
105-
pane.Selection = target.QualifiedSelection.Selection;
106-
}
107-
Refactor();
94+
Refactor(target.QualifiedSelection);
10895
}
10996

11097
private bool IsValidParamOrder()

RubberduckTests/Commands/RefactorCommandTests.cs

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public void EncapsulateField_CanExecute_NullActiveCodePane()
3636
[Test]
3737
public void EncapsulateField_CanExecute_NonReadyState()
3838
{
39-
4039
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(string.Empty, out _);
4140
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
4241
using (state)
@@ -93,7 +92,7 @@ public void EncapsulateField_CanExecute_Field()
9392
Sub Foo()
9493
End Sub";
9594

96-
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(input, out _, new Selection(1, 5, 1, 5));
95+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(input, out var component, new Selection(1, 5, 1, 5));
9796
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
9897
using (state)
9998
{
@@ -105,7 +104,7 @@ Sub Foo()
105104
private RefactorEncapsulateFieldCommand TestRefactorEncapsulateFieldCommand(IVBE vbe, RubberduckParserState state, IRewritingManager rewritingManager)
106105
{
107106
var factory = new Mock<IRefactoringPresenterFactory>().Object;
108-
var selectionService = new Mock<ISelectionService>().Object;
107+
var selectionService = MockedSelectionService(vbe);
109108
return new RefactorEncapsulateFieldCommand(vbe, state, null, factory, rewritingManager, selectionService);
110109
}
111110

@@ -937,8 +936,7 @@ public void ReorderParameters_CanExecute_NullActiveCodePane()
937936
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
938937
using (state)
939938
{
940-
var factory = new Mock<IRefactoringPresenterFactory>();
941-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
939+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
942940
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
943941
}
944942
}
@@ -954,8 +952,7 @@ public void ReorderParameters_CanExecute_NonReadyState()
954952
{
955953
state.SetStatusAndFireStateChanged(this, ParserState.ResolvedDeclarations, CancellationToken.None);
956954

957-
var factory = new Mock<IRefactoringPresenterFactory>();
958-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
955+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
959956
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
960957
}
961958
}
@@ -970,8 +967,7 @@ public void ReorderParameters_CanExecute_Event_OneParam()
970967
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
971968
using (state)
972969
{
973-
var factory = new Mock<IRefactoringPresenterFactory>();
974-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
970+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
975971
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
976972
}
977973
}
@@ -988,9 +984,7 @@ public void ReorderParameters_CanExecute_Proc_OneParam()
988984
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
989985
using (state)
990986
{
991-
992-
var factory = new Mock<IRefactoringPresenterFactory>();
993-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
987+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
994988
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
995989
}
996990
}
@@ -1007,9 +1001,7 @@ public void ReorderParameters_CanExecute_Function_OneParam()
10071001
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
10081002
using (state)
10091003
{
1010-
1011-
var factory = new Mock<IRefactoringPresenterFactory>();
1012-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1004+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
10131005
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
10141006
}
10151007
}
@@ -1026,9 +1018,7 @@ public void ReorderParameters_CanExecute_PropertyGet_OneParam()
10261018
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
10271019
using (state)
10281020
{
1029-
1030-
var factory = new Mock<IRefactoringPresenterFactory>();
1031-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1021+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
10321022
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
10331023
}
10341024
}
@@ -1045,9 +1035,7 @@ public void ReorderParameters_CanExecute_PropertyLet_TwoParams()
10451035
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
10461036
using (state)
10471037
{
1048-
1049-
var factory = new Mock<IRefactoringPresenterFactory>();
1050-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1038+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
10511039
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
10521040
}
10531041
}
@@ -1064,9 +1052,7 @@ public void ReorderParameters_CanExecute_PropertySet_TwoParams()
10641052
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
10651053
using (state)
10661054
{
1067-
1068-
var factory = new Mock<IRefactoringPresenterFactory>();
1069-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1055+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
10701056
Assert.IsFalse(reorderParametersCommand.CanExecute(null));
10711057
}
10721058
}
@@ -1082,9 +1068,7 @@ public void ReorderParameters_CanExecute_Event_TwoParams()
10821068
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
10831069
using (state)
10841070
{
1085-
1086-
var factory = new Mock<IRefactoringPresenterFactory>();
1087-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1071+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
10881072
Assert.IsTrue(reorderParametersCommand.CanExecute(null));
10891073
}
10901074
}
@@ -1101,9 +1085,7 @@ public void ReorderParameters_CanExecute_Proc_TwoParams()
11011085
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
11021086
using (state)
11031087
{
1104-
1105-
var factory = new Mock<IRefactoringPresenterFactory>();
1106-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1088+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
11071089
Assert.IsTrue(reorderParametersCommand.CanExecute(null));
11081090
}
11091091
}
@@ -1120,9 +1102,7 @@ public void ReorderParameters_CanExecute_Function_TwoParams()
11201102
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
11211103
using (state)
11221104
{
1123-
1124-
var factory = new Mock<IRefactoringPresenterFactory>();
1125-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1105+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
11261106
Assert.IsTrue(reorderParametersCommand.CanExecute(null));
11271107
}
11281108
}
@@ -1139,9 +1119,7 @@ public void ReorderParameters_CanExecute_PropertyGet_TwoParams()
11391119
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
11401120
using (state)
11411121
{
1142-
1143-
var factory = new Mock<IRefactoringPresenterFactory>();
1144-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1122+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
11451123
Assert.IsTrue(reorderParametersCommand.CanExecute(null));
11461124
}
11471125
}
@@ -1158,9 +1136,7 @@ public void ReorderParameters_CanExecute_PropertyLet_ThreeParams()
11581136
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
11591137
using (state)
11601138
{
1161-
1162-
var factory = new Mock<IRefactoringPresenterFactory>();
1163-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1139+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
11641140
Assert.IsTrue(reorderParametersCommand.CanExecute(null));
11651141
}
11661142
}
@@ -1177,11 +1153,25 @@ public void ReorderParameters_CanExecute_PropertySet_ThreeParams()
11771153
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
11781154
using (state)
11791155
{
1180-
1181-
var factory = new Mock<IRefactoringPresenterFactory>();
1182-
var reorderParametersCommand = new RefactorReorderParametersCommand(vbe.Object, state, factory.Object, null, rewritingManager);
1156+
var reorderParametersCommand = TestRefactorReorderParametersCommand(vbe.Object, state, rewritingManager);
11831157
Assert.IsTrue(reorderParametersCommand.CanExecute(null));
11841158
}
11851159
}
1160+
1161+
private RefactorReorderParametersCommand TestRefactorReorderParametersCommand(IVBE vbe, RubberduckParserState state, IRewritingManager rewritingManager)
1162+
{
1163+
var factory = new Mock<IRefactoringPresenterFactory>().Object;
1164+
var selectionService = MockedSelectionService(vbe);
1165+
var msgBox = new Mock<IMessageBox>().Object;
1166+
return new RefactorReorderParametersCommand(vbe, state, factory, msgBox, rewritingManager, selectionService);
1167+
}
1168+
1169+
private ISelectionService MockedSelectionService(IVBE vbe)
1170+
{
1171+
var selectionServiceMock = new Mock<ISelectionService>();
1172+
var activeSelection = vbe.ActiveCodePane?.GetQualifiedSelection();
1173+
selectionServiceMock.Setup(m => m.ActiveSelection()).Returns(() => activeSelection);
1174+
return selectionServiceMock.Object;
1175+
}
11861176
}
11871177
}

0 commit comments

Comments
 (0)