Skip to content

Commit ebe029b

Browse files
committed
Move IntroduceField and its command to ISelectionService
1 parent 5a31af2 commit ebe029b

File tree

5 files changed

+86
-74
lines changed

5 files changed

+86
-74
lines changed

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.Refactorings.IntroduceField;
77
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
8+
using Rubberduck.VBEditor.Utility;
89

910
namespace Rubberduck.UI.Command.Refactorings
1011
{
@@ -13,13 +14,15 @@ public class RefactorIntroduceFieldCommand : RefactorCommandBase
1314
private readonly RubberduckParserState _state;
1415
private readonly IRewritingManager _rewritingManager;
1516
private readonly IMessageBox _messageBox;
17+
private readonly ISelectionService _selectionService;
1618

17-
public RefactorIntroduceFieldCommand (IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager)
19+
public RefactorIntroduceFieldCommand (IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager, ISelectionService selectionService)
1820
:base(vbe)
1921
{
2022
_state = state;
2123
_rewritingManager = rewritingManager;
2224
_messageBox = messageBox;
25+
_selectionService = selectionService;
2326
}
2427

2528
protected override bool EvaluateCanExecute(object parameter)
@@ -29,14 +32,13 @@ protected override bool EvaluateCanExecute(object parameter)
2932
return false;
3033
}
3134

32-
var selection = Vbe.GetActiveSelection();
33-
34-
if (!selection.HasValue)
35+
var activeSelection = _selectionService.ActiveSelection();
36+
if (!activeSelection.HasValue)
3537
{
3638
return false;
3739
}
3840

39-
var target = _state.AllUserDeclarations.FindVariable(selection.Value);
41+
var target = _state.AllUserDeclarations.FindVariable(activeSelection.Value);
4042

4143
return target != null
4244
&& !_state.IsNewOrModified(target.QualifiedModuleName)
@@ -45,15 +47,14 @@ protected override bool EvaluateCanExecute(object parameter)
4547

4648
protected override void OnExecute(object parameter)
4749
{
48-
var selection = Vbe.GetActiveSelection();
49-
50-
if (!selection.HasValue)
50+
var activeSelection = _selectionService.ActiveSelection();
51+
if (!activeSelection.HasValue)
5152
{
5253
return;
5354
}
5455

55-
var refactoring = new IntroduceFieldRefactoring(Vbe, _state, _messageBox, _rewritingManager);
56-
refactoring.Refactor(selection.Value);
56+
var refactoring = new IntroduceFieldRefactoring(_state, _messageBox, _rewritingManager, _selectionService);
57+
refactoring.Refactor(activeSelection.Value);
5758
}
5859
}
5960
}

Rubberduck.Refactorings/IntroduceField/IntroduceFieldRefactoring.cs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,41 @@
1010
using Rubberduck.Resources;
1111
using Rubberduck.VBEditor;
1212
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
13+
using Rubberduck.VBEditor.Utility;
1314

1415
namespace Rubberduck.Refactorings.IntroduceField
1516
{
1617
public class IntroduceFieldRefactoring : IRefactoring
1718
{
1819
private readonly IList<Declaration> _declarations;
19-
private readonly IVBE _vbe;
20+
private readonly ISelectionService _selectionService;
2021
private readonly RubberduckParserState _state;
2122
private readonly IRewritingManager _rewritingManager;
2223
private readonly IMessageBox _messageBox;
2324

24-
public IntroduceFieldRefactoring(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager)
25+
public IntroduceFieldRefactoring(RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager, ISelectionService selectionService)
2526
{
2627
_declarations = state.AllUserDeclarations
2728
.Where(i => i.DeclarationType == DeclarationType.Variable)
2829
.ToList();
2930

30-
_vbe = vbe;
3131
_state = state;
3232
_rewritingManager = rewritingManager;
3333
_messageBox = messageBox;
34+
_selectionService = selectionService;
3435
}
3536

3637
public void Refactor()
3738
{
38-
var selection = _vbe.GetActiveSelection();
39+
var activeSelection = _selectionService.ActiveSelection();
3940

40-
if (!selection.HasValue)
41+
if (!activeSelection.HasValue)
4142
{
4243
_messageBox.NotifyWarn(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceField_Caption);
4344
return;
4445
}
4546

46-
Refactor(selection.Value);
47+
Refactor(activeSelection.Value);
4748
}
4849

4950
public void Refactor(QualifiedSelection selection)
@@ -78,27 +79,13 @@ private void PromoteVariable(Declaration target)
7879
return;
7980
}
8081

81-
var oldSelection = _vbe.GetActiveSelection();
82-
8382
var rewriteSession = _rewritingManager.CheckOutCodePaneSession();
8483
var rewriter = rewriteSession.CheckOutModuleRewriter(target.QualifiedModuleName);
8584

8685
rewriter.Remove(target);
8786
AddField(rewriter, target);
8887

8988
rewriteSession.TryRewrite();
90-
91-
if (oldSelection.HasValue)
92-
{
93-
var component = _state.ProjectsProvider.Component(oldSelection.Value.QualifiedName);
94-
using (var module = component.CodeModule)
95-
{
96-
using (var pane = module.CodePane)
97-
{
98-
pane.Selection = oldSelection.Value.Selection;
99-
}
100-
}
101-
}
10289
}
10390

