예제 #1
0
        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);
        }