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