public void TestGetInvocationReal()
        {
            // generated automatically with RoslynQuoter
            var expectedEnvCallObjectMethodExpression = SyntaxFactory
                                                        .InvocationExpression(
                SyntaxFactory.MemberAccessExpression(
                    SyntaxKind.SimpleMemberAccessExpression,
                    SyntaxFactory.IdentifierName("Env"),
                    SyntaxFactory.IdentifierName("CallObjectMethod")))
                                                        .WithArgumentList(SyntaxFactory.ArgumentList(
                                                                              SyntaxFactory.SeparatedList <ArgumentSyntax>(new SyntaxNodeOrToken[] {
                SyntaxFactory.Argument(
                    SyntaxFactory.MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        SyntaxFactory.IdentifierName("jObject"),
                        SyntaxFactory.IdentifierName("Ptr"))),
                SyntaxFactory.Token(SyntaxKind.CommaToken),
                SyntaxFactory.Argument(
                    SyntaxFactory.MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        SyntaxFactory.IdentifierName("GetClassNameMethod"),
                        SyntaxFactory.IdentifierName("Ptr")))
            })));
            var actualEnvCallObjectMethodExpression =
                MethodBodyGetter.GetInvocationFor(
                    "Env", "CallObjectMethod",
                    MethodBodyGetter.GetMember("jObject", "Ptr"),
                    MethodBodyGetter.GetMember("GetClassNameMethod", "Ptr"));

            Assert.AreEqual(
                expectedEnvCallObjectMethodExpression.ToString(),
                actualEnvCallObjectMethodExpression.ToString());
        }
        public BlockSyntax GetBodyFor(MethodDeclarationSyntax methodDeclaration)
        {
            var body = new List <StatementSyntax>();
            var usingStatementBody = SyntaxFactory.Block();

            var envCallObjectMethodExpression = MethodBodyGetter.GetInvocationFor(
                "Env", "CallObjectMethod",
                MethodBodyGetter.GetMember("jObject", "Ptr"),
                MethodBodyGetter.GetMember("GetClassNameMethod", "Ptr"));

            var declaration = SyntaxFactory
                              .VariableDeclaration(SyntaxFactory.IdentifierName("var"))
                              .WithVariables(SyntaxFactory.SingletonSeparatedList(SyntaxFactory
                                                                                  .VariableDeclarator(SyntaxFactory.Identifier("a"))
                                                                                  .WithInitializer(SyntaxFactory.EqualsValueClause(envCallObjectMethodExpression))));

            var usingStatement = SyntaxFactory.UsingStatement(
                declaration, null, usingStatementBody)
                                 .NormalizeWhitespace();

            body.Add(usingStatement);
            var res = SyntaxFactory.Block(body);

            return(res);
        }
        public void TestGetInvocationSimple()
        {
            var result = MethodBodyGetter.GetInvocationFor(
                "obj", "DoSmth",
                SyntaxFactory.IdentifierName("localVar"));

            Assert.AreEqual("obj.DoSmth(localVar)", result.ToString());
        }
        public void TestGetInvocationComplex()
        {
            var result = MethodBodyGetter.GetInvocationFor(
                "obj", "DoSmth",
                SyntaxFactory.IdentifierName("localVar"),
                SyntaxFactory.IdentifierName("anotherVar"),
                SyntaxFactory.ObjectCreationExpression(
                    SyntaxFactory.IdentifierName("A"))
                .WithArgumentList(SyntaxFactory.ArgumentList())
                .NormalizeWhitespace());

            Assert.AreEqual("obj.DoSmth(localVar,anotherVar,new A())", result.ToString());
        }