private static ExpressionSyntax GetBooleanExpression( ExpressionSyntax condition, ExpressionSyntax expression1, ExpressionSyntax expression2, SemanticModel semanticModel, CancellationToken cancellationToken = default(CancellationToken)) { switch (expression1.Kind()) { case SyntaxKind.TrueLiteralExpression: { switch (expression2.Kind()) { case SyntaxKind.TrueLiteralExpression: return(expression2); case SyntaxKind.FalseLiteralExpression: return(condition); default: return(LogicalOrExpression(condition, expression2)); } } case SyntaxKind.FalseLiteralExpression: { switch (expression2.Kind()) { case SyntaxKind.TrueLiteralExpression: return(Negator.LogicallyNegate(condition, semanticModel, cancellationToken)); case SyntaxKind.FalseLiteralExpression: return(expression2); default: return(LogicalAndExpression(Negator.LogicallyNegate(condition, semanticModel, cancellationToken), expression2)); } } default: { switch (expression2.Kind()) { case SyntaxKind.TrueLiteralExpression: return(LogicalOrExpression(Negator.LogicallyNegate(condition, semanticModel, cancellationToken), expression1)); case SyntaxKind.FalseLiteralExpression: return(LogicalAndExpression(condition, expression1)); default: throw new InvalidOperationException(); } } } BinaryExpressionSyntax LogicalAndExpression(ExpressionSyntax left, ExpressionSyntax right) { return(CSharpFactory.LogicalAndExpression( left.Parenthesize(), right.Parenthesize())); } BinaryExpressionSyntax LogicalOrExpression(ExpressionSyntax left, ExpressionSyntax right) { return(CSharpFactory.LogicalOrExpression( left.Parenthesize(), right.Parenthesize())); } }
private static ExpressionSyntax LogicalOrExpression(ExpressionSyntax left, ExpressionSyntax right) { return(CSharpFactory.LogicalOrExpression( left.Parenthesize(), right.Parenthesize())); }
private static ExpressionSyntax LogicalOrExpression(ExpressionSyntax left, ExpressionSyntax right) { return(CSharpFactory.LogicalOrExpression( left.Parenthesize(moveTrivia: true).WithSimplifierAnnotation(), right.Parenthesize(moveTrivia: true).WithSimplifierAnnotation())); }