Skip to content

Commit 98f6446

Browse files
authored
Merge pull request #2082 from Hosch250/Issue2065
Extract Interface tests, many bug fixes
2 parents 49bbb1c + 746a780 commit 98f6446

File tree

12 files changed

+844
-37
lines changed

12 files changed

+844
-37
lines changed

RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceModel.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public ExtractInterfaceModel(RubberduckParserState state, QualifiedSelection sel
4242

4343
if (_targetDeclaration == null)
4444
{
45-
//throw new InvalidOperationException();
4645
return;
4746
}
4847

RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfacePresenter.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ public ExtractInterfacePresenter(IExtractInterfaceDialog view, ExtractInterfaceM
2222

2323
public ExtractInterfaceModel Show()
2424
{
25-
if (_model.TargetDeclaration == null) { return null; }
25+
if (_model.TargetDeclaration == null)
26+
{
27+
return null;
28+
}
2629

2730
_view.ComponentNames =
2831
_model.TargetDeclaration.Project.VBComponents.Cast<VBComponent>().Select(c => c.Name).ToList();

RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfacePresenterFactory.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Linq;
22
using Microsoft.Vbe.Interop;
33
using Rubberduck.Parsing.VBA;
4-
using Rubberduck.VBEditor.Extensions;
54

65
namespace Rubberduck.Refactorings.ExtractInterface
76
{
@@ -20,7 +19,7 @@ public ExtractInterfacePresenterFactory(VBE vbe, RubberduckParserState state, IE
2019

2120
public ExtractInterfacePresenter Create()
2221
{
23-
var selection = _vbe.ActiveCodePane.CodeModule.GetSelection();
22+
var selection = _vbe.ActiveCodePane.GetQualifiedSelection();
2423
if (selection == null)
2524
{
2625
return null;

RetailCoder.VBE/Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ public class ExtractInterfaceRefactoring : IRefactoring
1717
private readonly VBE _vbe;
1818
private readonly RubberduckParserState _state;
1919
private readonly IMessageBox _messageBox;
20-
private readonly IRefactoringPresenterFactory<ExtractInterfacePresenter> _factory;
20+
private readonly IRefactoringPresenterFactory<IExtractInterfacePresenter> _factory;
2121
private ExtractInterfaceModel _model;
2222
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
2323

24-
public ExtractInterfaceRefactoring(VBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory<ExtractInterfacePresenter> factory)
24+
public ExtractInterfaceRefactoring(VBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory<IExtractInterfacePresenter> factory)
2525
{
2626
_vbe = vbe;
2727
_state = state;
@@ -38,7 +38,6 @@ public void Refactor()
3838
}
3939

4040
_model = presenter.Show();
41-
4241
if (_model == null)
4342
{
4443
return;
@@ -66,8 +65,8 @@ private void AddInterface()
6665
var interfaceComponent = _model.TargetDeclaration.Project.VBComponents.Add(vbext_ComponentType.vbext_ct_ClassModule);
6766
interfaceComponent.Name = _model.InterfaceName;
6867

69-
_vbe.ActiveCodePane.CodeModule.InsertLines(1, Tokens.Option + ' ' + Tokens.Explicit + Environment.NewLine);
70-
_vbe.ActiveCodePane.CodeModule.InsertLines(3, GetInterfaceModuleBody());
68+
interfaceComponent.CodeModule.InsertLines(1, Tokens.Option + ' ' + Tokens.Explicit + Environment.NewLine);
69+
interfaceComponent.CodeModule.InsertLines(3, GetInterfaceModuleBody());
7170

7271
var module = _model.TargetDeclaration.QualifiedSelection.QualifiedName.Component.CodeModule;
7372

@@ -85,14 +84,13 @@ private void _state_StateChanged(object sender, EventArgs e)
8584
{
8685
return;
8786
}
88-
87+
88+
_state.StateChanged -= _state_StateChanged;
8989
var qualifiedSelection = new QualifiedSelection(_model.TargetDeclaration.QualifiedSelection.QualifiedName, new Selection(_insertionLine, 1, _insertionLine, 1));
9090
_vbe.ActiveCodePane.CodeModule.SetSelection(qualifiedSelection);
9191

9292
var implementInterfaceRefactoring = new ImplementInterfaceRefactoring(_vbe, _state, _messageBox);
9393
implementInterfaceRefactoring.Refactor(qualifiedSelection);
94-
95-
_state.StateChanged -= _state_StateChanged;
9694
}
9795

9896
private string GetInterfaceModuleBody()

RetailCoder.VBE/Refactorings/ExtractInterface/InterfaceMember.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,25 @@ public InterfaceMember(Declaration member, IEnumerable<Declaration> declarations
4646

4747
GetMethodType();
4848

49-
MemberParams = declarations.Where(item => item.DeclarationType == DeclarationType.Parameter &&
50-
item.ParentScope == Member.Scope)
51-
.OrderBy(o => o.Selection.StartLine)
52-
.ThenBy(t => t.Selection.StartColumn)
53-
.Select(p => new Parameter
54-
{
55-
ParamAccessibility = ((VBAParser.ArgContext)p.Context).BYREF() == null ? Tokens.ByVal : Tokens.ByRef,
56-
ParamName = p.IdentifierName,
57-
ParamType = p.AsTypeName
58-
})
59-
.ToList();
49+
var memberWithParams = member as IDeclarationWithParameter;
50+
if (memberWithParams != null)
51+
{
52+
MemberParams = memberWithParams.Parameters
53+
.OrderBy(o => o.Selection.StartLine)
54+
.ThenBy(t => t.Selection.StartColumn)
55+
.Select(p => new Parameter
56+
{
57+
ParamAccessibility =
58+
((VBAParser.ArgContext) p.Context).BYVAL() != null ? Tokens.ByVal : Tokens.ByRef,
59+
ParamName = p.IdentifierName,
60+
ParamType = p.AsTypeName
61+
})
62+
.ToList();
63+
}
64+
else
65+
{
66+
MemberParams = new List<Parameter>();
67+
}
6068

6169
if (MemberType == "Property Get")
6270
{

RetailCoder.VBE/Refactorings/ImplementInterface/ImplementInterfaceRefactoring.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class ImplementInterfaceRefactoring : IRefactoring
1717
private readonly RubberduckParserState _state;
1818
private readonly IMessageBox _messageBox;
1919

20-
private List<Declaration> _declarations;
20+
private readonly List<Declaration> _declarations;
2121
private Declaration _targetInterface;
2222
private Declaration _targetClass;
2323

@@ -91,7 +91,7 @@ private void AddItems(List<Declaration> members)
9191

9292
var missingMembersText = members.Aggregate(string.Empty, (current, member) => current + Environment.NewLine + GetInterfaceMember(member));
9393

94-
module.InsertLines(module.CountOfDeclarationLines + 2, missingMembersText);
94+
module.InsertLines(module.CountOfDeclarationLines + 1, missingMembersText);
9595
}
9696

9797
private string GetInterfaceMember(Declaration member)

Rubberduck.Parsing/Symbols/IdentifierReferenceResolver.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Rubberduck.Parsing.Binding;
55
using Rubberduck.Parsing.Grammar;
66
using Rubberduck.VBEditor;
7+
using Rubberduck.VBEditor.Extensions;
78
using System.Collections.Generic;
89
using System.Linq;
910
using System.Threading;

RubberduckTests/Mocks/MockProjectBuilder.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -158,17 +158,18 @@ private Mock<VBComponents> CreateComponentsMock()
158158
result.Setup(m => m.Item(It.IsAny<string>())).Returns<string>(name => Components.Single(item => item.Name == name));
159159
result.SetupGet(m => m.Count).Returns(Components.Count);
160160

161-
result.Setup(m => m.Add(It.IsAny<vbext_ComponentType>())).Callback((vbext_ComponentType c) =>
162-
{
163-
_componentsMock.Add(CreateComponentMock("test", c, string.Empty, new Selection()));
164-
});
165-
result.Setup(m => m.Add(It.IsAny<vbext_ComponentType>())).Returns(() =>
166-
{
167-
var lastComponent = _componentsMock.LastOrDefault();
168-
return lastComponent == null
169-
? null
170-
: lastComponent.Object;
171-
});
161+
result.Setup(m => m.Add(It.IsAny<vbext_ComponentType>()))
162+
.Callback((vbext_ComponentType c) =>
163+
{
164+
_componentsMock.Add(CreateComponentMock("test", c, string.Empty, new Selection()));
165+
})
166+
.Returns(() =>
167+
{
168+
var lastComponent = _componentsMock.LastOrDefault();
169+
return lastComponent == null
170+
? null
171+
: lastComponent.Object;
172+
});
172173

173174
result.Setup(m => m.Remove(It.IsAny<VBComponent>())).Callback((VBComponent c) =>
174175
{
@@ -286,7 +287,7 @@ private Mock<CodeModule> CreateCodeModuleMock(string content)
286287
{
287288
if (index - 1 >= lines.Count)
288289
{
289-
lines.AddRange(newLine.Split(new[] {Environment.NewLine}, StringSplitOptions.None));
290+
lines.AddRange(newLine.Split(new[] { Environment.NewLine }, StringSplitOptions.None));
290291
}
291292
else
292293
{

0 commit comments

Comments
 (0)