当前位置: 首页>>代码示例>>C#>>正文


C# CompilationStartAnalysisContext.RegisterOperationAction方法代码示例

本文整理汇总了C#中CompilationStartAnalysisContext.RegisterOperationAction方法的典型用法代码示例。如果您正苦于以下问题:C# CompilationStartAnalysisContext.RegisterOperationAction方法的具体用法?C# CompilationStartAnalysisContext.RegisterOperationAction怎么用?C# CompilationStartAnalysisContext.RegisterOperationAction使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CompilationStartAnalysisContext的用法示例。


在下文中一共展示了CompilationStartAnalysisContext.RegisterOperationAction方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RegisterOperationAction

        /// <summary>Called once at compilation start to register actions in the compilation context.</summary>
        /// <param name="context">The analysis context.</param>
        internal void RegisterOperationAction(CompilationStartAnalysisContext context)
        {
            context.RegisterOperationAction(
                (operationContext) =>
                    {
                        IArrayCreationExpression arrayCreation = (IArrayCreationExpression)operationContext.Operation;

                        // ToDo: Need to suppress analysis of array creation expressions within attribute applications.

                        // Detect array creation expression that have rank 1 and size 0. Such expressions
                        // can be replaced with Array.Empty<T>(), provided that the element type can be a generic type argument.

                        if (arrayCreation.DimensionSizes.Length == 1
                            //// Pointer types can't be generic type arguments.
                            && arrayCreation.ElementType.TypeKind != TypeKind.Pointer)
                        {
                            Optional<object> arrayLength = arrayCreation.DimensionSizes[0].ConstantValue;
                            if (arrayLength.HasValue &&
                                arrayLength.Value is int &&
                                (int)arrayLength.Value == 0)
                            {
                                Report(operationContext, arrayCreation.Syntax);
                            }
                        }
                    },
                OperationKind.ArrayCreationExpression);
        }
开发者ID:CAPCHIK,项目名称:roslyn,代码行数:29,代码来源:EmptyArrayAnalyzer.cs

示例2: OnCompilationStart

        private static void OnCompilationStart(CompilationStartAnalysisContext context)
        {
            var listType = context.Compilation.GetTypeByMetadataName(IListMetadataName);
            var readonlyListType = context.Compilation.GetTypeByMetadataName(IReadOnlyListMetadataName);
            var enumerableType = context.Compilation.GetTypeByMetadataName(EnumerableMetadataName);
            if (readonlyListType == null || enumerableType == null || listType == null)
            {
                return;
            }

            context.RegisterOperationAction(operationContext =>
            {
                var invocation = (IInvocationExpression)operationContext.Operation;
                if (!IsPossibleLinqInvocation(invocation))
                {
                    return;
                }

                var methodSymbol = invocation.TargetMethod.ReducedFrom ?? invocation.TargetMethod;
                var targetType = invocation.GetReceiverType(operationContext.Compilation, beforeConversion: true, cancellationToken: operationContext.CancellationToken);
                if (methodSymbol == null || targetType == null)
                {
                    return;
                }

                if (!IsSingleParameterLinqMethod(methodSymbol, enumerableType))
                {
                    return;
                }

                if (!IsTypeWithInefficientLinqMethods(targetType, readonlyListType, listType))
                {
                    return;
                }

                operationContext.ReportDiagnostic(Diagnostic.Create(Rule, invocation.Syntax.GetLocation()));
            }, OperationKind.InvocationExpression);
        }
开发者ID:bkoelman,项目名称:roslyn-analyzers,代码行数:38,代码来源:DoNotUseEnumerableMethodsOnIndexableCollectionsInsteadUseTheCollectionDirectly.cs


注:本文中的CompilationStartAnalysisContext.RegisterOperationAction方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。