Skip to content

Commit a4739d3

Browse files
committed
Introduce wrapper base for IRefactoringPreviewProviders
1 parent 115f2e9 commit a4739d3

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Rubberduck.Parsing.Rewriter;
2+
using Rubberduck.Parsing.VBA.Parsing;
3+
using Rubberduck.VBEditor;
4+
5+
namespace Rubberduck.Refactorings
6+
{
7+
public abstract class RefactoringPreviewProviderWrapperBase<TModel> : IRefactoringPreviewProvider<TModel>
8+
where TModel : class, IRefactoringModel
9+
{
10+
private readonly IRewritingManager _rewritingManager;
11+
private readonly ICodeOnlyRefactoringAction<TModel> _refactoringAction;
12+
13+
protected RefactoringPreviewProviderWrapperBase(
14+
ICodeOnlyRefactoringAction<TModel> refactoringAction,
15+
IRewritingManager rewritingManager)
16+
{
17+
_refactoringAction = refactoringAction;
18+
_rewritingManager = rewritingManager;
19+
}
20+
21+
protected abstract QualifiedModuleName ComponentToShow(TModel model);
22+
23+
public string Preview(TModel model)
24+
{
25+
var rewriteSession = RewriteSession(RewriteSessionCodeKind);
26+
_refactoringAction.Refactor(model, rewriteSession);
27+
var componentToShow = ComponentToShow(model);
28+
var rewriter = rewriteSession.CheckOutModuleRewriter(componentToShow);
29+
return rewriter.GetText();
30+
}
31+
32+
private IExecutableRewriteSession RewriteSession(CodeKind codeKind)
33+
{
34+
return codeKind == CodeKind.AttributesCode
35+
? _rewritingManager.CheckOutAttributesSession()
36+
: _rewritingManager.CheckOutCodePaneSession();
37+
}
38+
39+
protected virtual CodeKind RewriteSessionCodeKind => CodeKind.CodePaneCode;
40+
}
41+
}

0 commit comments

Comments
 (0)