/// <summary> /// Called on compilation start. /// </summary> /// <param name="context">The context.</param> private void OnCompilationStart(CompilationStartAnalysisContext context) { if (WellKnownTypes.Enumerable(context.Compilation) is INamedTypeSymbol enumerableType) { var operationActionsContext = new OperationActionsContext( context.Compilation, enumerableType); context.RegisterOperationAction( CreateOperationActionsHandler(operationActionsContext).AnalyzeInvocationOperation, OperationKind.Invocation); } }
/// <summary> /// Called on compilation start. /// </summary> /// <param name="context">The context.</param> private static void OnCompilationStart(CompilationStartAnalysisContext context) { var enumerableType = WellKnownTypes.Enumerable(context.Compilation); if (enumerableType == null) { return; } context.RegisterOperationAction( operationAnalysisContext => AnalyzeInvocationExpression((IInvocationOperation)operationAnalysisContext.Operation, enumerableType, operationAnalysisContext.ReportDiagnostic), OperationKind.Invocation); context.RegisterOperationAction( operationAnalysisContext => AnalyzeBinaryExpression((IBinaryOperation)operationAnalysisContext.Operation, enumerableType, operationAnalysisContext.ReportDiagnostic), OperationKind.BinaryOperator); }
/// <summary> /// Called on compilation start. /// </summary> /// <param name="context">The context.</param> private static void OnCompilationStart(CompilationStartAnalysisContext context) { if (WellKnownTypes.Enumerable(context.Compilation) is INamedTypeSymbol enumerableType) { var operationActionsHandler = new OperationActionsHandler( targetType: enumerableType, targetMethodNames: s_syncMethodNames, isAsync: false, rule: s_syncRule); context.RegisterOperationAction( operationActionsHandler.AnalyzeInvocationOperation, OperationKind.Invocation); context.RegisterOperationAction( operationActionsHandler.AnalyzeBinaryOperation, OperationKind.BinaryOperator); } if (WellKnownTypes.Queryable(context.Compilation) is INamedTypeSymbol queryableType) { var operationActionsHandler = new OperationActionsHandler( targetType: queryableType, targetMethodNames: s_syncMethodNames, isAsync: false, rule: s_syncRule); context.RegisterOperationAction( operationActionsHandler.AnalyzeInvocationOperation, OperationKind.Invocation); context.RegisterOperationAction( operationActionsHandler.AnalyzeBinaryOperation, OperationKind.BinaryOperator); } if (context.Compilation.GetTypeByMetadataName("Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions") is INamedTypeSymbol entityFrameworkQueryableExtensionsType) { var operationActionsHandler = new OperationActionsHandler( targetType: entityFrameworkQueryableExtensionsType, targetMethodNames: s_asyncMethodNames, isAsync: true, rule: s_asyncRule); context.RegisterOperationAction( operationActionsHandler.AnalyzeInvocationOperation, OperationKind.Invocation); context.RegisterOperationAction( operationActionsHandler.AnalyzeBinaryOperation, OperationKind.BinaryOperator); } if (context.Compilation.GetTypeByMetadataName("System.Data.Entity.QueryableExtensions") is INamedTypeSymbol queryableExtensionsType) { var operationActionsHandler = new OperationActionsHandler( targetType: queryableExtensionsType, targetMethodNames: s_asyncMethodNames, isAsync: true, rule: s_asyncRule); context.RegisterOperationAction( operationActionsHandler.AnalyzeInvocationOperation, OperationKind.Invocation); context.RegisterOperationAction( operationActionsHandler.AnalyzeBinaryOperation, OperationKind.BinaryOperator); } }