Skip to content

Commit 02d4ad1

Browse files
committed
Expose the checked out modules on the IRewriteSession
This information can be used to determine whether there is even a chance that a rewrite will do anything. Moreover, this information will be needed to wire up the recovery of member attributes.
1 parent b1ff795 commit 02d4ad1

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

Rubberduck.Parsing/Rewriter/IRewriteSession.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Rubberduck.Parsing.VBA.Parsing;
1+
using System.Collections.Generic;
2+
using Rubberduck.Parsing.VBA.Parsing;
23
using Rubberduck.VBEditor;
34

45
namespace Rubberduck.Parsing.Rewriter
@@ -7,6 +8,7 @@ public interface IRewriteSession
78
{
89
IModuleRewriter CheckOutModuleRewriter(QualifiedModuleName module);
910
bool TryRewrite();
11+
IReadOnlyCollection<QualifiedModuleName> CheckedOutModules { get; }
1012
bool IsInvalidated { get; }
1113
void Invalidate();
1214
CodeKind TargetCodeKind { get; }

Rubberduck.Parsing/Rewriter/MemberAttributeRecoverer.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,21 @@ private void ExecuteRecoveryOfAttributes(object sender, ParserStateEventArgs e)
9898
}
9999

100100
StopRecoveringAttributesOnNextParse();
101-
CancelTheCurrentParse();
102-
101+
103102
var rewriteSession = _rewritingManager.CheckOutAttributesSession();
104103
foreach (var module in _attributesToRecover.Keys)
105104
{
106105
RecoverAttributes(rewriteSession, module, _attributesToRecover[module]);
107106
}
108107

108+
if (!rewriteSession.CheckedOutModules.Any())
109+
{
110+
//There is nothing we can do.
111+
return;
112+
}
113+
114+
CancelTheCurrentParse();
115+
109116
Task.Run(() => rewriteSession.TryRewrite());
110117

111118
EndTheCurrentParse(e.Token);

Rubberduck.Parsing/Rewriter/RewriteSessionBase.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using NLog;
5+
using Rubberduck.Parsing.VBA.Extensions;
56
using Rubberduck.Parsing.VBA.Parsing;
67
using Rubberduck.VBEditor;
78

@@ -25,6 +26,7 @@ protected RewriteSessionBase(IRewriterProvider rewriterProvider, Func<IRewriteSe
2526
_rewritingAllowed = rewritingAllowed;
2627
}
2728

29+
public IReadOnlyCollection<QualifiedModuleName> CheckedOutModules => CheckedOutModuleRewriters.Keys.ToHashSet();
2830

2931
public IModuleRewriter CheckOutModuleRewriter(QualifiedModuleName module)
3032
{

0 commit comments

Comments
 (0)