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