Skip to content

Commit 07bae84

Browse files
committed
Detect correct accessibility for generated record properties
1 parent 54613f6 commit 07bae84

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

Diff for: src/DendroDocs.Tool/Analyzers/SourceAnalyzer.cs

+9
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,15 @@ private PropertyDescription CreatePropertyDescription(IPropertySymbol property)
376376
{
377377
var modifiers = property.IsReadOnly ? Modifier.Readonly : 0;
378378

379+
modifiers |= property.DeclaredAccessibility switch
380+
{
381+
Accessibility.Public => Modifier.Public,
382+
Accessibility.Protected => Modifier.Protected,
383+
Accessibility.Internal => Modifier.Internal,
384+
Accessibility.Private => Modifier.Private,
385+
_ => 0
386+
};
387+
379388
var propertyDescription = new PropertyDescription(property.Type.ToDisplayString(), property.Name)
380389
{
381390
Modifiers = modifiers

Diff for: tests/DendroDocs.Tool.Tests/RecordDeclarationTests.cs

+40
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,44 @@ internal record struct NestedC {};
105105
// Assert
106106
types[1].Modifiers.Should().HaveFlag(modifier);
107107
}
108+
109+
[TestMethod]
110+
public void RecordPropertiesShouldHaveCorrectAccessModifiersBasedOnDefault()
111+
{
112+
// Assign
113+
var source =
114+
$$"""
115+
public record Person(string FirstName, string LastName)
116+
{
117+
}
118+
""";
119+
120+
// Act
121+
var types = TestHelper.VisitSyntaxTree(source, "CS0067");
122+
123+
// Assert
124+
types[0].Properties[0].Modifiers.Should().HaveFlag(Modifier.Protected);
125+
types[0].Properties[1].Modifiers.Should().HaveFlag(Modifier.Public);
126+
types[0].Properties[2].Modifiers.Should().HaveFlag(Modifier.Public);
127+
}
128+
129+
[TestMethod]
130+
public void SealedRecordPropertiesShouldHaveCorrectAccessModifiers()
131+
{
132+
// Assign
133+
var source =
134+
$$"""
135+
public sealed record Person(string FirstName, string LastName)
136+
{
137+
}
138+
""";
139+
140+
// Act
141+
var types = TestHelper.VisitSyntaxTree(source, "CS0067");
142+
143+
// Assert
144+
types[0].Properties[0].Modifiers.Should().HaveFlag(Modifier.Private);
145+
types[0].Properties[1].Modifiers.Should().HaveFlag(Modifier.Public);
146+
types[0].Properties[2].Modifiers.Should().HaveFlag(Modifier.Public);
147+
}
108148
}

0 commit comments

Comments
 (0)