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);
        }
        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);
            }
        }