Task IOpenInIDERequestHandler.ShowHotspotAsync(IShowHotspotRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(ShowHotspotAsync(request));
        }
        private async Task ShowHotspotAsync(IShowHotspotRequest request)
        {
            logger.WriteLine(OpenInIDEResources.ApiHandler_ProcessingRequest, request.ServerUrl, request.ProjectKey,
                             request.OrganizationKey ?? OpenInIDEResources.ApiHandler_NullOrganization, request.HotspotKey);

            // Always show the Hotspots tool window. If we can't successfully process the
            // request we'll show a gold bar in the window
            telemetryManager.ShowHotspotRequested();
            ideWindowService.BringToFront();
            toolWindowService.Show(HotspotsToolWindow.ToolWindowId);
            await failureInfoBar.ClearAsync();

            if (!ideStateValidator.CanHandleOpenInIDERequest(request.ServerUrl, request.ProjectKey, request.OrganizationKey))
            {
                // We're assuming the validator will have output an explanantion of why the IDE
                // isn't in the correct state
                await failureInfoBar.ShowAsync(HotspotsToolWindow.ToolWindowId);

                return;
            }

            var hotspot = await TryGetHotspotData(request.HotspotKey);

            if (hotspot == null)
            {
                await failureInfoBar.ShowAsync(HotspotsToolWindow.ToolWindowId);

                return;
            }

            var hotspotViz = TryCreateIssueViz(hotspot);

            if (hotspotViz == null)
            {
                await failureInfoBar.ShowAsync(HotspotsToolWindow.ToolWindowId);

                return;
            }

            if (!navigator.TryNavigate(hotspotViz))
            {
                logger.WriteLine(OpenInIDEResources.ApiHandler_FailedToNavigateToHotspot, hotspotViz.FilePath, hotspotViz.StartLine);
            }

            // Add to store and select regardless of whether navigation succeeded
            var addedHotspot = hotspotsStore.GetOrAdd(hotspotViz);

            issueSelectionService.SelectedIssue = addedHotspot;
        }
 private void SetServerResponse(IShowHotspotRequest expected, SonarQubeHotspot response) =>
 serverMock.Setup(x => x.GetHotspotAsync(expected.HotspotKey, It.IsAny <CancellationToken>()))
 .Returns(Task <SonarQubeHotspot> .FromResult(response));
 private void SetServerToThrow(IShowHotspotRequest expected, Exception ex) =>
 serverMock.Setup(x => x.GetHotspotAsync(expected.HotspotKey, It.IsAny <CancellationToken>()))
 .Throws(ex);
 private void InitializeStateValidator(IShowHotspotRequest expected, bool canHandleRequest) =>
 stateValidatorMock.Setup(x => x.CanHandleOpenInIDERequest(expected.ServerUrl, expected.ProjectKey, expected.OrganizationKey))
 .Returns(canHandleRequest);