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