@@ -385,7 +385,63 @@ public ExpressionSyntaxRewriter(INamedTypeSymbol targetTypeSymbol, NullCondition
385385
386386 return base . VisitNullableType ( node ) ;
387387 }
388-
388+
389+ public override SyntaxNode ? VisitInitializerExpression ( InitializerExpressionSyntax node )
390+ {
391+ // Only handle object initializers that might contain indexer assignments
392+ if ( ! node . IsKind ( SyntaxKind . ObjectInitializerExpression ) )
393+ {
394+ return base . VisitInitializerExpression ( node ) ;
395+ }
396+
397+ // Check if any expression is an indexer assignment (e.g., ["key"] = value)
398+ var hasIndexerAssignment = node . Expressions . Any ( e =>
399+ e is AssignmentExpressionSyntax { Left : ImplicitElementAccessSyntax } ) ;
400+
401+ if ( ! hasIndexerAssignment )
402+ {
403+ return base . VisitInitializerExpression ( node ) ;
404+ }
405+
406+ var newExpressions = new SeparatedSyntaxList < ExpressionSyntax > ( ) ;
407+
408+ foreach ( var expression in node . Expressions )
409+ {
410+ if ( expression is AssignmentExpressionSyntax assignment &&
411+ assignment . Left is ImplicitElementAccessSyntax implicitElementAccess )
412+ {
413+ // Transform ["key"] = value into { "key", value }
414+ var arguments = new SeparatedSyntaxList < ExpressionSyntax > ( ) ;
415+
416+ foreach ( var argument in implicitElementAccess . ArgumentList . Arguments )
417+ {
418+ var visitedArgument = ( ExpressionSyntax ? ) Visit ( argument . Expression ) ?? argument . Expression ;
419+ arguments = arguments . Add ( visitedArgument ) ;
420+ }
421+
422+ var visitedValue = ( ExpressionSyntax ? ) Visit ( assignment . Right ) ?? assignment . Right ;
423+ arguments = arguments . Add ( visitedValue ) ;
424+
425+ var complexElementInitializer = SyntaxFactory . InitializerExpression (
426+ SyntaxKind . ComplexElementInitializerExpression ,
427+ arguments
428+ ) ;
429+
430+ newExpressions = newExpressions . Add ( complexElementInitializer ) ;
431+ }
432+ else
433+ {
434+ var visitedExpression = ( ExpressionSyntax ? ) Visit ( expression ) ?? expression ;
435+ newExpressions = newExpressions . Add ( visitedExpression ) ;
436+ }
437+ }
438+
439+ return SyntaxFactory . InitializerExpression (
440+ SyntaxKind . CollectionInitializerExpression ,
441+ newExpressions
442+ ) . WithTriviaFrom ( node ) ;
443+ }
444+
389445 private ExpressionSyntax ReplaceVariableWithCast ( ExpressionSyntax expression , DeclarationPatternSyntax declaration , ExpressionSyntax governingExpression )
390446 {
391447 if ( declaration . Designation is SingleVariableDesignationSyntax variableDesignation )
0 commit comments