Пример #1
0
        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);
        }