コード例 #1
0
        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);
        }