public static void Analyze(
            SyntaxNodeAnalysisContext context,
            InvocationExpressionSyntax invocation,
            MemberAccessExpressionSyntax memberAccess)
        {
            if (memberAccess.Expression?.IsKind(SyntaxKind.InvocationExpression) == true)
            {
                var invocation2 = (InvocationExpressionSyntax)memberAccess.Expression;

                if (invocation2.ArgumentList?.Arguments.Count == 1 &&
                    invocation2.Expression?.IsKind(SyntaxKind.SimpleMemberAccessExpression) == true)
                {
                    var memberAccess2 = (MemberAccessExpressionSyntax)invocation2.Expression;

                    SemanticModel     semanticModel     = context.SemanticModel;
                    CancellationToken cancellationToken = context.CancellationToken;

                    if (string.Equals(memberAccess2.Name?.Identifier.ValueText, "Where", StringComparison.Ordinal))
                    {
                        ExtensionMethodInfo info2 = semanticModel.GetExtensionMethodInfo(invocation2, ExtensionMethodKind.Reduced, cancellationToken);

                        if (info2.IsLinqExtensionOfIEnumerableOfT("Where", parameterCount: 2))
                        {
                            if (SymbolUtility.IsPredicateFunc(
                                    info2.Symbol.Parameters[1].Type,
                                    info2.Symbol.TypeArguments[0],
                                    semanticModel))
                            {
                                if (semanticModel
                                    .GetExtensionMethodInfo(invocation, ExtensionMethodKind.Reduced, cancellationToken)
                                    .IsLinqWhere())
                                {
                                    Analyze(context, invocation, invocation2, memberAccess, memberAccess2);
                                }
                            }
                            else if (SymbolUtility.IsPredicateFunc(
                                         info2.Symbol.Parameters[1].Type,
                                         info2.Symbol.TypeArguments[0],
                                         semanticModel.Compilation.GetSpecialType(SpecialType.System_Int32),
                                         semanticModel))
                            {
                                if (semanticModel
                                    .GetExtensionMethodInfo(invocation, ExtensionMethodKind.Reduced, cancellationToken)
                                    .IsLinqWhereWithIndex())
                                {
                                    Analyze(context, invocation, invocation2, memberAccess, memberAccess2);
                                }
                            }
                        }
                    }
                }
            }
        }