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


C# AnalysisContext.RegisterOperationBlockStartAction方法代码示例

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


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

示例1: Initialize

 public override void Initialize(AnalysisContext analysisContext)
 {
     analysisContext.RegisterSymbolAction(AnalyzeField, SymbolKind.Field);
     analysisContext.RegisterSymbolAction(AnalyzeProperty, SymbolKind.Property);
     analysisContext.RegisterSymbolAction(AnalyzeMethod, SymbolKind.Method);
     analysisContext.RegisterOperationBlockStartAction(blockContext =>
     {
         blockContext.RegisterOperationAction(oc => AnalyzeObjectCreation(oc, blockContext.OwningSymbol), OperationKind.ArrayCreationExpression);
     });
 }
开发者ID:Anniepoh,项目名称:roslyn-analyzers,代码行数:10,代码来源:PreferJaggedArraysOverMultidimensional.cs

示例2: Initialize

        public override void Initialize(AnalysisContext analysisContext)
        {
            analysisContext.EnableConcurrentExecution();
            analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);

            analysisContext.RegisterOperationBlockStartAction(context =>
            {
                var methodSymbol = context.OwningSymbol as IMethodSymbol;

                if (methodSymbol == null ||
                    methodSymbol.ReturnsVoid ||
                    methodSymbol.ReturnType.Kind == SymbolKind.ArrayType ||
                    methodSymbol.Parameters.Length > 0 ||
                    !(methodSymbol.DeclaredAccessibility == Accessibility.Public || methodSymbol.DeclaredAccessibility == Accessibility.Protected) ||
                    methodSymbol.IsAccessorMethod() ||
                    !IsPropertyLikeName(methodSymbol.Name))
                {
                    return;
                }

                // A few additional checks to reduce the noise for this diagnostic:
                // Ensure that the method is non-generic, non-virtual/override, has no overloads and doesn't have special names: 'GetHashCode' or 'GetEnumerator'.
                // Also avoid generating this diagnostic if the method body has any invocation expressions.
                if (methodSymbol.IsGenericMethod ||
                    methodSymbol.IsVirtual ||
                    methodSymbol.IsOverride ||
                    methodSymbol.ContainingType.GetMembers(methodSymbol.Name).Length > 1 ||
                    methodSymbol.Name == GetHashCodeName ||
                    methodSymbol.Name == GetEnumeratorName)
                {
                    return;
                }

                bool hasInvocations = false;
                context.RegisterOperationAction(operationContext =>
                {
                    hasInvocations = true;
                }, OperationKind.InvocationExpression);

                context.RegisterOperationBlockEndAction(endContext =>
                {
                    if (!hasInvocations)
                    {
                        endContext.ReportDiagnostic(endContext.OwningSymbol.CreateDiagnostic(Rule));
                    }
                });
            });
        }
开发者ID:bkoelman,项目名称:roslyn-analyzers,代码行数:48,代码来源:UsePropertiesWhereAppropriate.cs

示例3: Initialize

        public override void Initialize(AnalysisContext analysisContext)
        {
            analysisContext.RegisterOperationBlockStartAction(osContext =>
            {
                var method = osContext.OwningSymbol as IMethodSymbol;
                if (method == null)
                {
                    return;
                }

                osContext.RegisterOperationAction(opContext =>
                {
                    IOperation expression = ((IExpressionStatement)opContext.Operation).Expression;
                    string messageFormat = null;
                    string targetMethodName = null;
                    switch (expression.Kind)
                    {
                        case OperationKind.ObjectCreationExpression:
                            IMethodSymbol ctor = ((IObjectCreationExpression)expression).Constructor;
                            if (ctor != null)
                            {
                                messageFormat = MicrosoftMaintainabilityAnalyzersResources.DoNotIgnoreMethodResultsMessageObjectCreation;
                                targetMethodName = ctor.ContainingType.Name;
                            }
                            break;

                        case OperationKind.InvocationExpression:
                            IInvocationExpression invocationExpression = ((IInvocationExpression)expression);
                            IMethodSymbol targetMethod = invocationExpression.TargetMethod;
                            if (targetMethod == null)
                            {
                                break;
                            }

                            if (IsStringCreatingMethod(targetMethod))
                            {
                                messageFormat = MicrosoftMaintainabilityAnalyzersResources.DoNotIgnoreMethodResultsMessageStringCreation;
                            }
                            else if (IsTryParseMethod(targetMethod))
                            {
                                messageFormat = MicrosoftMaintainabilityAnalyzersResources.DoNotIgnoreMethodResultsMessageTryParse;
                            }
                            else if (IsHResultOrErrorCodeReturningMethod(targetMethod))
                            {
                                messageFormat = MicrosoftMaintainabilityAnalyzersResources.DoNotIgnoreMethodResultsMessageHResultOrErrorCode;
                            }

                            targetMethodName = targetMethod.Name;
                            break;
                    }

                    if (messageFormat != null)
                    {
                        string message = string.Format(messageFormat, method.Name, targetMethodName);
                        Diagnostic diagnostic = Diagnostic.Create(Rule, expression.Syntax.GetLocation(), message);
                        opContext.ReportDiagnostic(diagnostic);
                    }
                }, OperationKind.ExpressionStatement);
            });
        }
开发者ID:Anniepoh,项目名称:roslyn-analyzers,代码行数:60,代码来源:DoNotIgnoreMethodResults.cs

