Skip to content

Commit 6ee4325

Browse files
Don't use private keyword when already declared private
1 parent 5300b74 commit 6ee4325

3 files changed

Lines changed: 9 additions & 9 deletions

File tree

CodeConverter/CSharp/DeclarationNodeVisitor.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,8 @@ public override async Task<CSharpSyntaxNode> VisitPropertyStatement(VBSyntax.Pro
685685
var convertibleModifiers = node.Modifiers.Where(m => !m.IsKind(VBasic.SyntaxKind.ReadOnlyKeyword, VBasic.SyntaxKind.WriteOnlyKeyword, VBasic.SyntaxKind.DefaultKeyword));
686686
var modifiers = CommonConversions.ConvertModifiers(node, convertibleModifiers.ToList(), GetMemberContext(node));
687687
var isIndexer = CommonConversions.IsDefaultIndexer(node);
688-
var accessedThroughMyClass = IsAccessedThroughMyClass(node, node.Identifier, ModelExtensions.GetDeclaredSymbol(_semanticModel, node));
688+
var nodeSymbol = ModelExtensions.GetDeclaredSymbol(_semanticModel, node);
689+
var accessedThroughMyClass = IsAccessedThroughMyClass(node, node.Identifier, nodeSymbol);
689690
bool hasImplementation = !node.Modifiers.Any(m => m.IsKind(VBasic.SyntaxKind.MustOverrideKeyword)) && node.GetAncestor<VBSyntax.InterfaceBlockSyntax>() == null;
690691

691692
var initializer = (EqualsValueClauseSyntax) await node.Initializer.AcceptAsync(_triviaConvertingExpressionVisitor);
@@ -730,7 +731,7 @@ public override async Task<CSharpSyntaxNode> VisitPropertyStatement(VBSyntax.Pro
730731
)
731732
));
732733
} else {
733-
accessors = ConvertSimpleAccessors(isWriteOnly, isReadonly, hasImplementation);
734+
accessors = ConvertSimpleAccessors(isWriteOnly, isReadonly, hasImplementation, nodeSymbol.DeclaredAccessibility);
734735
}
735736

736737

@@ -806,19 +807,19 @@ private string AddRealPropertyDelegatingToMyClassVersion(VBSyntax.PropertyStatem
806807
return csIndentifierName;
807808
}
808809

809-
private static AccessorListSyntax ConvertSimpleAccessors(bool isWriteOnly, bool isReadonly, bool hasImplementation)
810+
private static AccessorListSyntax ConvertSimpleAccessors(bool isWriteOnly, bool isReadonly, bool hasImplementation, Accessibility declaredAccessibility)
810811
{
811812
AccessorListSyntax accessors;
812813
var getAccessor = SyntaxFactory.AccessorDeclaration(Microsoft.CodeAnalysis.CSharp.SyntaxKind.GetAccessorDeclaration)
813814
.WithSemicolonToken(SemicolonToken);
814815
var setAccessor = SyntaxFactory.AccessorDeclaration(Microsoft.CodeAnalysis.CSharp.SyntaxKind.SetAccessorDeclaration)
815816
.WithSemicolonToken(SemicolonToken);
816-
if (isWriteOnly)
817+
if (isWriteOnly && declaredAccessibility != Accessibility.Private)
817818
{
818819
getAccessor = getAccessor.AddModifiers(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PrivateKeyword));
819820
}
820821

821-
if (isReadonly)
822+
if (isReadonly && declaredAccessibility != Accessibility.Private)
822823
{
823824
setAccessor = setAccessor.AddModifiers(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PrivateKeyword));
824825
}

Tests/CSharp/ExpressionTests/ExpressionTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ public static void Main()
284284
}
285285
1 target compilation errors:
286286
CS0825: The contextual keyword 'var' may only appear within a local variable declaration or in script code");
287+
//BUG: Correct textual output, but requires var pattern syntax construct not available before CodeAnalysis 3
287288
}
288289

289290
[Fact]

Tests/CSharp/MemberTests/PropertyMemberTests.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,9 @@ Private ReadOnly Property First As New List(Of String)
267267
268268
internal partial class TestClass
269269
{
270-
private List<string> First { get; private set; } = new List<string>();
270+
private List<string> First { get; set; } = new List<string>();
271271
private int Second { get; set; } = 0;
272-
}
273-
1 target compilation errors:
274-
CS0273: The accessibility modifier of the 'TestClass.First.set' accessor must be more restrictive than the property or indexer 'TestClass.First'");
272+
}");
275273
}
276274

277275
[Fact]

0 commit comments

Comments
 (0)