public static ExpressionSyntax BuildArgValueExpression(object value, string declaredConst, LiteralKind valueType) { var kind = Mappings.SyntaxKindFromLiteralKind(valueType, value); ExpressionSyntax expr = null; if (valueType == LiteralKind.Boolean) { expr = SyntaxFactory.LiteralExpression(kind); } else if (valueType == LiteralKind.Null) { expr = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression); } else if (valueType == LiteralKind.Type) { var type = value as RDomReferencedType; if (type == null) { throw new InvalidOperationException(); } var typeSyntax = (TypeSyntax)RDom.CSharp.GetSyntaxGroup(type).First(); expr = SyntaxFactory.TypeOfExpression(typeSyntax); } else if (valueType == LiteralKind.Default) { var type = value as RDomReferencedType; if (type == null) { throw new InvalidOperationException(); } var typeSyntax = (TypeSyntax)RDom.CSharp.GetSyntaxGroup(type).First(); expr = SyntaxFactory.DefaultExpression(typeSyntax); } else if (valueType == LiteralKind.MemberAccess) { var leftExpr = SyntaxFactory.IdentifierName(declaredConst.SubstringBeforeLast(".")); var name = SyntaxFactory.IdentifierName(declaredConst.SubstringAfterLast(".")); expr = SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, leftExpr, name); } else { var token = BuildSyntaxHelpers.GetTokenFromKind(valueType, value); expr = SyntaxFactory.LiteralExpression((SyntaxKind)kind, token); } return(expr); }