Skip to content

Commit 6a8a8a4

Browse files
committed
Fix wiring up member attribute recovery
1 parent cc74e34 commit 6a8a8a4

File tree

6 files changed

+32
-10
lines changed

6 files changed

+32
-10
lines changed

Rubberduck.Main/Root/RubberduckIoCInstaller.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ public void Install(IWindsorContainer container, IConfigurationStore store)
117117
container.Register(Component.For<IRewritingManager>()
118118
.ImplementedBy<RewritingManager>()
119119
.LifestyleSingleton());
120+
container.Register(Component.For<IMemberAttributeRecovererWithSettableRewritingManager>()
121+
.ImplementedBy<MemberAttributeRecoverer>()
122+
.LifestyleSingleton());
120123

121124
container.Register(Component.For<TestExplorerModel>()
122125
.LifestyleSingleton());
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Rubberduck.Parsing.Rewriter
2+
{
3+
public interface IMemberAttributeRecovererWithSettableRewritingManager : IMemberAttributeRecoverer
4+
{
5+
IRewritingManager RewritingManager { set; }
6+
}
7+
}

Rubberduck.Parsing/Rewriter/MemberAttributeRecoverer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace Rubberduck.Parsing.Rewriter
1212
{
13-
public class MemberAttributeRecoverer : IMemberAttributeRecoverer
13+
public class MemberAttributeRecoverer : IMemberAttributeRecovererWithSettableRewritingManager
1414
{
1515
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1616
private readonly IParseManager _parseManager;

Rubberduck.Parsing/Rewriter/RewritingManager.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,17 @@ public class RewritingManager : IRewritingManager
88
{
99
private readonly HashSet<IRewriteSession> _activeCodePaneSessions = new HashSet<IRewriteSession>();
1010
private readonly HashSet<IRewriteSession> _activeAttributesSessions = new HashSet<IRewriteSession>();
11-
private readonly IMemberAttributeRecoverer _memberAttributeRecoverer;
11+
private readonly IMemberAttributeRecovererWithSettableRewritingManager _memberAttributeRecoverer;
1212

1313
private readonly IRewriteSessionFactory _sessionFactory;
1414

1515
private readonly object _invalidationLockObject = new object();
1616

17-
public RewritingManager(IRewriteSessionFactory sessionFactory, IMemberAttributeRecoverer memberAttributeRecoverer)
17+
public RewritingManager(IRewriteSessionFactory sessionFactory, IMemberAttributeRecovererWithSettableRewritingManager memberAttributeRecoverer)
1818
{
1919
_sessionFactory = sessionFactory;
2020
_memberAttributeRecoverer = memberAttributeRecoverer;
21+
_memberAttributeRecoverer.RewritingManager = this;
2122
}
2223

2324

RubberduckTests/Mocks/MockParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public static (SynchronousParseCoordinator parser, IRewritingManager rewritingMa
134134
attributesSourceCodeHandler);
135135
var rewriterProvider = new RewriterProvider(tokenStreamCache, moduleRewriterFactory);
136136
var rewriteSessionFactory = new RewriteSessionFactory(state, rewriterProvider);
137-
var stubMembersAttributeRecoverer = new Mock<IMemberAttributeRecoverer>().Object;
137+
var stubMembersAttributeRecoverer = new Mock<IMemberAttributeRecovererWithSettableRewritingManager>().Object;
138138
var rewritingManager = new RewritingManager(rewriteSessionFactory, stubMembersAttributeRecoverer);
139139

140140
var parser = new SynchronousParseCoordinator(

RubberduckTests/Rewriter/RewriteManagerTests.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,25 @@ public void CallingTheRewritingAllowedCallbackFromANoLongerActiveAttributesSessi
178178
}
179179
}
180180

181+
[Test]
182+
[Category("Rewriter")]
183+
public void OnCreatingTheRewritingManagerPropertyInjectsItselfIntoTheMemberAttributeRecoverer()
184+
{
185+
var memberAttributeRecovererMock = new Mock<IMemberAttributeRecovererWithSettableRewritingManager>();
186+
187+
var rewritingManager = RewritingManager(out _, memberAttributeRecovererMock.Object);
188+
189+
memberAttributeRecovererMock.VerifySet(m => m.RewritingManager = rewritingManager, Times.Once);
190+
}
191+
181192
[Test]
182193
[Category("Rewriter")]
183194
public void CallingTheRewritingAllowedCallbackFromAnActiveCodePaneSessionRequestMemberAttributeRecoveryForTheCheckedOutModules()
184195
{
185-
var memberAttributeRecovererMock = new Mock<IMemberAttributeRecoverer>();
196+
var memberAttributeRecovererMock = new Mock<IMemberAttributeRecovererWithSettableRewritingManager>();
186197
memberAttributeRecovererMock.Setup(m => m.RecoverCurrentMemberAttributesAfterNextParse(It.IsAny<IEnumerable<QualifiedModuleName>>()));
187198

188-
var rewritingManager = RewritingManager(out var mockFactory, memberAttributeRecovererMock.Object);
199+
var rewritingManager = RewritingManager(out _, memberAttributeRecovererMock.Object);
189200
var codePaneSession = rewritingManager.CheckOutCodePaneSession();
190201

191202
var moduleToCheckOutRewriterFor = new QualifiedModuleName("project", "path", "module");
@@ -200,10 +211,10 @@ public void CallingTheRewritingAllowedCallbackFromAnActiveCodePaneSessionRequest
200211
[Category("Rewriter")]
201212
public void CallingTheRewritingAllowedCallbackFromAnActiveAttributesSessionDoesNotRequestMemberAttributeRecovery()
202213
{
203-
var memberAttributeRecovererMock = new Mock<IMemberAttributeRecoverer>();
214+
var memberAttributeRecovererMock = new Mock<IMemberAttributeRecovererWithSettableRewritingManager>();
204215
memberAttributeRecovererMock.Setup(m => m.RecoverCurrentMemberAttributesAfterNextParse(It.IsAny<IEnumerable<QualifiedModuleName>>()));
205216

206-
var rewritingManager = RewritingManager(out var mockFactory, memberAttributeRecovererMock.Object);
217+
var rewritingManager = RewritingManager(out _, memberAttributeRecovererMock.Object);
207218
var codePaneSession = rewritingManager.CheckOutAttributesSession();
208219

209220
var moduleToCheckOutRewriterFor = new QualifiedModuleName("project", "path", "module");
@@ -214,9 +225,9 @@ public void CallingTheRewritingAllowedCallbackFromAnActiveAttributesSessionDoesN
214225
memberAttributeRecovererMock.Verify(m => m.RecoverCurrentMemberAttributesAfterNextParse(It.IsAny<IEnumerable<QualifiedModuleName>>()), Times.Never);
215226
}
216227

217-
private IRewritingManager RewritingManager(out MockRewriteSessionFactory mockFactory, IMemberAttributeRecoverer memberAttributeRecoverer = null)
228+
private IRewritingManager RewritingManager(out MockRewriteSessionFactory mockFactory, IMemberAttributeRecovererWithSettableRewritingManager memberAttributeRecoverer = null)
218229
{
219-
var recoverer = memberAttributeRecoverer ?? new Mock<IMemberAttributeRecoverer>().Object;
230+
var recoverer = memberAttributeRecoverer ?? new Mock<IMemberAttributeRecovererWithSettableRewritingManager>().Object;
220231
mockFactory = new MockRewriteSessionFactory();
221232
return new RewritingManager(mockFactory, recoverer);
222233
}

0 commit comments

Comments
 (0)