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