Skip to content

Commit 4f6e02f

Browse files
committed
Retain field accessibility when encapsulating
1 parent 1bcc6df commit 4f6e02f

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldInsertNewCode/EncapsulateFieldCodeBuilder.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,16 @@ public EncapsulateFieldCodeBuilder(ICodeBuilder codeBuilder)
3838
(string Get, string Let, string Set) blocks = (string.Empty, string.Empty, string.Empty);
3939

4040
var mutatorBody = $"{propertyAttributes.BackingField} = {propertyAttributes.RHSParameterIdentifier}";
41+
var accessibility = propertyAttributes.Declaration.Accessibility;
4142

4243
if (propertyAttributes.GeneratePropertyLet)
4344
{
44-
_codeBuilder.TryBuildPropertyLetCodeBlock(propertyAttributes.Declaration, propertyAttributes.PropertyName, out blocks.Let, content: mutatorBody);
45+
_codeBuilder.TryBuildPropertyLetCodeBlock(propertyAttributes.Declaration, propertyAttributes.PropertyName, out blocks.Let, accessibility, content: mutatorBody);
4546
}
4647

4748
if (propertyAttributes.GeneratePropertySet)
4849
{
49-
_codeBuilder.TryBuildPropertySetCodeBlock(propertyAttributes.Declaration, propertyAttributes.PropertyName, out blocks.Set, content: $"{Tokens.Set} {mutatorBody}");
50+
_codeBuilder.TryBuildPropertySetCodeBlock(propertyAttributes.Declaration, propertyAttributes.PropertyName, out blocks.Set, accessibility, content: $"{Tokens.Set} {mutatorBody}");
5051
}
5152

5253
var propertyGetBody = propertyAttributes.UsesSetAssignment
@@ -63,7 +64,7 @@ public EncapsulateFieldCodeBuilder(ICodeBuilder codeBuilder)
6364
$"{Tokens.End} {Tokens.If}");
6465
}
6566

66-
_codeBuilder.TryBuildPropertyGetCodeBlock(propertyAttributes.Declaration, propertyAttributes.PropertyName, out blocks.Get, content: propertyGetBody);
67+
_codeBuilder.TryBuildPropertyGetCodeBlock(propertyAttributes.Declaration, propertyAttributes.PropertyName, out blocks.Get, accessibility, content: propertyGetBody);
6768

6869
return (blocks.Get, blocks.Let, blocks.Set);
6970
}

RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldCodeBuilderTests.cs

