private static SyntaxNode GetNegationOfLogicalNotExpression( SyntaxNode expression, ISyntaxFacts syntaxFacts) { var operatorToken = syntaxFacts.GetOperatorTokenOfPrefixUnaryExpression(expression); var operand = syntaxFacts.GetOperandOfPrefixUnaryExpression(expression); return(operand.WithPrependedLeadingTrivia(operatorToken.LeadingTrivia) .WithAdditionalAnnotations(Simplifier.Annotation)); }
private bool TryAnalyzeCondition( SyntaxNodeAnalysisContext context, ISyntaxFacts syntaxFacts, IMethodSymbol?referenceEqualsMethod, TExpressionSyntax condition, [NotNullWhen(true)] out TExpressionSyntax?conditionPartToCheck, out bool isEquals) { condition = (TExpressionSyntax)syntaxFacts.WalkDownParentheses(condition); var conditionIsNegated = false; if (syntaxFacts.IsLogicalNotExpression(condition)) { conditionIsNegated = true; condition = (TExpressionSyntax)syntaxFacts.WalkDownParentheses( syntaxFacts.GetOperandOfPrefixUnaryExpression(condition)); } var result = condition switch { TBinaryExpressionSyntax binaryExpression => TryAnalyzeBinaryExpressionCondition( syntaxFacts, binaryExpression, out conditionPartToCheck, out isEquals), TInvocationExpressionSyntax invocation => TryAnalyzeInvocationCondition( context, syntaxFacts, referenceEqualsMethod, invocation, out conditionPartToCheck, out isEquals), _ => TryAnalyzePatternCondition(syntaxFacts, condition, out conditionPartToCheck, out isEquals), }; if (conditionIsNegated) { isEquals = !isEquals; } return(result); }