10491
private void AddField(IModuleRewriter rewriter, Declaration target)

RubberduckTests/Commands/RefactorCommandTests.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -416,9 +416,7 @@ public void IntroduceField_CanExecute_NullActiveCodePane()
416416
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
417417
using (state)
418418
{
419-
420-
var msgbox = new Mock<IMessageBox>();
421-
var introduceFieldCommand = new RefactorIntroduceFieldCommand(vbe.Object, state, msgbox.Object, rewritingManager);
419+
var introduceFieldCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
422420
Assert.IsFalse(introduceFieldCommand.CanExecute(null));
423421
}
424422
}
@@ -434,8 +432,7 @@ public void IntroduceField_CanExecute_NonReadyState()
434432
{
435433
state.SetStatusAndFireStateChanged(this, ParserState.ResolvedDeclarations, CancellationToken.None);
436434

437-
var msgbox = new Mock<IMessageBox>();
438-
var introduceFieldCommand = new RefactorIntroduceFieldCommand(vbe.Object, state, msgbox.Object, rewritingManager);
435+
var introduceFieldCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
439436
Assert.IsFalse(introduceFieldCommand.CanExecute(null));
440437
}
441438
}
@@ -448,9 +445,7 @@ public void IntroduceField_CanExecute_Field()
448445
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
449446
using (state)
450447
{
451-
452-
var msgbox = new Mock<IMessageBox>();
453-
var introduceFieldCommand = new RefactorIntroduceFieldCommand(vbe.Object, state, msgbox.Object, rewritingManager);
448+
var introduceFieldCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
454449
Assert.IsFalse(introduceFieldCommand.CanExecute(null));
455450
}
456451
}
@@ -468,13 +463,19 @@ Dim d As Boolean
468463
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
469464
using (state)
470465
{
471-
472-
var msgbox = new Mock<IMessageBox>();
473-
var introduceFieldCommand = new RefactorIntroduceFieldCommand(vbe.Object, state, msgbox.Object, rewritingManager);
466+
var introduceFieldCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
474467
Assert.IsTrue(introduceFieldCommand.CanExecute(null));
475468
}
476469
}
477470

471+
private RefactorIntroduceFieldCommand TestRefactorIntroduceFieldCommand(IVBE vbe, RubberduckParserState state, IRewritingManager rewritingManager)
472+
{
473+
var factory = new Mock<IRefactoringPresenterFactory>().Object;
474+
var selectionService = MockedSelectionService(vbe);
475+
var msgBox = new Mock<IMessageBox>().Object;
476+
return new RefactorIntroduceFieldCommand(vbe, state, msgBox, rewritingManager, selectionService);
477+
}
478+
478479
[Category("Commands")]
479480
[Test]
480481
public void IntroduceParameter_CanExecute_NullActiveCodePane()

RubberduckTests/Refactoring/EncapsulateFieldTests.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ End Property
5656
PropertyName = "Name"
5757
};
5858

59-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
59+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
6060
refactoring.Refactor(qualifiedSelection);
6161

6262
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -107,7 +107,7 @@ End Property
107107
PropertyName = "Name"
108108
};
109109

