コード例 #1
0
        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();
            }
        }