private BinaryExpressionSyntax TranslateCaseToCondition(ExpressionSyntax expressionSyntax, CaseClauseSyntax c)
 {
     var simple = c as SimpleCaseClauseSyntax;
     if (simple != null)
         return SyntaxFactory.BinaryExpression(SyntaxKind.EqualsExpression, expressionSyntax, SyntaxFactory.Token(SyntaxKind.EqualsToken), simple.Value.WithoutTrivia());
     var range = c as RangeCaseClauseSyntax;
     if (range != null)
         return SyntaxFactory.BinaryExpression(
             SyntaxKind.AndAlsoExpression,
             SyntaxFactory.BinaryExpression(SyntaxKind.GreaterThanOrEqualExpression, expressionSyntax, SyntaxFactory.Token(SyntaxKind.GreaterThanEqualsToken), range.LowerBound.WithoutTrivia()),
             SyntaxFactory.Token(SyntaxKind.AndAlsoKeyword),
             SyntaxFactory.BinaryExpression(SyntaxKind.LessThanOrEqualExpression, expressionSyntax, SyntaxFactory.Token(SyntaxKind.LessThanEqualsToken), range.UpperBound.WithoutTrivia())
         );
     var relational = c as RelationalCaseClauseSyntax;
     if (relational != null)
         return SyntaxFactory.BinaryExpression(SyntaxKind.EqualsExpression, expressionSyntax, relational.OperatorToken, relational.Value.WithoutTrivia());
     throw new NotSupportedException();
 }
        ExpressionSyntax CollectCondition(ExpressionSyntax expressionSyntax, CaseClauseSyntax[] cases)
        {
            //default
            if (cases.Length == 0 || cases.OfType<ElseCaseClauseSyntax>().Any())
                return null;

            var conditionList = cases.Select(c => TranslateCaseToCondition(expressionSyntax, c).NormalizeWhitespace()).ToList();

            if (conditionList.Count == 1)
                return conditionList.First();

            ExpressionSyntax condition = conditionList[0];
            for (int i = 1; i < conditionList.Count; ++i)
            {
                condition = SyntaxFactory.BinaryExpression(SyntaxKind.OrElseExpression, condition, SyntaxFactory.Token(SyntaxKind.OrElseKeyword), conditionList[i]);
            }
            return condition.WithAdditionalAnnotations(Formatter.Annotation);
        }
Exemplo n.º 3
0
        private BinaryExpressionSyntax TranslateCaseToCondition(ExpressionSyntax expressionSyntax, CaseClauseSyntax c)
        {
            var simple = c as SimpleCaseClauseSyntax;

            if (simple != null)
            {
                return(SyntaxFactory.BinaryExpression(SyntaxKind.EqualsExpression, expressionSyntax, SyntaxFactory.Token(SyntaxKind.EqualsToken), simple.Value.WithoutTrivia()));
            }
            var range = c as RangeCaseClauseSyntax;

            if (range != null)
            {
                return(SyntaxFactory.BinaryExpression(
                           SyntaxKind.AndAlsoExpression,
                           SyntaxFactory.BinaryExpression(SyntaxKind.GreaterThanOrEqualExpression, expressionSyntax, SyntaxFactory.Token(SyntaxKind.GreaterThanEqualsToken), range.LowerBound.WithoutTrivia()),
                           SyntaxFactory.Token(SyntaxKind.AndAlsoKeyword),
                           SyntaxFactory.BinaryExpression(SyntaxKind.LessThanOrEqualExpression, expressionSyntax, SyntaxFactory.Token(SyntaxKind.LessThanEqualsToken), range.UpperBound.WithoutTrivia())
                           ));
            }
            var relational = c as RelationalCaseClauseSyntax;

            if (relational != null)
            {
                return(SyntaxFactory.BinaryExpression(SyntaxKind.EqualsExpression, expressionSyntax, relational.OperatorToken, relational.Value.WithoutTrivia()));
            }
            throw new NotSupportedException();
        }