+23-16
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ namespace RubberduckTests.Refactoring.EncapsulateField
99
[TestFixture]
1010
public class EncapsulateFieldCodeBuilderTests
1111
{
12-
[Test]
12+
[TestCase("Public")]
13+
[TestCase("Private")]
1314
[Category("Refactorings")]
1415
[Category("Encapsulate Field")]
1516
[Category(nameof(EncapsulateFieldCodeBuilder))]
16-
public void BuildPropertyBlock_VariantGet()
17+
public void BuildPropertyBlock_VariantGet(string accessibility)
1718
{
1819
var attrSet = new PropertyAttributeSet()
1920
{
@@ -22,11 +23,11 @@ public void BuildPropertyBlock_VariantGet()
2223
AsTypeName = "Variant",
2324
};
2425

25-
var results = GeneratePropertyBlocks("Public xxx As Variant", "xxx", attrSet);
26+
var results = GeneratePropertyBlocks($"{accessibility} xxx As Variant", "xxx", attrSet);
2627
var actualLines = results.Get.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();
2728

2829
Assert.AreEqual(7, actualLines.Count);
29-
Assert.AreEqual(actualLines[0].Trim(), $"Public Property Get {attrSet.PropertyName}() As {attrSet.AsTypeName}");
30+
Assert.AreEqual(actualLines[0].Trim(), $"{accessibility} Property Get {attrSet.PropertyName}() As {attrSet.AsTypeName}");
3031
Assert.AreEqual(actualLines[1].Trim(), $"If IsObject({attrSet.BackingField}) Then");
3132
Assert.AreEqual(actualLines[2].Trim(), $"Set {attrSet.PropertyName} = {attrSet.BackingField}");
3233
Assert.AreEqual(actualLines[3].Trim(), "Else");
@@ -35,13 +36,16 @@ public void BuildPropertyBlock_VariantGet()
3536
Assert.AreEqual(actualLines[6].Trim(), "End Property");
3637
}
3738

38-
[TestCase("Variant")]
39-
[TestCase("Long")]
40-
[TestCase("String")]
39+
[TestCase("Variant", "Public")]
40+
[TestCase("Long", "Public")]
41+
[TestCase("String", "Public")]
42+
[TestCase("Variant", "Private")]
43+
[TestCase("Long", "Private")]
44+
[TestCase("String", "Private")]
4145
[Category("Refactorings")]
4246
[Category("Encapsulate Field")]
4347
[Category(nameof(EncapsulateFieldCodeBuilder))]
44-
public void BuildPropertyBlock_Let(string asTypeName)
48+
public void BuildPropertyBlock_Let(string asTypeName, string accessibility)
4549
{
4650
var attrSet = new PropertyAttributeSet()
4751
{
@@ -52,22 +56,25 @@ public void BuildPropertyBlock_Let(string asTypeName)
5256
AsTypeName = asTypeName,
5357
};
5458

55-
var results = GeneratePropertyBlocks($"Public xxx As {asTypeName}", "xxx", attrSet);
59+
var results = GeneratePropertyBlocks($"{accessibility} xxx As {asTypeName}", "xxx", attrSet);
5660
var actualLines = results.Let.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();
5761

5862
Assert.AreEqual(3, actualLines.Count);
59-
Assert.AreEqual(actualLines[0].Trim(), $"Public Property Let {attrSet.PropertyName}(ByVal {attrSet.RHSParameterIdentifier} As {asTypeName})");
63+
Assert.AreEqual(actualLines[0].Trim(), $"{accessibility} Property Let {attrSet.PropertyName}(ByVal {attrSet.RHSParameterIdentifier} As {asTypeName})");
6064
Assert.AreEqual(actualLines[1].Trim(), $"{attrSet.BackingField} = {attrSet.RHSParameterIdentifier}");
6165
Assert.AreEqual(actualLines[2].Trim(), "End Property");
6266
}
6367

64-
[TestCase("Variant")]
65-
[TestCase("Long")]
66-
[TestCase("String")]
68+
[TestCase("Variant", "Public")]
69+
[TestCase("Long", "Public")]
70+
[TestCase("String", "Public")]
71+
[TestCase("Variant", "Private")]
72+
[TestCase("Long", "Private")]
73+
[TestCase("String", "Private")]
6774
[Category("Refactorings")]
6875
[Category("Encapsulate Field")]
6976
[Category(nameof(EncapsulateFieldCodeBuilder))]
70-
public void BuildPropertyBlock_Set(string asTypeName)
77+
public void BuildPropertyBlock_Set(string asTypeName, string accessibility)
7178
{
7279
var attrSet = new PropertyAttributeSet()
7380
{
@@ -78,11 +85,11 @@ public void BuildPropertyBlock_Set(string asTypeName)
7885
AsTypeName = asTypeName,
7986
};
8087

81-
var results = GeneratePropertyBlocks($"Public xxx As {asTypeName}", "xxx", attrSet);
88+
var results = GeneratePropertyBlocks($"{accessibility} xxx As {asTypeName}", "xxx", attrSet);
8289
var actualLines = results.Set.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();
8390

8491
Assert.AreEqual(3, actualLines.Count);
85-
Assert.AreEqual(actualLines[0].Trim(), $"Public Property Set {attrSet.PropertyName}(ByVal {attrSet.RHSParameterIdentifier} As {asTypeName})");
92+
Assert.AreEqual(actualLines[0].Trim(), $"{accessibility} Property Set {attrSet.PropertyName}(ByVal {attrSet.RHSParameterIdentifier} As {asTypeName})");
8693
Assert.AreEqual(actualLines[1].Trim(), $"Set {attrSet.BackingField} = {attrSet.RHSParameterIdentifier}");
8794
Assert.AreEqual(actualLines[2].Trim(), "End Property");
8895
}

0 commit comments

Comments
 (0)