Skip to content

Commit 266e7e3

Browse files
Timur KelmanTimur Kelman
authored andcommitted
implement special handling for indexed properties' trivia
1 parent f776453 commit 266e7e3

1 file changed

Lines changed: 28 additions & 2 deletions

File tree

CodeConverter/CSharp/DeclarationNodeVisitor.cs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,10 @@ private MemberDeclarationSyntax[] GetAdditionalDeclarations(VBSyntax.StatementSy
305305
private async Task<MemberDeclarationSyntax> ConvertMemberAsync(VBSyntax.StatementSyntax member)
306306
{
307307
try {
308-
return await member.AcceptAsync<MemberDeclarationSyntax>(TriviaConvertingDeclarationVisitor);
308+
var sourceTriviaMapKind = member is VBSyntax.PropertyBlockSyntax propBlock && ShouldConvertAsParameterizedProperty(propBlock.PropertyStatement)
309+
? SourceTriviaMapKind.SubNodesOnly
310+
: SourceTriviaMapKind.All;
311+
return await member.AcceptAsync<MemberDeclarationSyntax>(TriviaConvertingDeclarationVisitor, sourceTriviaMapKind);
309312
} catch (Exception e) {
310313
return CreateErrorMember(member, e);
311314
}
@@ -938,7 +941,30 @@ private static AccessorListSyntax ConvertSimpleAccessors(bool isWriteOnly, bool
938941

939942
public override async Task<CSharpSyntaxNode> VisitPropertyBlock(VBSyntax.PropertyBlockSyntax node)
940943
{
941-
return await node.PropertyStatement.AcceptAsync<CSharpSyntaxNode>(TriviaConvertingDeclarationVisitor, SourceTriviaMapKind.SubNodesOnly);
944+
var converted = await node.PropertyStatement.AcceptAsync<CSharpSyntaxNode>(TriviaConvertingDeclarationVisitor, SourceTriviaMapKind.SubNodesOnly);
945+
946+
if (converted is MethodDeclarationSyntax) {
947+
var first = (MethodDeclarationSyntax)converted;
948+
949+
var firstCsConvertedToken = first.GetFirstToken();
950+
var firstVbSourceToken = node.GetFirstToken();
951+
first = first.ReplaceToken(firstCsConvertedToken, firstCsConvertedToken.WithSourceMappingFrom(firstVbSourceToken));
952+
953+
_additionalDeclarations.TryGetValue(node, out var members);
954+
var last = members?.OfType<MethodDeclarationSyntax>().LastOrDefault() ?? first;
955+
var lastIx = members.ToList().IndexOf(last);
956+
var lastIsFirst = lastIx < 0;
957+
var lastCsConvertedToken = last.GetLastToken();
958+
var lastVbSourceToken = node.GetLastToken();
959+
last = last.ReplaceToken(lastCsConvertedToken, lastCsConvertedToken.WithSourceMappingFrom(lastVbSourceToken));
960+
961+
converted = lastIsFirst ? last : first;
962+
if (!lastIsFirst) {
963+
members![lastIx] = last;
964+
}
965+
}
966+
967+
return converted;
942968
}
943969

944970
public override async Task<CSharpSyntaxNode> VisitAccessorBlock(VBSyntax.AccessorBlockSyntax node)

0 commit comments

Comments
 (0)