async Task StartTooltipRequestAsync(IQuickInfoSession session, IList <object> quickInfoContent, ITrackingSpan applicableToSpan, SnapshotPoint?triggerPoint, string filePath) { // If this position didn't have a classification, then it's uninteresting, and won't have tooltips. if (applicableToSpan == null) { return; } // Set the position so we know what request is in process. inProgressPosition = triggerPoint.Value.Position; inProgressTooltipData = null; inProgressApplicableToSpan = null; // Put dummy content in tooltip while the request in in-flight. quickInfoContent.Add("Loading..."); // Fire off a request to the service to get the data. DartAnalysisService analysisService = await provider.DartAnalysisServiceFactory.GetAnalysisServiceAsync().ConfigureAwait(false); HoverInformation[] hovers = await analysisService.GetHover(filePath, triggerPoint.Value.Position); // Build the tooltip info if the response was valid. var tooltipData = BuildTooltip(hovers); if (!string.IsNullOrWhiteSpace(tooltipData)) { // Stash the data for the next call, and tell VS to reclaculate now that we have the good info. inProgressTooltipData = tooltipData; inProgressApplicableToSpan = buffer.CurrentSnapshot.CreateTrackingSpan(hovers[0].Offset, hovers[0].Length, SpanTrackingMode.EdgeInclusive); session.Recalculate(); } else { // Otherwise, no valid response, means no tooltip. session.Dismiss(); } }