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