private static void RegisterCompilationStart([NotNull] CompilationStartAnalysisContext startContext) { var taskInfo = new TaskTypeInfo(startContext.Compilation); if (!taskInfo.ContinueWithMethodGroup.IsEmpty) { startContext.RegisterOperationAction(context => AnalyzeInvocationAction(context, taskInfo), OperationKind.Invocation); } }
private static void AnalyzeInvocation(OperationAnalysisContext context, TaskTypeInfo taskInfo) { var invocation = (IInvocationOperation)context.Operation; if (invocation.TargetMethod.ContainingType.IsEqualTo(taskInfo.TaskType) || invocation.TargetMethod.ContainingType.ConstructedFrom.IsEqualTo(taskInfo.GenericTaskType)) { IMethodSymbol openTypedTargetMethod = invocation.TargetMethod.OriginalDefinition; if (taskInfo.ContinueWithMethodGroup.Any(method => method.IsEqualTo(openTypedTargetMethod))) { Location location = GetInvocationLocation(context); context.ReportDiagnostic(Diagnostic.Create(Rule, location, context.ContainingSymbol.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat))); } } }