Skip to content

Commit dcd4349

Browse files
authoredFeb 16, 2025
Merge pull request #6254 from tommy9/encapsulate-field-accessibility
Encapsulate field accessibility
2 parents 1bcc6df + 11ebc00 commit dcd4349

File tree

6 files changed

+42
-34
lines changed

6 files changed

+42
-34
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
}

‎RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldUseBackingField/EncapsulateArrayFieldTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void EncapsulateArray(string visibility, string arrayDeclaration, string
4343
4444
Private {expectedArrayDeclaration}
4545
46-
Public Property Get MyArray() As Variant
46+
{visibility} Property Get MyArray() As Variant
4747
MyArray = mArray
4848
End Property
4949
";

‎RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldUseBackingField/EncapsulateFieldTests.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,8 @@ public void EncapsulatePrivateField()
294294
var presenterAction = Support.SetParametersForSingleTarget("fizz", "Name");
295295

296296
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
297-
StringAssert.Contains("Public Property Get Name() As Integer", actualCode);
298-
StringAssert.Contains("Public Property Let Name(", actualCode);
297+
StringAssert.Contains("Private Property Get Name() As Integer", actualCode);
298+
StringAssert.Contains("Private Property Let Name(", actualCode);
299299
StringAssert.Contains($"(ByVal {Support.RHSIdentifier} As Integer)", actualCode);
300300
StringAssert.Contains("Name = fizz", actualCode);
301301
StringAssert.Contains($"fizz = {Support.RHSIdentifier}", actualCode);
@@ -323,7 +323,7 @@ End Enum
323323
var presenterAction = Support.UserAcceptsDefaults();
324324
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
325325
StringAssert.Contains("Private numberType1 As NumberTypes", actualCode);
326-
StringAssert.Contains("Public Property Get NumberType() As NumberTypes", actualCode);
326+
StringAssert.Contains($"{fieldAccessibility} Property Get NumberType() As NumberTypes", actualCode);
327327
StringAssert.Contains("NumberType = numberType1", actualCode);
328328
}
329329

@@ -352,7 +352,7 @@ Private numberT|ype As NumberTypes{declarationList ?? string.Empty}
352352
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
353353
var expectedPropertyType = enumTypeAccessibility == "Public" ? "NumberTypes" : "Long";
354354
StringAssert.Contains("Private numberType1 As NumberTypes", actualCode);
355-
StringAssert.Contains($"Public Property Get NumberType() As {expectedPropertyType}", actualCode);
355+
StringAssert.Contains($"Private Property Get NumberType() As {expectedPropertyType}", actualCode);
356356
StringAssert.Contains("NumberType = numberType1", actualCode);
357357
}
358358

@@ -368,8 +368,8 @@ public void EncapsulatePrivateFieldInList()
368368

369369
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
370370
StringAssert.Contains("Private fizz1 As Integer, fuzz As Integer,", actualCode);
371-
StringAssert.Contains("Public Property Get Fizz() As Integer", actualCode);
372-
StringAssert.Contains("Public Property Let Fizz(", actualCode);
371+
StringAssert.Contains("Private Property Get Fizz() As Integer", actualCode);
372+
StringAssert.Contains("Private Property Let Fizz(", actualCode);
373373
StringAssert.Contains($"(ByVal {Support.RHSIdentifier} As Integer)", actualCode);
374374
StringAssert.Contains("Fizz = fizz1", actualCode);
375375
StringAssert.Contains($"fizz1 = {Support.RHSIdentifier}", actualCode);
@@ -387,8 +387,8 @@ public void EncapsulatePrivateField_Defaults()
387387
var presenterAction = Support.UserAcceptsDefaults();
388388

389389
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
390-
StringAssert.Contains("Public Property Get Fizz() As Integer", actualCode);
391-
StringAssert.Contains("Public Property Let Fizz(", actualCode);
390+
StringAssert.Contains("Private Property Get Fizz() As Integer", actualCode);
391+
StringAssert.Contains("Private Property Let Fizz(", actualCode);
392392
StringAssert.Contains($"(ByVal {Support.RHSIdentifier} As Integer)", actualCode);
393393
StringAssert.Contains("Fizz = fizz1", actualCode);
394394
StringAssert.Contains($"fizz1 = {Support.RHSIdentifier}", actualCode);

‎RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldUseBackingField/EncapsulateUDTFieldTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ Private mFizz
167167
StringAssert.Contains($"Public Property Get Bar(", actualCode);
168168
StringAssert.Contains($"Public Property Let Bar(", actualCode);
169169
StringAssert.Contains($"Private mFizz As Variant", actualCode);
170-
StringAssert.Contains($"Public Property Get Fizz() As Variant", actualCode);
171-
StringAssert.Contains($"Public Property Let Fizz(", actualCode);
170+
StringAssert.Contains($"Private Property Get Fizz() As Variant", actualCode);
171+
StringAssert.Contains($"Private Property Let Fizz(", actualCode);
172172
}
173173

174174
[TestCase("Public")]
@@ -359,7 +359,7 @@ End Sub
359359
StringAssert.Contains($"Private mTheClass As Class1", actualCode);
360360
StringAssert.Contains($"Set mTheClass = {Support.RHSIdentifier}", actualCode);
361361
StringAssert.Contains($"Set TheClass = mTheClass", actualCode);
362-
StringAssert.Contains($"Public Property Set TheClass", actualCode);
362+
StringAssert.Contains($"{accessibility} Property Set TheClass", actualCode);
363363
}
364364

365365
[Test]

‎RubberduckTests/Refactoring/EncapsulateField/EncapsulateFieldValidatorTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void EncapsulatePrivateField_ReadOnlyRequiresSet()
4343
const string expectedCode =
4444
@"Private fizz As Collection
4545
46-
Public Property Get Name() As Collection
46+
Private Property Get Name() As Collection
4747
Set Name = fizz
4848
End Property
4949
";
@@ -257,7 +257,7 @@ Private rati|onal As NumberTypes
257257

258258
var presenterAction = Support.UserAcceptsDefaults();
259259
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
260-
StringAssert.Contains("Public Property Get Rational() As NumberTypes", actualCode);
260+
StringAssert.Contains("Private Property Get Rational() As NumberTypes", actualCode);
261261
StringAssert.Contains("Rational = rational2", actualCode);
262262
}
263263

@@ -279,7 +279,7 @@ Private whe|els As Integer
279279

280280
var presenterAction = Support.UserAcceptsDefaults();
281281
var actualCode = Support.RefactoredCode(inputCode.ToCodeString(), presenterAction);
282-
StringAssert.Contains("Public Property Get Wheels()", actualCode);
282+
StringAssert.Contains("Private Property Get Wheels()", actualCode);
283283
StringAssert.Contains("Wheels = wheels1", actualCode);
284284
}
285285

0 commit comments

Comments
 (0)
Failed to load comments.