/// <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);
            }
        }
Esempio n. 2
0
        /// <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);
            }
        }