public override SyntaxNode VisitAnonymousObjectCreationExpression(AnonymousObjectCreationExpressionSyntax node) { var generated = node.Ancestors().OfType<ClassDeclarationSyntax>().Any(a => a.Identifier.ValueText.StartsWith("__FTI")); if (generated) return base.VisitAnonymousObjectCreationExpression(node); var expType = Model.GetTypeInfo(node).Type; if (AnonTypeUsage.AreEquivalent(expType, Type, Comp)) { var propAssignment = node.Initializers.OfType<AnonymousObjectMemberDeclaratorSyntax>() .Select( w => { // Handle the new { Blah = Foo + Bar } case if (w.NameEquals != null) { return Syntax.BinaryExpression( SyntaxKind.AssignExpression, w.NameEquals.Identifier, w.Expression ).WithLeadingTrivia(w.GetLeadingTrivia()).WithTrailingTrivia(w.GetTrailingTrivia()); } // Handle the new { Fizz } case return Syntax.BinaryExpression( SyntaxKind.AssignExpression, w.Expression, w.Expression ).WithLeadingTrivia(w.GetLeadingTrivia()).WithTrailingTrivia(w.GetTrailingTrivia()); }) .Cast<ExpressionSyntax>().ToList(); var separators = new List<SyntaxToken>(); for (var i = 0; i < node.Initializers.SeparatorCount; i++) separators.Add(Syntax.Token(node.Initializers.GetSeparator(i).Kind)); var equiv = Syntax.ObjectCreationExpression( NewType.WithLeadingTrivia(Syntax.ParseLeadingTrivia(" ")), Syntax.ArgumentList(), Syntax.InitializerExpression( SyntaxKind.ObjectInitializerExpression, Syntax.SeparatedList( propAssignment, separators ) ) ); return equiv.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia()); } return base.VisitAnonymousObjectCreationExpression(node); }