From d3835784fd7419840a2b74dfc7f07d2df26761c6 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 14 Mar 2026 00:24:51 +0000 Subject: [PATCH] Fix Object Initializers Referencing Other Properties (#1080) Co-authored-by: GrahamTheCoder <2490482+GrahamTheCoder@users.noreply.github.com> --- .../CSharp/NameExpressionNodeVisitor.cs | 4 +- Tests/VB/ExpressionTests.cs | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/CodeConverter/CSharp/NameExpressionNodeVisitor.cs b/CodeConverter/CSharp/NameExpressionNodeVisitor.cs index 666fbe4ed..8a0fefd04 100644 --- a/CodeConverter/CSharp/NameExpressionNodeVisitor.cs +++ b/CodeConverter/CSharp/NameExpressionNodeVisitor.cs @@ -87,8 +87,8 @@ public async Task ConvertMemberAccessExpressionAsync(VBasic.Sy if (IsSubPartOfConditionalAccess(node)) { return isDefaultProperty ? SyntaxFactory.ElementBindingExpression() : await AdjustForImplicitInvocationAsync(node, SyntaxFactory.MemberBindingExpression(simpleNameSyntax)); - } else if (node.IsParentKind(VBasic.SyntaxKind.NamedFieldInitializer)) { - return ValidSyntaxFactory.IdentifierName(_tempNameForAnonymousScope[node.Name.Identifier.Text].Peek().TempName); + } else if (node.IsParentKind(VBasic.SyntaxKind.NamedFieldInitializer) && _tempNameForAnonymousScope.TryGetValue(node.Name.Identifier.Text, out var stack) && stack.Any()) { + return ValidSyntaxFactory.IdentifierName(stack.Peek().TempName); } left = _withBlockLhs.Peek(); } diff --git a/Tests/VB/ExpressionTests.cs b/Tests/VB/ExpressionTests.cs index a1bb4d158..fd10e5672 100644 --- a/Tests/VB/ExpressionTests.cs +++ b/Tests/VB/ExpressionTests.cs @@ -587,6 +587,57 @@ End Sub End Class"); } + [Fact] + public async Task ObjectInitializerExpressionReferencingOtherPropertyAsync() + { + await TestConversionVisualBasicToCSharpAsync(@"Imports System.Drawing + +Public Class VisualBasicClass + Public Sub M() + Dim Shape = New Point() With { + .X = 1, + .Y = .X + } + End Sub +End Class", @"using System.Drawing; + +public partial class VisualBasicClass +{ + public void M() + { + Point @init = new Point(); + var Shape = (@init.X = 1, @init.Y = @init.X, @init).@init; + } +}"); + } + + [Fact] + public async Task AdvancedObjectInitializerExpressionReferencingOtherPropertyAsync() + { + await TestConversionVisualBasicToCSharpAsync(@"Imports System.Drawing + +Public Class VisualBasicClass + Public Sub M() + Dim Shape = New Rectangle() With { + .X = 1, + .Y = .X + 10, + .Width = .X + .Y, + .Height = System.Math.Max(.Width, .Y) + } + End Sub +End Class", @"using System; +using System.Drawing; + +public partial class VisualBasicClass +{ + public void M() + { + Rectangle @init = new Rectangle(); + 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; + } +}"); + } + [Fact] public async Task ObjectInitializerExpression3Async() {