110-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
110+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
111111
refactoring.Refactor(qualifiedSelection);
112112

113113
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -155,7 +155,7 @@ End Property
155155
PropertyName = "Name"
156156
};
157157

158-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
158+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
159159
refactoring.Refactor(qualifiedSelection);
160160

161161
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -199,7 +199,7 @@ End Property
199199
PropertyName = "Name"
200200
};
201201

202-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
202+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
203203
refactoring.Refactor(qualifiedSelection);
204204

205205
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -261,7 +261,7 @@ Function Bar() As Integer
261261
PropertyName = "Name"
262262
};
263263

264-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
264+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
265265
refactoring.Refactor(qualifiedSelection);
266266

267267
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -329,7 +329,7 @@ Property Set Foo(ByVal vall As Variant)
329329
PropertyName = "Name"
330330
};
331331

332-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
332+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
333333
refactoring.Refactor(qualifiedSelection);
334334

335335
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -379,7 +379,7 @@ End Property
379379
PropertyName = "Name"
380380
};
381381

382-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
382+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
383383
refactoring.Refactor(qualifiedSelection);
384384

385385
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -439,7 +439,7 @@ End Property
439439
PropertyName = "Name"
440440
};
441441

442-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
442+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
443443
refactoring.Refactor(qualifiedSelection);
444444

445445
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -491,7 +491,7 @@ End Property
491491
PropertyName = "Name"
492492
};
493493

494-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
494+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
495495
refactoring.Refactor(qualifiedSelection);
496496

497497
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -543,7 +543,7 @@ End Property
543543
PropertyName = "Name"
544544
};
545545

546-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
546+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
547547
refactoring.Refactor(qualifiedSelection);
548548

549549
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -591,7 +591,7 @@ End Property
591591
PropertyName = "Name"
592592
};
593593

594-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
594+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
595595
refactoring.Refactor(qualifiedSelection);
596596

597597
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -655,7 +655,7 @@ Sub Bar(ByVal name As Integer)
655655
PropertyName = "Name"
656656
};
657657

658-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
658+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
659659
refactoring.Refactor(qualifiedSelection);
660660

661661
var targetComponent = state.ProjectsProvider.Component(model.TargetDeclaration.QualifiedModuleName);
@@ -741,7 +741,7 @@ Sub Bar(ByVal v As Integer)
741741
PropertyName = "Name"
742742
};
743743

744-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
744+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
745745
refactoring.Refactor(qualifiedSelection);
746746

747747
var actualCode1 = module1.Content();
@@ -790,7 +790,7 @@ End Property
790790
PropertyName = "Name"
791791
};
792792

793-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
793+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
794794
refactoring.Refactor(state.AllUserDeclarations.FindVariable(qualifiedSelection));
795795

796796
var actualCode = component.CodeModule.Content();
@@ -841,7 +841,7 @@ public void EncapsulateField_ModelIsNull()
841841

842842
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection);
843843

844-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, null, qualifiedSelection);
844+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, null);
845845
refactoring.Refactor(qualifiedSelection);
846846

847847
var actualCode = component.CodeModule.Content();
@@ -894,7 +894,7 @@ End Property
894894
//SetupFactory
895895
var factory = SetupFactory(model);
896896

897-
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model, qualifiedSelection);
897+
var refactoring = TestRefactoring(vbe.Object, rewritingManager, state, model);
898898
refactoring.Refactor(state.AllUserDeclarations.FindVariable(qualifiedSelection));
899899

900900
var actualCode = component.CodeModule.Content();
@@ -954,7 +954,7 @@ Private Sub Foo(ByVal arg1 As Integer, ByVal arg2 As String)
954954

955955
#region setup
956956

957-
private static IRefactoring TestRefactoring(IVBE vbe, IRewritingManager rewritingManager, RubberduckParserState state, EncapsulateFieldModel model, QualifiedSelection selection)
957+
private static IRefactoring TestRefactoring(IVBE vbe, IRewritingManager rewritingManager, RubberduckParserState state, EncapsulateFieldModel model)
958958
{
959959
var selectionService = MockedSelectionService();
960960
var indenter = CreateIndenter(vbe);

0 commit comments

Comments
 (0)