Skip to content

Commit d86c899

Browse files
authored
Merge pull request #2833 from Hosch250/Issue1380
Replace Remove Parameters dialog
2 parents f376468 + bbad382 commit d86c899

36 files changed

+720
-498
lines changed

RetailCoder.VBE/Inspections/QuickFixes/RemoveUnusedParameterQuickFix.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using Rubberduck.Parsing.VBA;
55
using Rubberduck.Refactorings.RemoveParameters;
66
using Rubberduck.UI;
7-
using Rubberduck.UI.Refactorings;
7+
using Rubberduck.UI.Refactorings.RemoveParameters;
88
using Rubberduck.VBEditor;
99
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1010

@@ -27,7 +27,7 @@ public RemoveUnusedParameterQuickFix(ParserRuleContext context, QualifiedSelecti
2727

2828
public override void Fix()
2929
{
30-
using (var dialog = new RemoveParametersDialog())
30+
using (var dialog = new RemoveParametersDialog(new RemoveParametersViewModel(_state)))
3131
{
3232
var refactoring = new RemoveParametersRefactoring(_vbe,
3333
new RemoveParametersPresenterFactory(_vbe, dialog, _state, _messageBox));

RetailCoder.VBE/Inspections/QuickFixes/WriteOnlyPropertyQuickFix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public WriteOnlyPropertyQuickFix(ParserRuleContext context, Declaration target)
2020

2121
public override void Fix()
2222
{
23-
var parameters = ((IDeclarationWithParameter) _target).Parameters.Cast<ParameterDeclaration>().ToList();
23+
var parameters = ((IParameterizedDeclaration) _target).Parameters.Cast<ParameterDeclaration>().ToList();
2424

2525
var signatureParams = parameters.Except(new[] {parameters.Last()}).Select(GetParamText);
2626
var propertyGet = "Public Property Get " + _target.IdentifierName + "(" + string.Join(", ", signatureParams) +

RetailCoder.VBE/Refactorings/ExtractInterface/InterfaceMember.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public InterfaceMember(Declaration member, IEnumerable<Declaration> declarations
4646

4747
GetMethodType();
4848

49-
var memberWithParams = member as IDeclarationWithParameter;
49+
var memberWithParams = member as IParameterizedDeclaration;
5050
if (memberWithParams != null)
5151
{
5252
MemberParams = memberWithParams.Parameters

RetailCoder.VBE/Refactorings/RemoveParameters/IRemoveParametersDialog.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

RetailCoder.VBE/Refactorings/RemoveParameters/Parameter.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
using Rubberduck.Parsing.Symbols;
22
using Rubberduck.Parsing.VBA;
3+
using Rubberduck.UI;
34

45
namespace Rubberduck.Refactorings.RemoveParameters
56
{
67
/// <summary>
78
/// Contains data about a method parameter for the Remove Parameters refactoring.
89
/// </summary>
9-
public class Parameter
10+
public class Parameter : ViewModelBase
1011
{
1112
public Declaration Declaration { get; private set; }
1213
public string Name { get; private set; }
1314
public int Index { get; private set; }
14-
public bool IsRemoved { get; set; }
15+
16+
private bool _isRemoved;
17+
public bool IsRemoved
18+
{
19+
get { return _isRemoved; }
20+
set
21+
{
22+
_isRemoved = value;
23+
OnPropertyChanged();
24+
}
25+
}
1526

1627
public Parameter(Declaration declaration, int index, bool isRemoved = false)
1728
{

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersModel.cs

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ namespace Rubberduck.Refactorings.RemoveParameters
1111
{
1212
public class RemoveParametersModel
1313
{
14-
private readonly RubberduckParserState _state;
15-
public RubberduckParserState State { get { return _state; } }
16-
17-
private readonly IList<Declaration> _declarations;
18-
public IEnumerable<Declaration> Declarations { get { return _declarations; } }
14+
public RubberduckParserState State { get; }
15+
public IEnumerable<Declaration> Declarations { get; }
1916

2017
public Declaration TargetDeclaration { get; private set; }
2118
public List<Parameter> Parameters { get; set; }
@@ -24,13 +21,11 @@ public class RemoveParametersModel
2421

2522
public RemoveParametersModel(RubberduckParserState state, QualifiedSelection selection, IMessageBox messageBox)
2623
{
27-
_state = state;
28-
_declarations = state.AllDeclarations.ToList();
24+
State = state;
25+
Declarations = state.AllDeclarations.ToList();
2926
_messageBox = messageBox;
3027

3128
AcquireTarget(selection);
32-
33-
Parameters = new List<Parameter>();
3429
LoadParameters();
3530
}
3631

@@ -45,11 +40,8 @@ private void AcquireTarget(QualifiedSelection selection)
4540
private void LoadParameters()
4641
{
4742
if (TargetDeclaration == null) { return; }
48-
49-
Parameters.Clear();
50-
51-
var index = 0;
52-
Parameters = GetParameters().Select(arg => new Parameter(arg, index++)).ToList();
43+
44+
Parameters = GetParameters().Select((arg, i) => new Parameter(arg, i)).ToList();
5345

5446
if (TargetDeclaration.DeclarationType == DeclarationType.PropertyLet ||
5547
TargetDeclaration.DeclarationType == DeclarationType.PropertySet)
@@ -60,17 +52,7 @@ private void LoadParameters()
6052

6153
private IEnumerable<Declaration> GetParameters()
6254
{
63-
var targetSelection = new Selection(TargetDeclaration.Context.Start.Line,
64-
TargetDeclaration.Context.Start.Column,
65-
TargetDeclaration.Context.Stop.Line,
66-
TargetDeclaration.Context.Stop.Column);
67-
68-
return Declarations.Where(d => d.DeclarationType == DeclarationType.Parameter
69-
&& d.ComponentName == TargetDeclaration.ComponentName
70-
&& d.ProjectId == TargetDeclaration.ProjectId
71-
&& targetSelection.Contains(d.Selection))
72-
.OrderBy(item => item.Selection.StartLine)
73-
.ThenBy(item => item.Selection.StartColumn);
55+
return ((IParameterizedDeclaration) TargetDeclaration).Parameters;
7456
}
7557

7658
public static readonly DeclarationType[] ValidDeclarationTypes =

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersPresenter.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Windows.Forms;
22
using Rubberduck.UI;
3+
using Rubberduck.UI.Refactorings.RemoveParameters;
34

45
namespace Rubberduck.Refactorings.RemoveParameters
56
{
@@ -10,11 +11,11 @@ public interface IRemoveParametersPresenter
1011

1112
public class RemoveParametersPresenter : IRemoveParametersPresenter
1213
{
13-
private readonly IRemoveParametersDialog _view;
14+
private readonly RemoveParametersDialog _view;
1415
private readonly RemoveParametersModel _model;
1516
private readonly IMessageBox _messageBox;
1617

17-
public RemoveParametersPresenter(IRemoveParametersDialog view, RemoveParametersModel model, IMessageBox messageBox)
18+
public RemoveParametersPresenter(RemoveParametersDialog view, RemoveParametersModel model, IMessageBox messageBox)
1819
{
1920
_view = view;
2021
_model = model;
@@ -41,15 +42,14 @@ public RemoveParametersModel Show()
4142
return _model;
4243
}
4344

44-
_view.Parameters = _model.Parameters;
45-
_view.InitializeParameterGrid();
46-
47-
if (_view.ShowDialog() != DialogResult.OK)
45+
_view.ViewModel.Parameters = _model.Parameters;
46+
_view.ShowDialog();
47+
if (_view.DialogResult != DialogResult.OK)
4848
{
4949
return null;
5050
}
5151

52-
_model.Parameters = _view.Parameters;
52+
_model.Parameters = _view.ViewModel.Parameters;
5353
return _model;
5454
}
5555
}

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersPresenterFactory.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
using Rubberduck.Parsing.VBA;
22
using Rubberduck.UI;
3+
using Rubberduck.UI.Refactorings.RemoveParameters;
34
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
45

56
namespace Rubberduck.Refactorings.RemoveParameters
67
{
78
public class RemoveParametersPresenterFactory : IRefactoringPresenterFactory<RemoveParametersPresenter>
89
{
910
private readonly IVBE _vbe;
10-
private readonly IRemoveParametersDialog _view;
11+
private readonly RemoveParametersDialog _view;
1112
private readonly RubberduckParserState _state;
1213
private readonly IMessageBox _messageBox;
1314

14-
public RemoveParametersPresenterFactory(IVBE vbe, IRemoveParametersDialog view,
15+
public RemoveParametersPresenterFactory(IVBE vbe, RemoveParametersDialog view,
1516
RubberduckParserState state, IMessageBox messageBox)
1617
{
1718
_vbe = vbe;

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,11 @@
479479
<Compile Include="UI\Refactorings\AssignedByValParameterQuickFixDialogFactory.cs" />
480480
<Compile Include="UI\Refactorings\IAssignedByValParameterQuickFixDialog.cs" />
481481
<Compile Include="UI\Refactorings\IAssignedByValParameterQuickFixDialogFactory.cs" />
482+
<Compile Include="UI\Refactorings\RemoveParameters\ParameterTextDecorationConverter.cs" />
483+
<Compile Include="UI\Refactorings\RemoveParameters\RemoveParametersView.xaml.cs">
484+
<DependentUpon>RemoveParametersView.xaml</DependentUpon>
485+
</Compile>
486+
<Compile Include="UI\Refactorings\RemoveParameters\RemoveParametersViewModel.cs" />
482487
<Compile Include="UI\SelectionChangeService.cs" />
483488
<Compile Include="VersionCheck\IVersionCheck.cs" />
484489
<Compile Include="UI\Command\MenuItems\CommandBars\AppCommandBarBase.cs" />
@@ -574,7 +579,6 @@
574579
<Compile Include="Refactorings\IntroduceField\IntroduceFieldRefactoring.cs" />
575580
<Compile Include="Refactorings\IntroduceParameter\IntroduceParameterRefactoring.cs" />
576581
<Compile Include="Refactorings\MoveCloserToUsage\MoveCloserToUsageRefactoring.cs" />
577-
<Compile Include="Refactorings\RemoveParameters\IRemoveParametersDialog.cs" />
578582
<Compile Include="Refactorings\RemoveParameters\Parameter.cs" />
579583
<Compile Include="Refactorings\RemoveParameters\RemoveParametersModel.cs" />
580584
<Compile Include="Refactorings\RemoveParameters\RemoveParametersPresenter.cs" />
@@ -866,10 +870,10 @@
866870
<DependentUpon>SimpleListControl.cs</DependentUpon>
867871
</Compile>
868872
<Compile Include="UI\IdentifierReferences\IdentifierReferencesListDockablePresenter.cs" />
869-
<Compile Include="UI\Refactorings\RemoveParametersDialog.cs">
873+
<Compile Include="UI\Refactorings\RemoveParameters\RemoveParametersDialog.cs">
870874
<SubType>Form</SubType>
871875
</Compile>
872-
<Compile Include="UI\Refactorings\RemoveParametersDialog.Designer.cs">
876+
<Compile Include="UI\Refactorings\RemoveParameters\RemoveParametersDialog.Designer.cs">
873877
<DependentUpon>RemoveParametersDialog.cs</DependentUpon>
874878
</Compile>
875879
<Compile Include="Refactorings\ExtractMethod\ExtractMethodPresenter.cs" />
@@ -1112,7 +1116,7 @@
11121116
<EmbeddedResource Include="UI\Refactorings\ExtractMethodDialog.resx">
11131117
<DependentUpon>ExtractMethodDialog.cs</DependentUpon>
11141118
</EmbeddedResource>
1115-
<EmbeddedResource Include="UI\Refactorings\RemoveParametersDialog.resx">
1119+
<EmbeddedResource Include="UI\Refactorings\RemoveParameters\RemoveParametersDialog.resx">
11161120
<DependentUpon>RemoveParametersDialog.cs</DependentUpon>
11171121
</EmbeddedResource>
11181122
<EmbeddedResource Include="UI\Refactorings\RenameDialog.resx">
@@ -1475,6 +1479,10 @@
14751479
<SubType>Designer</SubType>
14761480
<Generator>MSBuild:Compile</Generator>
14771481
</Page>
1482+
<Page Include="UI\Refactorings\RemoveParameters\RemoveParametersView.xaml">
1483+
<Generator>MSBuild:Compile</Generator>
1484+
<SubType>Designer</SubType>
1485+
</Page>
14781486
<Page Include="UI\RegexAssistant\RegexAssistant.xaml">
14791487
<Generator>MSBuild:Compile</Generator>
14801488
<SubType>Designer</SubType>

RetailCoder.VBE/UI/Command/Refactorings/RefactorRemoveParametersCommand.cs

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using Rubberduck.Parsing.Symbols;
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.Refactorings.RemoveParameters;
7-
using Rubberduck.UI.Refactorings;
7+
using Rubberduck.UI.Refactorings.RemoveParameters;
88
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
99

1010
namespace Rubberduck.UI.Command.Refactorings
@@ -35,42 +35,38 @@ public RefactorRemoveParametersCommand(IVBE vbe, RubberduckParserState state, IM
3535
protected override bool CanExecuteImpl(object parameter)
3636
{
3737
var pane = Vbe.ActiveCodePane;
38+
if (pane.IsWrappingNullReference || _state.Status != ParserState.Ready)
3839
{
39-
if (pane.IsWrappingNullReference || _state.Status != ParserState.Ready)
40-
{
41-
return false;
42-
}
43-
44-
var selection = pane.GetQualifiedSelection();
45-
var member = _state.AllUserDeclarations.FindTarget(selection.Value, ValidDeclarationTypes);
46-
if (member == null)
47-
{
48-
return false;
49-
}
40+
return false;
41+
}
5042

51-
var parameters = _state.AllUserDeclarations.Where(item => item.DeclarationType == DeclarationType.Parameter && member.Equals(item.ParentScopeDeclaration)).ToList();
52-
return member.DeclarationType == DeclarationType.PropertyLet || member.DeclarationType == DeclarationType.PropertySet
53-
? parameters.Count > 1
54-
: parameters.Any();
43+
var selection = pane.GetQualifiedSelection();
44+
var member = _state.AllUserDeclarations.FindTarget(selection.Value, ValidDeclarationTypes);
45+
if (member == null)
46+
{
47+
return false;
5548
}
49+
50+
var parameters = _state.AllUserDeclarations.Where(item => item.DeclarationType == DeclarationType.Parameter && member.Equals(item.ParentScopeDeclaration)).ToList();
51+
return member.DeclarationType == DeclarationType.PropertyLet || member.DeclarationType == DeclarationType.PropertySet
52+
? parameters.Count > 1
53+
: parameters.Any();
5654
}
5755

5856
protected override void ExecuteImpl(object parameter)
5957
{
6058
var pane = Vbe.ActiveCodePane;
59+
if (pane.IsWrappingNullReference)
6160
{
62-
if (pane.IsWrappingNullReference)
63-
{
64-
return;
65-
}
61+
return;
62+
}
6663

67-
var selection = pane.GetQualifiedSelection();
68-
using (var view = new RemoveParametersDialog())
69-
{
70-
var factory = new RemoveParametersPresenterFactory(Vbe, view, _state, _msgbox);
71-
var refactoring = new RemoveParametersRefactoring(Vbe, factory);
72-
refactoring.Refactor(selection.Value);
73-
}
64+
var selection = pane.GetQualifiedSelection();
65+
using (var view = new RemoveParametersDialog(new RemoveParametersViewModel(_state)))
66+
{
67+
var factory = new RemoveParametersPresenterFactory(Vbe, view, _state, _msgbox);
68+
var refactoring = new RemoveParametersRefactoring(Vbe, factory);
69+
refactoring.Refactor(selection.Value);
7470
}
7571
}
7672
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
using System.Globalization;
3+
using System.Windows;
4+
using System.Windows.Data;
5+
6+
namespace Rubberduck.UI.Refactorings.RemoveParameters
7+
{
8+
public class ParameterTextDecorationConverter : IValueConverter
9+
{
10+
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
11+
{
12+
if ((bool)value) { return TextDecorations.Strikethrough; }
13+
return null;
14+
}
15+
16+
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
17+
{
18+
throw new NotImplementedException();
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)