Skip to content

Commit 54887ac

Browse files
committed
Fix NRE in remove when rejecting interface prompt. More tests.
1 parent aa0fa7a commit 54887ac

File tree

5 files changed

+138
-28
lines changed

5 files changed

+138
-28
lines changed

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersModel.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ public class RemoveParametersModel
1919
public Declaration TargetDeclaration { get; private set; }
2020
public List<Parameter> Parameters { get; set; }
2121

22-
public RemoveParametersModel(VBProjectParseResult parseResult, QualifiedSelection selection)
22+
private readonly IMessageBox _messageBox;
23+
24+
public RemoveParametersModel(VBProjectParseResult parseResult, QualifiedSelection selection, IMessageBox messageBox)
2325
{
2426
_parseResult = parseResult;
2527
_declarations = parseResult.Declarations;
28+
_messageBox = messageBox;
2629

2730
AcquireTarget(selection);
2831

@@ -39,6 +42,8 @@ private void AcquireTarget(QualifiedSelection selection)
3942

4043
private void LoadParameters()
4144
{
45+
if (TargetDeclaration == null) { return; }
46+
4247
Parameters.Clear();
4348

4449
var index = 0;
@@ -89,12 +94,14 @@ private Declaration PromptIfTargetImplementsInterface()
8994
var interfaceMember = Declarations.FindInterfaceMember(interfaceImplementation);
9095
var message = string.Format(RubberduckUI.Refactoring_TargetIsInterfaceMemberImplementation, declaration.IdentifierName, interfaceMember.ComponentName, interfaceMember.IdentifierName);
9196

92-
var confirm = MessageBox.Show(message, RubberduckUI.ReorderParamsDialog_TitleText, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
97+
var confirm = _messageBox.Show(message, RubberduckUI.ReorderParamsDialog_TitleText, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
9398
return confirm == DialogResult.No ? null : interfaceMember;
9499
}
95100

96101
private Declaration GetGetter()
97102
{
103+
if (TargetDeclaration == null) { return null; }
104+
98105
if (TargetDeclaration.DeclarationType != DeclarationType.PropertyLet &&
99106
TargetDeclaration.DeclarationType != DeclarationType.PropertySet)
100107
{

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersPresenter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public RemoveParametersPresenter(IRemoveParametersView view, RemoveParametersMod
2121

2222
public RemoveParametersModel Show()
2323
{
24+
if (_model.TargetDeclaration == null) { return null; }
25+
2426
if (_model.Parameters.Count == 0)
2527
{
2628
var message = string.Format(RubberduckUI.RemovePresenter_NoParametersError, _model.TargetDeclaration.IdentifierName);

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersPresenterFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Rubberduck.Parsing;
2+
using Rubberduck.UI;
23
using Rubberduck.VBEditor;
34

45
namespace Rubberduck.Refactorings.RemoveParameters
@@ -25,7 +26,7 @@ public RemoveParametersPresenter Create()
2526
return null;
2627
}
2728

28-
var model = new RemoveParametersModel(_parseResult, selection.Value);
29+
var model = new RemoveParametersModel(_parseResult, selection.Value, new RubberduckMessageBox());
2930
return new RemoveParametersPresenter(_view, model);
3031
}
3132
}

RetailCoder.VBE/Refactorings/RemoveParameters/RemoveParametersRefactoring.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void Refactor(Declaration target)
5757

5858
public void QuickFix(VBProjectParseResult parseResult, QualifiedSelection selection)
5959
{
60-
_model = new RemoveParametersModel(parseResult, selection);
60+
_model = new RemoveParametersModel(parseResult, selection, null);
6161
var target = _model.Declarations.FindSelection(selection, new[] { DeclarationType.Parameter });
6262

6363
// ReSharper disable once PossibleUnintendedReferenceComparison

0 commit comments

Comments
 (0)