Skip to content

Commit 01ce0c9

Browse files
committed
Move IntroduceParameter and its command to ISelectionService
1 parent ebe029b commit 01ce0c9

File tree

5 files changed

+84
-67
lines changed

5 files changed

+84
-67
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ protected override bool EvaluateCanExecute(object parameter)
3838
return false;
3939
}
4040

41-
var target = _state.AllUserDeclarations.FindVariable(activeSelection.Value);
41+
var target = _state.DeclarationFinder
42+
.UserDeclarations(DeclarationType.Variable)
43+
.FindVariable(activeSelection.Value);
4244

4345
return target != null
4446
&& !_state.IsNewOrModified(target.QualifiedModuleName)

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.Refactorings.IntroduceParameter;
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 RefactorIntroduceParameterCommand : RefactorCommandBase
1314
private readonly RubberduckParserState _state;
1415
private readonly IRewritingManager _rewritingManager;
1516
private readonly IMessageBox _messageBox;
17+
private readonly ISelectionService _selectionService;
1618

17-
public RefactorIntroduceParameterCommand (IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager)
19+
public RefactorIntroduceParameterCommand (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,15 @@ 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.DeclarationFinder
42+
.UserDeclarations(DeclarationType.Variable)
43+
.FindVariable(activeSelection.Value);
4044

4145
return target != null
4246
&& !_state.IsNewOrModified(target.QualifiedModuleName)
@@ -45,15 +49,14 @@ protected override bool EvaluateCanExecute(object parameter)
4549

4650
protected override void OnExecute(object parameter)
4751
{
48-
var selection = Vbe.GetActiveSelection();
49-
50-
if (!selection.HasValue)
52+
var activeSelection = _selectionService.ActiveSelection();
53+
if (!activeSelection.HasValue)
5154
{
5255
return;
5356
}
5457

55-
var refactoring = new IntroduceParameterRefactoring(Vbe, _state, _messageBox, _rewritingManager);
56-
refactoring.Refactor(selection.Value);
58+
var refactoring = new IntroduceParameterRefactoring(_state, _messageBox, _rewritingManager, _selectionService);
59+
refactoring.Refactor(activeSelection.Value);
5760
}
5861
}
5962
}

Rubberduck.Refactorings/IntroduceParameter/IntroduceParameterRefactoring.cs

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99
using Rubberduck.Resources;
1010
using Rubberduck.VBEditor;
1111
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
12+
using Rubberduck.VBEditor.Utility;
1213

1314
namespace Rubberduck.Refactorings.IntroduceParameter
1415
{
1516
public class IntroduceParameterRefactoring : IRefactoring
1617
{
17-
private readonly IVBE _vbe;
1818
private readonly RubberduckParserState _state;
1919
private readonly IRewritingManager _rewritingManager;
2020
private readonly IList<Declaration> _declarations;
2121
private readonly IMessageBox _messageBox;
22+
private readonly ISelectionService _selectionService;
2223

2324
private static readonly DeclarationType[] ValidDeclarationTypes =
2425
{
@@ -29,28 +30,26 @@ public class IntroduceParameterRefactoring : IRefactoring
2930
DeclarationType.PropertySet
3031
};
3132

32-
public IntroduceParameterRefactoring(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager)
33+
public IntroduceParameterRefactoring(RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager, ISelectionService selectionService)
3334
{
34-
_vbe = vbe;
3535
_state = state;
3636
_rewritingManager = rewritingManager;
3737
//TODO: Make this use the DeclarationFinder and inject an IDeclarationFinderProvider instead of the RubberduckParserState. (Does not affect the callers.)
3838
_declarations = state.AllDeclarations.ToList();
3939
_messageBox = messageBox;
40+
_selectionService = selectionService;
4041
}
4142

4243
public void Refactor()
4344
{
44-
var selection = _vbe.GetActiveSelection();
45-
46-
if (!selection.HasValue)
45+
var activeSelection = _selectionService.ActiveSelection();
46+
if (!activeSelection.HasValue)
4747
{
4848
_messageBox.NotifyWarn(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption);
4949
return;
5050
}
5151

52-
Refactor(selection.Value);
53-
52+
Refactor(activeSelection.Value);
5453
}
5554

5655
public void Refactor(QualifiedSelection selection)
@@ -90,27 +89,13 @@ private void PromoteVariable(Declaration target)
9089
return;
9190
}
9291

93-
using (var pane = _vbe.ActiveCodePane)
94-
{
95-
QualifiedSelection? oldSelection = null;
96-
if (pane != null && !pane.IsWrappingNullReference)
97-
{
98-
oldSelection = pane.GetQualifiedSelection();
99-
}
100-
101-
var rewriteSession = _rewritingManager.CheckOutCodePaneSession();
92+
var rewriteSession = _rewritingManager.CheckOutCodePaneSession();
93+
var rewriter = rewriteSession.CheckOutModuleRewriter(target.QualifiedModuleName);
10294

103-
var rewriter = rewriteSession.CheckOutModuleRewriter(target.QualifiedModuleName);
104-
UpdateSignature(target, rewriteSession);
105-
rewriter.Remove(target);
95+
UpdateSignature(target, rewriteSession);
96+
rewriter.Remove(target);
10697

107-
rewriteSession.TryRewrite();
108-
109-
if (oldSelection.HasValue && !pane.IsWrappingNullReference)
110-
{
111-
pane.Selection = oldSelection.Value.Selection;
112-
}
113-
}
98+
rewriteSession.TryRewrite();
11499
}
115100

