public SaveToItPostProcessingStage(
            [NotNull] IBranchNameBuilder branchNameBuilder,
            [NotNull] IIssueNameBuilder issueNameBuilder,
            [NotNull] ITemplateProvider templateProvider,
            [NotNull] ITelemetryScopeProvider telemetryScopeProvider)
        {
            if (branchNameBuilder == null)
            {
                throw new ArgumentNullException(nameof(branchNameBuilder));
            }
            if (issueNameBuilder == null)
            {
                throw new ArgumentNullException(nameof(issueNameBuilder));
            }
            if (templateProvider == null)
            {
                throw new ArgumentNullException(nameof(templateProvider));
            }
            if (telemetryScopeProvider == null)
            {
                throw new ArgumentNullException(nameof(telemetryScopeProvider));
            }

            _branchNameBuilder      = branchNameBuilder;
            _issueNameBuilder       = issueNameBuilder;
            _templateProvider       = templateProvider;
            _telemetryScopeProvider = telemetryScopeProvider;
        }
        public FilterByBranchPostProcessingStage([NotNull] IBranchNameBuilder branchNameBuilder)
        {
            if (branchNameBuilder == null)
            {
                throw new ArgumentNullException(nameof(branchNameBuilder));
            }

            _branchNameBuilder = branchNameBuilder;
        }
        public SaveToVcsPostProcessingStage(
            [NotNull] IIssueAnnotationFormatter issueAnnotationFormatter,
            [NotNull] IIssueAnnotationSerializer issueAnnotationSerializer,
            [NotNull] IBranchNameBuilder branchNameBuilder,
            [NotNull] ILog log,
            [NotNull] IVulnerabilityShortTypeResolver vulnerabilityShortTypeResolver,
            [NotNull] ITemplateProvider templateProvider,
            [NotNull] ITelemetryScopeProvider telemetryScopeProvider)
        {
            if (issueAnnotationFormatter == null)
            {
                throw new ArgumentNullException(nameof(issueAnnotationFormatter));
            }
            if (issueAnnotationSerializer == null)
            {
                throw new ArgumentNullException(nameof(issueAnnotationSerializer));
            }
            if (branchNameBuilder == null)
            {
                throw new ArgumentNullException(nameof(branchNameBuilder));
            }
            if (log == null)
            {
                throw new ArgumentNullException(nameof(log));
            }
            if (vulnerabilityShortTypeResolver == null)
            {
                throw new ArgumentNullException(nameof(vulnerabilityShortTypeResolver));
            }
            if (templateProvider == null)
            {
                throw new ArgumentNullException(nameof(templateProvider));
            }
            if (telemetryScopeProvider == null)
            {
                throw new ArgumentNullException(nameof(telemetryScopeProvider));
            }

            _issueAnnotationFormatter  = issueAnnotationFormatter;
            _issueAnnotationSerializer = issueAnnotationSerializer;
            _branchNameBuilder         = branchNameBuilder;
            _log = log;
            _vulnerabilityShortTypeResolver = vulnerabilityShortTypeResolver;
            _templateProvider       = templateProvider;
            _telemetryScopeProvider = telemetryScopeProvider;
        }
        public VcsSynchronizer(
            [NotNull] IBranchNameBuilder branchNameBuilder,
            [NotNull] IEventProvider eventProvider,
            [NotNull] IProjectRepository projectRepository,
            [NotNull] IPluginFactory pluginFactory,
            [NotNull] ITimeService timeService)
        {
            if (branchNameBuilder == null)
            {
                throw new ArgumentNullException(nameof(branchNameBuilder));
            }

            if (eventProvider == null)
            {
                throw new ArgumentNullException(nameof(eventProvider));
            }

            if (projectRepository == null)
            {
                throw new ArgumentNullException(nameof(projectRepository));
            }

            if (pluginFactory == null)
            {
                throw new ArgumentNullException(nameof(pluginFactory));
            }

            if (timeService == null)
            {
                throw new ArgumentNullException(nameof(timeService));
            }

            _projectRepository = projectRepository;
            _pluginFactory     = pluginFactory;
            _branchNameBuilder = branchNameBuilder;
            _eventProvider     = eventProvider;
            _timeService       = timeService;
        }