示例4: Initialize

 public sealed override void Initialize(AnalysisContext context)
 {
     context.RegisterOperationBlockStartAction(
         (operationBlockContext) =>
         {
             if (operationBlockContext.Compilation.Language != "Stumble")
             {
                 operationBlockContext.RegisterOperationAction(
                      (operationContext) =>
                      {
                          if (operationContext.ContainingSymbol.Name.StartsWith("Funky") && operationContext.Compilation.Language != "Mumble")
                          {
                              operationContext.ReportDiagnostic(Diagnostic.Create(ExpressionDescriptor, operationContext.Operation.Syntax.GetLocation()));
                          }
                      },
                      OperationKind.LocalReferenceExpression,
                      OperationKind.LiteralExpression);
             }
         });
 }
开发者ID:rgani,项目名称:roslyn,代码行数:20,代码来源:OperationTestAnalyzer.cs

示例5: Initialize

        public sealed override void Initialize(AnalysisContext context)
        {
            context.RegisterOperationBlockStartAction(
                (operationBlockContext) =>
                {
                    IMethodSymbol containingMethod = operationBlockContext.OwningSymbol as IMethodSymbol;

                    if (containingMethod != null)
                    {
                        HashSet<ILocalSymbol> mightBecomeConstLocals = new HashSet<ILocalSymbol>();
                        HashSet<ILocalSymbol> assignedToLocals = new HashSet<ILocalSymbol>();

                        operationBlockContext.RegisterOperationAction(
                           (operationContext) =>
                           {
                               IAssignmentExpression assignment = (IAssignmentExpression)operationContext.Operation;
                               AssignTo(assignment.Target, assignedToLocals, mightBecomeConstLocals);
                           },
                           OperationKind.AssignmentExpression,
                           OperationKind.CompoundAssignmentExpression,
                           OperationKind.IncrementExpression);

                        operationBlockContext.RegisterOperationAction(
                            (operationContext) =>
                            {
                                IInvocationExpression invocation = (IInvocationExpression)operationContext.Operation;
                                foreach (IArgument argument in invocation.ArgumentsInParameterOrder)
                                {
                                    if (argument.Parameter.RefKind == RefKind.Out || argument.Parameter.RefKind == RefKind.Ref)
                                    {
                                        AssignTo(argument.Value, assignedToLocals, mightBecomeConstLocals);
                                    }
                                }
                            },
                            OperationKind.InvocationExpression);

                        operationBlockContext.RegisterOperationAction(
                            (operationContext) =>
                            {
                                IVariableDeclarationStatement declaration = (IVariableDeclarationStatement)operationContext.Operation;
                                foreach (IVariableDeclaration variable in declaration.Variables)
                                {
                                    ILocalSymbol local = variable.Variable;
                                    if (!local.IsConst && !assignedToLocals.Contains(local))
                                    {
                                        var localType = local.Type;
                                        if ((!localType.IsReferenceType || localType.SpecialType == SpecialType.System_String) && localType.SpecialType != SpecialType.None)
                                        {
                                            if (variable.InitialValue != null && variable.InitialValue.ConstantValue.HasValue)
                                            {
                                                mightBecomeConstLocals.Add(local);
                                            }
                                        }
                                    }
                                }
                            },
                            OperationKind.VariableDeclarationStatement);

                        operationBlockContext.RegisterOperationBlockEndAction(
                            (operationBlockEndContext) =>
                            {
                                foreach (ILocalSymbol couldBeConstLocal in mightBecomeConstLocals)
                                {
                                    Report(operationBlockEndContext, couldBeConstLocal, LocalCouldBeConstDescriptor);
                                }
                            });
                    }
                });
        }
开发者ID:CAPCHIK,项目名称:roslyn,代码行数:69,代码来源:LocalCouldBeConstAnalyzer.cs

示例6: Initialize

        public override void Initialize(AnalysisContext analysisContext)
        {
            analysisContext.EnableConcurrentExecution();
            analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);

            analysisContext.RegisterOperationBlockStartAction(osContext =>
            {
                var method = osContext.OwningSymbol as IMethodSymbol;
                if (method == null)
                {
                    return;
                }

                osContext.RegisterOperationAction(opContext =>
                {
                    IOperation expression = ((IExpressionStatement)opContext.Operation).Expression;
                    DiagnosticDescriptor rule = null;
                    string targetMethodName = null;
                    switch (expression.Kind)
                    {
                        case OperationKind.ObjectCreationExpression:
                            IMethodSymbol ctor = ((IObjectCreationExpression)expression).Constructor;
                            if (ctor != null)
                            {
                                rule = ObjectCreationRule;
                                targetMethodName = ctor.ContainingType.Name;
                            }
                            break;

                        case OperationKind.InvocationExpression:
                            IInvocationExpression invocationExpression = ((IInvocationExpression)expression);
                            IMethodSymbol targetMethod = invocationExpression.TargetMethod;
                            if (targetMethod == null)
                            {
                                break;
                            }

                            if (IsStringCreatingMethod(targetMethod))
                            {
                                rule = StringCreationRule;
                            }
                            else if (IsTryParseMethod(targetMethod))
                            {
                                rule = TryParseRule;
                            }
                            else if (IsHResultOrErrorCodeReturningMethod(targetMethod))
                            {
                                rule = HResultOrErrorCodeRule;
                            }

                            targetMethodName = targetMethod.Name;
                            break;
                    }

                    if (rule != null)
                    {
                        Diagnostic diagnostic = Diagnostic.Create(rule, expression.Syntax.GetLocation(), method.Name, targetMethodName);
                        opContext.ReportDiagnostic(diagnostic);
                    }
                }, OperationKind.ExpressionStatement);
            });
        }
开发者ID:bkoelman,项目名称:roslyn-analyzers,代码行数:62,代码来源:DoNotIgnoreMethodResults.cs


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