Skip to content

Commit c935798

Browse files
committed
Remove blank lines left by declaration removals
Incorporates IModuleRewriter extension method to clean up newlines left by declaration removals. Removes EncapsulateFieldRewriteSession wrapper class that previously handled declaration removals.
1 parent e3680c0 commit c935798

File tree

7 files changed

+57
-176
lines changed

7 files changed

+57
-176
lines changed

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using Rubberduck.VBEditor;
77
using Rubberduck.SmartIndenter;
88
using Rubberduck.VBEditor.Utility;
9-
using System;
109

1110
namespace Rubberduck.Refactorings.EncapsulateField
1211
{
@@ -91,26 +90,26 @@ protected override EncapsulateFieldModel InitializeModel(Declaration target)
9190

9291
protected override void RefactorImpl(EncapsulateFieldModel model)
9392
{
94-
var refactorRewriteSession = new EncapsulateFieldRewriteSession(_rewritingManager.CheckOutCodePaneSession()) as IEncapsulateFieldRewriteSession;
93+
var refactorRewriteSession = _rewritingManager.CheckOutCodePaneSession();
9594

96-
refactorRewriteSession = RefactorRewrite(model, refactorRewriteSession);
95+
RefactorRewrite(model, refactorRewriteSession as IRewriteSession);
9796

9897
if (!refactorRewriteSession.TryRewrite())
9998
{
100-
throw new RewriteFailedException(refactorRewriteSession.RewriteSession);
99+
throw new RewriteFailedException(refactorRewriteSession);
101100
}
102101
}
103102

104103
private string PreviewRewrite(EncapsulateFieldModel model)
105104
{
106-
var previewSession = new EncapsulateFieldRewriteSession(_rewritingManager.CheckOutCodePaneSession()) as IEncapsulateFieldRewriteSession; ;
107-
105+
var previewSession = _rewritingManager.CheckOutCodePaneSession() as IRewriteSession;
108106
previewSession = RefactorRewrite(model, previewSession, true);
109107

110-
return previewSession.CreatePreview(model.QualifiedModuleName);
108+
var rewriter = previewSession.CheckOutModuleRewriter(model.QualifiedModuleName);
109+
return rewriter.GetText();
111110
}
112111

113-
private IEncapsulateFieldRewriteSession RefactorRewrite(EncapsulateFieldModel model, IEncapsulateFieldRewriteSession refactorRewriteSession, bool asPreview = false)
112+
private IRewriteSession RefactorRewrite(EncapsulateFieldModel model, IRewriteSession refactorRewriteSession, bool asPreview = false)
114113
{
115114
if (!model.SelectedFieldCandidates.Any()) { return refactorRewriteSession; }
116115

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldRewriteSession.cs

Lines changed: 0 additions & 98 deletions
This file was deleted.

Rubberduck.Refactorings/EncapsulateField/EncapsulationStrategies/ConvertFieldsToUDTMembers.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
1-
using Antlr4.Runtime;
2-
using Rubberduck.Parsing.Grammar;
3-
using Rubberduck.Parsing.Rewriter;
1+
using Rubberduck.Parsing.Rewriter;
42
using Rubberduck.Parsing.Symbols;
53
using Rubberduck.Parsing.VBA;
64
using Rubberduck.Refactorings.Common;
7-
using Rubberduck.Refactorings.EncapsulateField.Extensions;
85
using Rubberduck.SmartIndenter;
9-
using Rubberduck.VBEditor;
10-
using System;
11-
using System.Collections.Generic;
126
using System.Diagnostics;
13-
using System.IO;
147
using System.Linq;
15-
using System.Text;
16-
using System.Threading.Tasks;
178

189
namespace Rubberduck.Refactorings.EncapsulateField
1910
{
@@ -27,14 +18,11 @@ public ConvertFieldsToUDTMembers(IDeclarationFinderProvider declarationFinderPro
2718
_stateUDTField = model.ObjectStateUDTField;
2819
}
2920

30-
protected override void ModifyFields(IEncapsulateFieldRewriteSession refactorRewriteSession)
21+
protected override void ModifyFields(IRewriteSession refactorRewriteSession)
3122
{
3223
var rewriter = refactorRewriteSession.CheckOutModuleRewriter(_targetQMN);
3324

34-
foreach (var field in SelectedFields)
35-
{
36-
refactorRewriteSession.Remove(field.Declaration, rewriter);
37-
}
25+
rewriter.RemoveVariables(SelectedFields.Select(f => f.Declaration).Cast<VariableDeclaration>());
3826

3927
if (_stateUDTField.IsExistingDeclaration)
4028
{
@@ -44,7 +32,7 @@ protected override void ModifyFields(IEncapsulateFieldRewriteSession refactorRew
4432
}
4533
}
4634

47-
protected override void ModifyReferences(IEncapsulateFieldRewriteSession refactorRewriteSession)
35+
protected override void ModifyReferences(IRewriteSession refactorRewriteSession)
4836
{
4937
foreach (var field in SelectedFields)
5038
{

Rubberduck.Refactorings/EncapsulateField/EncapsulationStrategies/EncapsulateFieldStrategyBase.cs

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Antlr4.Runtime;
22
using Rubberduck.Parsing;
33
using Rubberduck.Parsing.Grammar;
4+
using Rubberduck.Parsing.Rewriter;
45
using Rubberduck.Parsing.Symbols;
56
using Rubberduck.Parsing.VBA;
67
using Rubberduck.Refactorings.Common;
@@ -12,8 +13,6 @@
1213
using System.Collections.Generic;
1314
using System.Diagnostics;
1415
using System.Linq;
15-
using System.Text;
16-
using System.Threading.Tasks;
1716

1817
namespace Rubberduck.Refactorings.EncapsulateField
1918
{
@@ -33,7 +32,7 @@ public struct PropertyAttributeSet
3332

3433
public interface IEncapsulateStrategy
3534
{
36-
IEncapsulateFieldRewriteSession RefactorRewrite(IEncapsulateFieldRewriteSession refactorRewriteSession, bool asPreview);
35+
IRewriteSession RefactorRewrite(IRewriteSession refactorRewriteSession, bool asPreview);
3736
}
3837

3938
public abstract class EncapsulateFieldStrategyBase : IEncapsulateStrategy
@@ -57,15 +56,15 @@ public EncapsulateFieldStrategyBase(IDeclarationFinderProvider declarationFinder
5756
_targetQMN = model.QualifiedModuleName;
5857
_indenter = indenter;
5958
_codeBuilder = codeBuilder;
60-
SelectedFields = model.SelectedFieldCandidates;
59+
SelectedFields = model.SelectedFieldCandidates.ToList();
6160

6261
_codeSectionStartIndex = declarationFinderProvider.DeclarationFinder
6362
.Members(_targetQMN).Where(m => m.IsMember())
6463
.OrderBy(c => c.Selection)
6564
.FirstOrDefault()?.Context.Start.TokenIndex ?? null;
6665
}
6766

68-
public IEncapsulateFieldRewriteSession RefactorRewrite(IEncapsulateFieldRewriteSession refactorRewriteSession, bool asPreview)
67+
public IRewriteSession RefactorRewrite(IRewriteSession refactorRewriteSession, bool asPreview)
6968
{
7069
ModifyFields(refactorRewriteSession);
7170

@@ -76,13 +75,13 @@ public IEncapsulateFieldRewriteSession RefactorRewrite(IEncapsulateFieldRewriteS
7675
return refactorRewriteSession;
7776
}
7877

79-
protected abstract void ModifyFields(IEncapsulateFieldRewriteSession rewriteSession);
78+
protected abstract void ModifyFields(IRewriteSession rewriteSession);
8079

81-
protected abstract void ModifyReferences(IEncapsulateFieldRewriteSession refactorRewriteSession);
80+
protected abstract void ModifyReferences(IRewriteSession refactorRewriteSession);
8281

8382
protected abstract void LoadNewDeclarationBlocks();
8483

85-
protected void RewriteReferences(IEncapsulateFieldRewriteSession refactorRewriteSession)
84+
protected void RewriteReferences(IRewriteSession refactorRewriteSession)
8685
{
8786
foreach (var replacement in IdentifierReplacements)
8887
{
@@ -95,7 +94,7 @@ protected void RewriteReferences(IEncapsulateFieldRewriteSession refactorRewrite
9594
protected void AddContentBlock(NewContentTypes contentType, string block)
9695
=> _newContent[contentType].Add(block);
9796

98-
private void InsertNewContent(IEncapsulateFieldRewriteSession refactorRewriteSession, bool isPreview = false)
97+
private void InsertNewContent(IRewriteSession refactorRewriteSession, bool isPreview = false)
9998
{
10099
_newContent = new Dictionary<NewContentTypes, List<string>>
101100
{
@@ -119,16 +118,8 @@ private void InsertNewContent(IEncapsulateFieldRewriteSession refactorRewriteSes
119118
.Concat(_newContent[NewContentTypes.DeclarationBlock])
120119
.Concat(_newContent[NewContentTypes.MethodBlock])
121120
.Concat(_newContent[NewContentTypes.PostContentMessage]))
122-
.Trim();
123-
124-
var maxConsecutiveNewLines = 3;
125-
var target = string.Join(string.Empty, Enumerable.Repeat(Environment.NewLine, maxConsecutiveNewLines).ToList());
126-
var replacement = string.Join(string.Empty, Enumerable.Repeat(Environment.NewLine, maxConsecutiveNewLines - 1).ToList());
127-
for (var counter = 1; counter < 10 && newContentBlock.Contains(target); counter++)
128-
{
129-
newContentBlock = newContentBlock.Replace(target, replacement);
130-
}
131-
121+
.Trim()
122+
.LimitNewlines();
132123

133124
var rewriter = refactorRewriteSession.CheckOutModuleRewriter(_targetQMN);
134125
if (_codeSectionStartIndex.HasValue)

Rubberduck.Refactorings/EncapsulateField/EncapsulationStrategies/UseBackingFields.cs

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,47 @@
1-
using Antlr4.Runtime;
2-
using Rubberduck.Parsing.Grammar;
1+
using Rubberduck.Parsing.Grammar;
2+
using Rubberduck.Parsing.Rewriter;
33
using Rubberduck.Parsing.Symbols;
44
using Rubberduck.Parsing.VBA;
55
using Rubberduck.Refactorings.Common;
66
using Rubberduck.Refactorings.EncapsulateField.Extensions;
77
using Rubberduck.SmartIndenter;
8-
using Rubberduck.VBEditor;
9-
using System;
108
using System.Collections.Generic;
119
using System.Linq;
12-
using System.Text;
13-
using System.Threading.Tasks;
1410

1511
namespace Rubberduck.Refactorings.EncapsulateField
1612
{
1713
public class UseBackingFields : EncapsulateFieldStrategyBase
1814
{
15+
private IEnumerable<IEncapsulateFieldCandidate> _fieldsToDeleteAndReplace;
16+
1917
public UseBackingFields(IDeclarationFinderProvider declarationFinderProvider, EncapsulateFieldModel model, IIndenter indenter, ICodeBuilder codeBuilder)
20-
: base(declarationFinderProvider, model, indenter, codeBuilder) { }
18+
: base(declarationFinderProvider, model, indenter, codeBuilder)
19+
{
20+
_fieldsToDeleteAndReplace = SelectedFields.Where(f => f.Declaration.IsDeclaredInList() && !f.Declaration.HasPrivateAccessibility()).ToList();
21+
}
2122

22-
protected override void ModifyFields(IEncapsulateFieldRewriteSession refactorRewriteSession)
23+
24+
protected override void ModifyFields(IRewriteSession refactorRewriteSession)
2325
{
2426
var rewriter = refactorRewriteSession.CheckOutModuleRewriter(_targetQMN);
2527

26-
foreach (var field in SelectedFields)
28+
rewriter.RemoveVariables(_fieldsToDeleteAndReplace.Select(f => f.Declaration).Cast<VariableDeclaration>());
29+
30+
foreach (var field in SelectedFields.Except(_fieldsToDeleteAndReplace))
2731
{
2832
if (field.Declaration.HasPrivateAccessibility() && field.BackingIdentifier.Equals(field.Declaration.IdentifierName))
2933
{
3034
rewriter.MakeImplicitDeclarationTypeExplicit(field.Declaration);
3135
continue;
3236
}
3337

34-
if (field.Declaration.IsDeclaredInList() && !field.Declaration.HasPrivateAccessibility())
35-
{
36-
refactorRewriteSession.Remove(field.Declaration, rewriter);
37-
continue;
38-
}
39-
4038
rewriter.Rename(field.Declaration, field.BackingIdentifier);
4139
rewriter.SetVariableVisiblity(field.Declaration, Accessibility.Private.TokenString());
4240
rewriter.MakeImplicitDeclarationTypeExplicit(field.Declaration);
4341
}
4442
}
4543

46-
protected override void ModifyReferences(IEncapsulateFieldRewriteSession refactorRewriteSession)
44+
protected override void ModifyReferences(IRewriteSession refactorRewriteSession)
4745
{
4846
foreach (var field in SelectedFields)
4947
{
@@ -55,12 +53,9 @@ protected override void ModifyReferences(IEncapsulateFieldRewriteSession refacto
5553

5654
protected override void LoadNewDeclarationBlocks()
5755
{
58-
//New field declarations created here were removed from their list within ModifyFields(...)
59-
var fieldsRequiringNewDeclaration = SelectedFields
60-
.Where(field => field.Declaration.IsDeclaredInList()
61-
&& field.Declaration.Accessibility != Accessibility.Private);
62-
63-
foreach (var field in fieldsRequiringNewDeclaration)
56+
//New field declarations created here were removed from their
57+
//variable list statement within ModifyFields(...)
58+
foreach (var field in _fieldsToDeleteAndReplace)
6459
{
6560
var targetIdentifier = field.Declaration.Context.GetText().Replace(field.IdentifierName, field.BackingIdentifier);
6661
var newField = field.Declaration.IsTypeSpecified

Rubberduck.Refactorings/EncapsulateField/Extensions/IModuleRewriterExtensions.cs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,11 @@
44
using Rubberduck.Parsing.Symbols;
55
using Rubberduck.Refactorings.Common;
66
using System;
7-
using System.Linq;
87

98
namespace Rubberduck.Refactorings.EncapsulateField.Extensions
109
{
1110
public static class IModuleRewriterExtensions
1211
{
13-
public static string GetText(this IModuleRewriter rewriter, int maxConsecutiveNewLines)
14-
{
15-
var result = rewriter.GetText();
16-
var target = string.Join(string.Empty, Enumerable.Repeat(Environment.NewLine, maxConsecutiveNewLines).ToList());
17-
var replacement = string.Join(string.Empty, Enumerable.Repeat(Environment.NewLine, maxConsecutiveNewLines - 1).ToList());
18-
for (var counter = 1; counter < 10 && result.Contains(target); counter++)
19-
{
20-
result = result.Replace(target, replacement);
21-
}
22-
return result;
23-
}
24-
2512
public static void InsertAtEndOfFile(this IModuleRewriter rewriter, string content)
2613
{
2714
if (content == string.Empty) { return; }

0 commit comments

Comments
 (0)