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)));
                }
            }
        }