本文整理汇总了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);
});
}
示例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));
}
});
});
}
示例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);
});
}
示例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);
}
});
}
示例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);
}
});
}
});
}
示例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);
});
}