private static bool IsOrderByOrOrderByDescending(InvocationExpressionSyntax invocationExpression, SemanticModel semanticModel, CancellationToken cancellationToken) { IMethodSymbol methodSymbol = semanticModel.GetExtensionMethodInfo(invocationExpression, cancellationToken).Symbol; return(methodSymbol?.IsName("OrderBy", "OrderByDescending") == true && SymbolUtility.IsLinqExtensionOfIEnumerableOfT(methodSymbol, semanticModel)); }
public static void Analyze( SyntaxNodeAnalysisContext context, SimpleMemberInvocationExpressionInfo invocationInfo) { SimpleMemberInvocationExpressionInfo invocationInfo2 = SyntaxInfo.SimpleMemberInvocationExpressionInfo(invocationInfo.Expression); if (!invocationInfo2.Success) { return; } if (invocationInfo2.Arguments.Count != 1) { return; } SemanticModel semanticModel = context.SemanticModel; CancellationToken cancellationToken = context.CancellationToken; if (!string.Equals(invocationInfo2.NameText, "Where", StringComparison.Ordinal)) { return; } IMethodSymbol methodSymbol2 = semanticModel.GetReducedExtensionMethodInfo(invocationInfo2.InvocationExpression, cancellationToken).Symbol; if (methodSymbol2 == null) { return; } if (!SymbolUtility.IsLinqExtensionOfIEnumerableOfT(methodSymbol2, semanticModel, "Where", parameterCount: 2)) { return; } if (SymbolUtility.IsPredicateFunc( methodSymbol2.Parameters[1].Type, methodSymbol2.TypeArguments[0], semanticModel)) { IMethodSymbol methodSymbol = semanticModel.GetReducedExtensionMethodInfo(invocationInfo.InvocationExpression, cancellationToken).Symbol; if (methodSymbol != null && SymbolUtility.IsLinqWhere(methodSymbol, semanticModel)) { Analyze(context, invocationInfo, invocationInfo2); } } else if (SymbolUtility.IsPredicateFunc( methodSymbol2.Parameters[1].Type, methodSymbol2.TypeArguments[0], semanticModel.Compilation.GetSpecialType(SpecialType.System_Int32), semanticModel)) { IMethodSymbol methodSymbol = semanticModel.GetReducedExtensionMethodInfo(invocationInfo.InvocationExpression, cancellationToken).Symbol; if (methodSymbol != null && SymbolUtility.IsLinqWhereWithIndex(methodSymbol, semanticModel)) { Analyze(context, invocationInfo, invocationInfo2); } } }