Skip to content

Commit b07582e

Browse files
committed
Move RemoveParameter to the ISelectionService
1 parent 5bf0f14 commit b07582e

File tree

9 files changed

+138
-155
lines changed

9 files changed

+138
-155
lines changed

Rubberduck.CodeAnalysis/QuickFixes/RemoveUnusedParameterQuickFix.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,31 @@
66
using Rubberduck.Refactorings;
77
using Rubberduck.Refactorings.RemoveParameters;
88
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
9+
using Rubberduck.VBEditor.Utility;
910

1011
namespace Rubberduck.Inspections.QuickFixes
1112
{
1213
public sealed class RemoveUnusedParameterQuickFix : QuickFixBase
1314
{
14-
private readonly IVBE _vbe;
15-
private readonly RubberduckParserState _state;
15+
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1616
private readonly IRefactoringPresenterFactory _factory;
1717
private readonly IRewritingManager _rewritingManager;
18+
private readonly ISelectionService _selectionService;
1819

19-
public RemoveUnusedParameterQuickFix(IVBE vbe, RubberduckParserState state, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
20+
public RemoveUnusedParameterQuickFix(IDeclarationFinderProvider declarationFinderProvider, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2021
: base(typeof(ParameterNotUsedInspection))
2122
{
22-
_vbe = vbe;
23-
_state = state;
23+
_declarationFinderProvider = declarationFinderProvider;
2424
_factory = factory;
2525
_rewritingManager = rewritingManager;
26+
_selectionService = selectionService;
2627
}
2728

2829
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
2930
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
3031
{
31-
var refactoring = new RemoveParametersRefactoring(_state, _vbe, _factory, _rewritingManager);
32-
refactoring.QuickFix(_state, result.QualifiedSelection);
32+
var refactoring = new RemoveParametersRefactoring(_declarationFinderProvider, _factory, _rewritingManager, _selectionService);
33+
refactoring.QuickFix(result.QualifiedSelection);
3334
}
3435

3536
public override string Description(IInspectionResult result) => Resources.Inspections.QuickFixes.RemoveUnusedParameterQuickFix;

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

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

1112
namespace Rubberduck.UI.Command.Refactorings
1213
{
@@ -16,13 +17,15 @@ public class RefactorRemoveParametersCommand : RefactorCommandBase
1617
private readonly RubberduckParserState _state;
1718
private readonly IRefactoringPresenterFactory _factory;
1819
private readonly IRewritingManager _rewritingManager;
20+
private readonly ISelectionService _selectionService;
1921

20-
public RefactorRemoveParametersCommand(IVBE vbe, RubberduckParserState state, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
22+
public RefactorRemoveParametersCommand(IVBE vbe, RubberduckParserState state, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2123
: base (vbe)
2224
{
2325
_state = state;
2426
_factory = factory;
2527
_rewritingManager = rewritingManager;
28+
_selectionService = selectionService;
2629
}
2730

2831
private static readonly DeclarationType[] ValidDeclarationTypes =
@@ -42,14 +45,14 @@ protected override bool EvaluateCanExecute(object parameter)
4245
return false;
4346
}
4447

45-
var selection = Vbe.GetActiveSelection();
48+
var activeSelection = _selectionService.ActiveSelection();
4649

47-
if (!selection.HasValue)
50+
if (!activeSelection.HasValue)
4851
{
4952
return false;
5053
}
5154

52-
var member = _state.AllUserDeclarations.FindTarget(selection.Value, ValidDeclarationTypes);
55+
var member = _state.DeclarationFinder.AllUserDeclarations.FindTarget(activeSelection.Value, ValidDeclarationTypes);
5356
if (member == null)
5457
{
5558
return false;
@@ -66,15 +69,18 @@ protected override bool EvaluateCanExecute(object parameter)
6669
|| member.DeclarationType == DeclarationType.PropertySet
6770
? parameters.Count > 1
6871
: parameters.Any();
69-
7072
}
7173

7274
protected override void OnExecute(object parameter)
7375
{
74-
var selection = Vbe.GetActiveSelection();
75-
76-
var refactoring = new RemoveParametersRefactoring(_state, Vbe, _factory, _rewritingManager);
77-
refactoring.Refactor(selection.Value);
76+
var activeSelection = _selectionService.ActiveSelection();
77+
if (!activeSelection.HasValue)
78+
{
79+
return;
80+
}
81+
82+
var refactoring = new RemoveParametersRefactoring(_state, _factory, _rewritingManager, _selectionService);
83+
refactoring.Refactor(activeSelection.Value);
7884
}
7985
}
8086
}

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ public void Install(IWindsorContainer container, IConfigurationStore store)
9999
container.Register(Component.For<ISelectionChangeService>()
100100
.ImplementedBy<SelectionChangeService>()
101101
.LifestyleSingleton());
102+
container.Register(Component.For<ISelectionService>()
103+
.ImplementedBy<SelectionService>()
104+
.LifestyleSingleton());
102105
container.Register(Component.For<AutoCompleteService>()
103106
.LifestyleSingleton());
104107
container.Register(Component.For<IOperatingSystem>()

Rubberduck.Refactorings/RemoveParameters/RemoveParametersModel.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,15 @@ namespace Rubberduck.Refactorings.RemoveParameters
1111
{
1212
public class RemoveParametersModel
1313
{
14-
public RubberduckParserState State { get; }
1514
public IEnumerable<Declaration> Declarations { get; }
1615

1716
public Declaration TargetDeclaration { get; private set; }
1817
public List<Parameter> Parameters { get; private set; }
1918
public List<Parameter> RemoveParameters { get; set; }
2019

21-
public RemoveParametersModel(RubberduckParserState state, QualifiedSelection selection)
20+
public RemoveParametersModel(IDeclarationFinderProvider declarationFinderProvider, QualifiedSelection selection)
2221
{
23-
State = state;
24-
Declarations = state.AllDeclarations.ToList();
22+
Declarations = declarationFinderProvider.DeclarationFinder.AllUserDeclarations.ToList();
2523

2624
AcquireTarget(selection);
2725
LoadParameters();

Rubberduck.Refactorings/RemoveParameters/RemoveParametersRefactoring.cs

Lines changed: 23 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,31 @@
99
using Rubberduck.Parsing.Symbols;
1010
using Rubberduck.Parsing.VBA;
1111
using Rubberduck.VBEditor;
12-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1312
using Rubberduck.VBEditor.Utility;
1413

1514
namespace Rubberduck.Refactorings.RemoveParameters
1615
{
1716
public class RemoveParametersRefactoring : IRefactoring
1817
{
19-
private readonly RubberduckParserState _state;
20-
private readonly IVBE _vbe;
21-
private readonly IRefactoringPresenterFactory _factory;
18+
private readonly IDeclarationFinderProvider _declarationFinderProvider;
19+
private readonly ISelectionService _selectionService;
20+
private readonly Func<RemoveParametersModel, IDisposalActionContainer<IRemoveParametersPresenter>> _presenterFactory;
2221
private readonly IRewritingManager _rewritingManager;
2322
private RemoveParametersModel _model;
2423

25-
public RemoveParametersRefactoring(RubberduckParserState state, IVBE vbe, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
24+
public RemoveParametersRefactoring(IDeclarationFinderProvider declarationFinderProvider, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2625
{
27-
_state = state;
28-
_vbe = vbe;
26+
_declarationFinderProvider = declarationFinderProvider;
27+
_selectionService = selectionService;
2928
_rewritingManager = rewritingManager;
30-
_factory = factory;
29+
_presenterFactory = (model => DisposalActionContainer.Create(factory.Create<IRemoveParametersPresenter, RemoveParametersModel>(model), factory.Release));
3130
}
3231

3332
private RemoveParametersModel InitializeModel()
3433
{
35-
var selection = _vbe.GetActiveSelection();
34+
var activeSelection = _selectionService.ActiveSelection();
3635

37-
return !selection.HasValue ? null : new RemoveParametersModel(_state, selection.Value);
36+
return !activeSelection.HasValue ? null : new RemoveParametersModel(_declarationFinderProvider, activeSelection.Value);
3837
}
3938

4039
public void Refactor()
@@ -45,9 +44,9 @@ public void Refactor()
4544
return;
4645
}
4746

48-
using (var container = DisposalActionContainer.Create(_factory.Create<IRemoveParametersPresenter, RemoveParametersModel>(_model), p => _factory.Release(p)))
47+
using (var presenterContainer = _presenterFactory(_model))
4948
{
50-
var presenter = container.Value;
49+
var presenter = presenterContainer.Value;
5150
if (presenter == null)
5251
{
5352
return;
@@ -59,33 +58,18 @@ public void Refactor()
5958
return;
6059
}
6160

62-
using (var pane = _vbe.ActiveCodePane)
63-
{
64-
var oldSelection = pane.GetQualifiedSelection();
65-
66-
RemoveParameters();
67-
68-
if (oldSelection.HasValue && !pane.IsWrappingNullReference)
69-
{
70-
pane.Selection = oldSelection.Value.Selection;
71-
}
72-
}
73-
74-
_model.State.OnParseRequested(this);
61+
RemoveParameters();
7562
}
7663
}
7764

7865
public void Refactor(QualifiedSelection target)
7966
{
80-
using (var pane = _vbe.ActiveCodePane)
67+
if (!_selectionService.TrySetActiveSelection(target))
8168
{
82-
if (pane.IsWrappingNullReference)
83-
{
84-
return;
85-
}
86-
pane.Selection = target.Selection;
87-
Refactor();
69+
return;
8870
}
71+
72+
Refactor();
8973
}
9074

9175
public void Refactor(Declaration target)
@@ -95,20 +79,12 @@ public void Refactor(Declaration target)
9579
throw new ArgumentException("Invalid declaration type");
9680
}
9781

98-
using (var pane = _vbe.ActiveCodePane)
99-
{
100-
if (pane.IsWrappingNullReference)
101-
{
102-
return;
103-
}
104-
pane.Selection = target.QualifiedSelection.Selection;
105-
Refactor();
106-
}
82+
Refactor(target.QualifiedSelection);
10783
}
10884

109-
public void QuickFix(RubberduckParserState state, QualifiedSelection selection)
85+
public void QuickFix(QualifiedSelection selection)
11086
{
111-
_model = new RemoveParametersModel(state, selection);
87+
_model = new RemoveParametersModel(_declarationFinderProvider, selection);
11288

11389
var target = _model.Parameters.SingleOrDefault(p => selection.Selection.Contains(p.Declaration.QualifiedSelection.Selection));
11490
Debug.Assert(target != null, "Target was not found");
@@ -259,10 +235,10 @@ private void AdjustSignatures(IRewriteSession rewriteSession)
259235
RemoveSignatureParameters(eventImplementation, rewriteSession);
260236
}
261237

262-
var interfaceImplementations = _model.State.DeclarationFinder.FindAllInterfaceImplementingMembers().Where(item =>
263-
item.ProjectId == _model.TargetDeclaration.ProjectId
264-
&&
265-
item.IdentifierName == $"{_model.TargetDeclaration.ComponentName}_{_model.TargetDeclaration.IdentifierName}");
238+
var interfaceImplementations = _declarationFinderProvider.DeclarationFinder
239+
.FindAllInterfaceImplementingMembers()
240+
.Where(item => item.ProjectId == _model.TargetDeclaration.ProjectId
241+
&& item.IdentifierName == $"{_model.TargetDeclaration.ComponentName}_{_model.TargetDeclaration.IdentifierName}");
266242

267243
foreach (var interfaceImplentation in interfaceImplementations)
268244
{

Rubberduck.Refactorings/Rename/RenameRefactoring.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class RenameRefactoring : IRefactoring
2424
private const string AppendUnderscoreFormat = "{0}_";
2525
private const string PrependUnderscoreFormat = "_{0}";
2626

27-
private readonly IRefactoringPresenterFactory _factory;
27+
private readonly Func<RenameModel, IDisposalActionContainer<IRenamePresenter>> _presenterFactory;
2828
private readonly IMessageBox _messageBox;
2929
private readonly IDeclarationFinderProvider _declarationFinderProvider;
3030
private readonly IProjectsProvider _projectsProvider;
@@ -39,13 +39,13 @@ public class RenameRefactoring : IRefactoring
3939
private bool IsUserEventHandlerRename { set; get; }
4040
public RenameRefactoring(IRefactoringPresenterFactory factory, IMessageBox messageBox, IDeclarationFinderProvider declarationFinderProvider, IProjectsProvider projectsProvider, IRewritingManager rewritingManager, ISelectionService selectionService)
4141
{
42-
_factory = factory;
4342
_messageBox = messageBox;
4443
_declarationFinderProvider = declarationFinderProvider;
4544
_projectsProvider = projectsProvider;
4645
_rewritingManager = rewritingManager;
4746
_selectionService = selectionService;
4847
_model = null;
48+
_presenterFactory = ((model) => DisposalActionContainer.Create(factory.Create<IRenamePresenter, RenameModel>(model), factory.Release));
4949

5050
_renameActions = new Dictionary<DeclarationType, Action<IRewriteSession>>
5151
{
@@ -80,9 +80,9 @@ public void Refactor()
8080
return;
8181
}
8282

83-
using (var container = DisposalActionContainer.Create(_factory.Create<IRenamePresenter, RenameModel>(_model), p => _factory.Release(p)))
83+
using (var presenterContainer = _presenterFactory(_model))
8484
{
85-
var presenter = container.Value;
85+
var presenter = presenterContainer.Value;
8686
if (presenter != null)
8787
{
8888
RefactorImpl(presenter.Model.Target, presenter);
@@ -98,9 +98,9 @@ public void Refactor(Declaration target)
9898
return;
9999
}
100100

101-
using (var container = DisposalActionContainer.Create(_factory.Create<IRenamePresenter, RenameModel>(_model), p => _factory.Release(p)))
101+
using (var presenterContainer = _presenterFactory(_model))
102102
{
103-
var presenter = container.Value;
103+
var presenter = presenterContainer.Value;
104104

105105
RefactorImpl(target, presenter);
106106
}

0 commit comments

Comments
 (0)