Skip to content

Commit d383578

Browse files
Fix Object Initializers Referencing Other Properties (#1080)
Co-authored-by: GrahamTheCoder <2490482+GrahamTheCoder@users.noreply.github.com>
1 parent 2c2b64e commit d383578

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

CodeConverter/CSharp/NameExpressionNodeVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ public async Task<CSharpSyntaxNode> ConvertMemberAccessExpressionAsync(VBasic.Sy
8787
if (IsSubPartOfConditionalAccess(node)) {
8888
return isDefaultProperty ? SyntaxFactory.ElementBindingExpression()
8989
: await AdjustForImplicitInvocationAsync(node, SyntaxFactory.MemberBindingExpression(simpleNameSyntax));
90-
} else if (node.IsParentKind(VBasic.SyntaxKind.NamedFieldInitializer)) {
91-
return ValidSyntaxFactory.IdentifierName(_tempNameForAnonymousScope[node.Name.Identifier.Text].Peek().TempName);
90+
} else if (node.IsParentKind(VBasic.SyntaxKind.NamedFieldInitializer) && _tempNameForAnonymousScope.TryGetValue(node.Name.Identifier.Text, out var stack) && stack.Any()) {
91+
return ValidSyntaxFactory.IdentifierName(stack.Peek().TempName);
9292
}
9393
left = _withBlockLhs.Peek();
9494
}

Tests/VB/ExpressionTests.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,57 @@ End Sub
587587
End Class");
588588
}
589589

590+
[Fact]
591+
public async Task ObjectInitializerExpressionReferencingOtherPropertyAsync()
592+
{
593+
await TestConversionVisualBasicToCSharpAsync(@"Imports System.Drawing
594+
595+
Public Class VisualBasicClass
596+
Public Sub M()
597+
Dim Shape = New Point() With {
598+
.X = 1,
599+
.Y = .X
600+
}
601+
End Sub
602+
End Class", @"using System.Drawing;
603+
604+
public partial class VisualBasicClass
605+
{
606+
public void M()
607+
{
608+
Point @init = new Point();
609+
var Shape = (@init.X = 1, @init.Y = @init.X, @init).@init;
610+
}
611+
}");
612+
}
613+
614+
[Fact]
615+
public async Task AdvancedObjectInitializerExpressionReferencingOtherPropertyAsync()
616+
{
617+
await TestConversionVisualBasicToCSharpAsync(@"Imports System.Drawing
618+
619+
Public Class VisualBasicClass
620+
Public Sub M()
621+
Dim Shape = New Rectangle() With {
622+
.X = 1,
623+
.Y = .X + 10,
624+
.Width = .X + .Y,
625+
.Height = System.Math.Max(.Width, .Y)
626+
}
627+
End Sub
628+
End Class", @"using System;
629+
using System.Drawing;
630+
631+
public partial class VisualBasicClass
632+
{
633+
public void M()
634+
{
635+
Rectangle @init = new Rectangle();
636+
var Shape = (@init.X = 1, @init.Y = @init.X + 10, @init.Width = @init.X + @init.Y, @init.Height = Math.Max(@init.Width, @init.Y), @init).@init;
637+
}
638+
}");
639+
}
640+
590641
[Fact]
591642
public async Task ObjectInitializerExpression3Async()
592643
{

0 commit comments

Comments
 (0)