Пример #1
0
        public async Task SynchronizeWithServer()
        {
            var bindingConfiguration = configurationProvider.GetConfiguration();

            if (bindingConfiguration.Mode == SonarLintMode.Standalone)
            {
                logger.WriteLine(TaintResources.Synchronizer_NotInConnectedMode);
                ClearStore();
                UpdateTaintIssuesUIContext(false);
                return;
            }

            if (!sonarQubeService.IsConnected)
            {
                logger.WriteLine(TaintResources.Synchronizer_ServerNotConnected);
                UpdateTaintIssuesUIContext(false);
                return;
            }

            try
            {
                var projectKey           = bindingConfiguration.Project.ProjectKey;
                var taintVulnerabilities = await sonarQubeService.GetTaintVulnerabilitiesAsync(projectKey, CancellationToken.None);

                logger.WriteLine(TaintResources.Synchronizer_NumberOfServerIssues, taintVulnerabilities.Count);

                var hasTaintIssues = taintVulnerabilities.Count > 0;

                if (!hasTaintIssues)
                {
                    ClearStore();
                    UpdateTaintIssuesUIContext(false);
                }
                else
                {
                    var analysisInformation = await GetAnalysisInformation(projectKey);

                    var taintIssueVizs = taintVulnerabilities.Select(converter.Convert).ToArray();
                    taintStore.Set(taintIssueVizs, analysisInformation);

                    UpdateTaintIssuesUIContext(true);

                    // We need the tool window content to exist so the issues are filtered and the
                    // tool window caption is updated. See the "EnsureToolWindowExists" method comment
                    // for more information.
                    toolWindowService.EnsureToolWindowExists(TaintToolWindow.ToolWindowId);
                }
            }
            catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex))
            {
                logger.WriteLine(TaintResources.Synchronizer_Failure, ex);
                ClearStore();
            }
        }