116101
private bool PromptIfMethodImplementsInterface(Declaration targetVariable)

RubberduckTests/Commands/RefactorCommandTests.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -485,9 +485,7 @@ public void IntroduceParameter_CanExecute_NullActiveCodePane()
485485
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
486486
using (state)
487487
{
488-
489-
var msgbox = new Mock<IMessageBox>();
490-
var introduceParameterCommand = new RefactorIntroduceParameterCommand(vbe.Object, state, msgbox.Object, rewritingManager);
488+
var introduceParameterCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
491489
Assert.IsFalse(introduceParameterCommand.CanExecute(null));
492490
}
493491
}
@@ -503,8 +501,7 @@ public void IntroduceParameter_CanExecute_NonReadyState()
503501
{
504502
state.SetStatusAndFireStateChanged(this, ParserState.ResolvedDeclarations, CancellationToken.None);
505503

506-
var msgbox = new Mock<IMessageBox>();
507-
var introduceParameterCommand = new RefactorIntroduceParameterCommand(vbe.Object, state, msgbox.Object, rewritingManager);
504+
var introduceParameterCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
508505
Assert.IsFalse(introduceParameterCommand.CanExecute(null));
509506
}
510507
}
@@ -517,9 +514,7 @@ public void IntroduceParameter_CanExecute_Field()
517514
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
518515
using (state)
519516
{
520-
521-
var msgbox = new Mock<IMessageBox>();
522-
var introduceParameterCommand = new RefactorIntroduceParameterCommand(vbe.Object, state, msgbox.Object, rewritingManager);
517+
var introduceParameterCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
523518
Assert.IsFalse(introduceParameterCommand.CanExecute(null));
524519
}
525520
}
@@ -537,13 +532,19 @@ Dim d As Boolean
537532
var (state, rewritingManager) = MockParser.CreateAndParseWithRewritingManager(vbe.Object);
538533
using (state)
539534
{
540-
541-
var msgbox = new Mock<IMessageBox>();
542-
var introduceParameterCommand = new RefactorIntroduceParameterCommand(vbe.Object, state, msgbox.Object, rewritingManager);
535+
var introduceParameterCommand = TestRefactorIntroduceFieldCommand(vbe.Object, state, rewritingManager);
543536
Assert.IsTrue(introduceParameterCommand.CanExecute(null));
544537
}
545538
}
546539

540+
private RefactorIntroduceParameterCommand TestRefactorIntroduceParameterCommand(IVBE vbe, RubberduckParserState state, IRewritingManager rewritingManager)
541+
{
542+
var factory = new Mock<IRefactoringPresenterFactory>().Object;
543+
var selectionService = MockedSelectionService(vbe);
544+
var msgBox = new Mock<IMessageBox>().Object;
545+
return new RefactorIntroduceParameterCommand(vbe, state, msgBox, rewritingManager, selectionService);
546+
}
547+
547548
[Category("Commands")]
548549
[Test]
549550
public void MoveCloserToUsage_CanExecute_NullActiveCodePane()

0 commit comments

Comments
 (0)