private string GenerateExceptionCreationExpression(ObjectCreationExpressionSyntax exceptionCreationExpressionSyntax, SemanticModel semanticModel)
        {
            var    exceptionType          = (INamedTypeSymbol)ModelExtensions.GetTypeInfo(semanticModel, exceptionCreationExpressionSyntax).Type;
            string exceptionTypeFullName  = SyntaxTreeHelper.GetFullyQualifiedName(exceptionType);
            string generatedExceptionName = "";

            if (exceptionTypeFullName == "System.ArgumentNullException")
            {
                generatedExceptionName = "IllegalArgumentException";
            }
            else if (exceptionTypeFullName == "System.ArgumentException")
            {
                generatedExceptionName = "IllegalArgumentException";
            }
            else if (exceptionTypeFullName == "System.NullReferenceException")
            {
                generatedExceptionName = "NullPointerException";
            }
            else if (exceptionTypeFullName == "System.InvalidOperationException")
            {
                generatedExceptionName = "IllegalStateException";
            }
            else
            {
                throw new NotSupportedException();
            }
            string argumentList = ArgumentListGenerator.Generate(exceptionCreationExpressionSyntax.ArgumentList, semanticModel);

            return("new " + generatedExceptionName + argumentList);
        }
示例#2
0
        public void CreateArgumentListWithThreeExpressions()
        {
            var arguments = new List <ExpressionSyntax> {
                SyntaxFactory.IdentifierName(SyntaxFactory.Identifier("a")),
                SyntaxFactory.IdentifierName(SyntaxFactory.Identifier("b")),
                SyntaxFactory.IdentifierName(SyntaxFactory.Identifier("c"))
            };

            Assert.AreEqual("(a,b,c)", ArgumentListGenerator.CreateArgumentList(arguments).ToString());
        }
        private string GenerateObjectCreationExpression(ObjectCreationExpressionSyntax objectCreationExpressionSyntax, SemanticModel semanticModel)
        {
            var type = (INamedTypeSymbol)ModelExtensions.GetTypeInfo(semanticModel, objectCreationExpressionSyntax).Type;

            if (IsExceptionType(type))
            {
                return(GenerateExceptionCreationExpression(objectCreationExpressionSyntax, semanticModel));
            }
            string typeReference   = TypeReferenceGenerator.GenerateTypeReference(type, semanticModel).Text;
            string argumentList    = ArgumentListGenerator.Generate(objectCreationExpressionSyntax.ArgumentList, semanticModel);
            string constructorCall = "new " + typeReference + argumentList;

            var initializer = objectCreationExpressionSyntax.Initializer;

            if (initializer == null || !initializer.Expressions.Any())
            {
                return(constructorCall);
            }
            else
            {
                string objectToCreateName = "temp";

                string initializations = "";

                var expressions = objectCreationExpressionSyntax.Initializer.Expressions;
                foreach (var expressionSyntax in expressions)
                {
                    if (expressionSyntax is AssignmentExpressionSyntax)
                    {
                        var assignmentExpressionSyntax = expressionSyntax as AssignmentExpressionSyntax;
                        //string left = objectToCreateName + "." + GenerateExpression(assignmentExpressionSyntax.Left, semanticModel);
                        string expressionString = GenerateAssignmentExpression(assignmentExpressionSyntax, semanticModel);
                        initializations += objectToCreateName + "." + expressionString + ";\n";
                    }
                    else
                    {
                        //string left = objectToCreateName + "." + GenerateExpression(assignmentExpressionSyntax.Left, semanticModel);
                        string expressionString = GenerateExpression(expressionSyntax, semanticModel);
                        initializations += objectToCreateName + ".add(" + expressionString + ");\n";
                    }
                }

                string creationStatements = typeReference + " " + objectToCreateName + " = " + constructorCall + ";\n" +
                                            initializations +
                                            "return " + objectToCreateName + ";\n";

                string constructAndInitialize = "((new by.besmart.cross.delegates.Func() {\n" +
                                                "\t\tpublic " + typeReference + " invoke() {\n" +
                                                creationStatements.AddTab(3) +
                                                "}\n" +
                                                "\t}).invoke())";

                return(constructAndInitialize);
            }
        }
        public void It_can_pass_through_multiple_arguments()
        {
            var argument       = new { foo = 3 };
            var secondArgument = new { bar = 2 };

            var list = ArgumentListGenerator.GenerateArgumentListForGetProgramState(new FilePosition
            {
                Line      = 1,
                Character = 1,
                File      = "test.cs"
            }, (argument, "foo"), (secondArgument, "bar"));

            var text     = list.ToString();
            var expected = "(\"{\\\"line\\\":1,\\\"character\\\":1,\\\"file\\\":\\\"test.cs\\\"}\",(\"{\\\"foo\\\":3}\",foo),(\"{\\\"bar\\\":2}\",bar))";

            Assert.Equal(expected, text);
        }
        private static ExpressionStatementSyntax _CreateParallelFor(ForStatementSyntax statement)
        {
            var variable = statement.Declaration.Variables.Single();
            var from     = variable.Initializer.Value;

            // The analyzer only allows binary expressions where the upper bound is on the left hand-side.
            // Therefore, no further checks are necessary.
            var binary = (BinaryExpressionSyntax)statement.Condition;
            var to     = binary.Right;

            if (binary.IsKind(SyntaxKind.LessThanOrEqualExpression))
            {
                // TODO maybe try to reduce resulting expressions like ...-1+1
                to = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression, to, _CreateOneLiteral());
            }

            return(SyntaxFactory.ExpressionStatement(
                       SyntaxFactory.InvocationExpression(
                           MemberAccessGenerator.CreateMemberAccess("Parallel", "For"),
                           ArgumentListGenerator.CreateArgumentList(from, to, LambdaGenerator.CreateLambdaOrDelegate(variable.Identifier, statement.Statement))
                           )
                       ).WithTriviaFrom(statement));
        }
示例#6
0
        public void CreateArgumentListWithOneExpression()
        {
            var identifier = SyntaxFactory.IdentifierName(SyntaxFactory.Identifier("a"));

            Assert.AreEqual("(a)", ArgumentListGenerator.CreateArgumentList(identifier).ToString());
        }
示例#7
0
 public void CreateArgumentListWithoutExpressions()
 {
     Assert.AreEqual("()", ArgumentListGenerator.CreateArgumentList().ToString());
 }