public override void VisitExpression(ExpressionSyntax node) { // replace Apex-style constructor initializers: // new Class(Prop1=Value1, Prop2=Value2) => new Class { Prop1=Value1, Prop2=Value2 } var expr = GenericExpressionHelper.ConvertApexConstructorInitializerToCSharp(node.ExpressionString); // split into portions and process one by one base.VisitExpression(new ExpressionSyntax(expr)); }
public void ApexConstructorInitializerIsConvertedToCSharp() { string Convert(string x) => GenericExpressionHelper.ConvertApexConstructorInitializerToCSharp(x); var text = "new Something(Property = 1)"; var csharp = Convert(text); Assert.AreEqual("new Something { Property = 1 }", csharp); text = @"new MyClass (Email = 'some\'@example.com', Name = 'Hello')"; csharp = Convert(text); Assert.AreEqual(@"new MyClass { Email = 'some\'@example.com', Name = 'Hello' }", csharp); text = @"int c = new Contact(ID = 'Hello', Date = Date.NewInstance(1,2,3), Name='y@e\mail.com') + 2"; csharp = Convert(text); Assert.AreEqual(@"int c = new Contact { ID = 'Hello', Date = Date.NewInstance(1,2,3), Name='y@e\mail.com' } + 2", csharp); text = @"int c = new Contact(ID = 'Hello', Stuff = [SELECT ID FROM DUAL]), int y = 10"; csharp = Convert(text); Assert.AreEqual(@"int c = new Contact { ID = 'Hello', Stuff = [SELECT ID FROM DUAL] }, int y = 10", csharp); }