public IQuickInfoSource TryCreateQuickInfoSource(ITextBuffer textBuffer)
        {
            Contract.Assume(textBuffer != null);

            if (VSServiceProvider.Current == null || VSServiceProvider.Current.ExtensionHasFailed)
            {
                //If the VSServiceProvider is not initialize, we can't do anything.
                return(null);
            }

            return(VSServiceProvider.Current.Logger.PublicEntry <IQuickInfoSource>(() => {
                if (VSServiceProvider.Current.VSOptionsPage != null && !VSServiceProvider.Current.VSOptionsPage.QuickInfo)
                {
                    return null;
                }

                ITextViewTracker textViewTracker;
                if (TextViewTrackerAccessor.TryGetTextViewTracker(textBuffer, out textViewTracker))
                {
                    return VSServiceProvider.Current.GetVersionedServicesFactory().CreateQuickInfoSource(textBuffer, textViewTracker);
                }
                else
                {
                    return null;
                }
            }, "TryCreateQuickInfoSession"));
        }
Beispiel #2
0
        /// <summary>
        /// When a new text view is created, hook up the various "trackers" (<see cref="TextViewTracker"/>, <see cref="InheritanceTracker"/>, <see cref="QuickInfoTracker"/>).
        /// </summary>
        /// <param name="textView"></param>
        public void TextViewCreated(IWpfTextView textView)
        {
            Contract.Assume(textView != null);

            if (VSServiceProvider.Current == null || VSServiceProvider.Current.ExtensionHasFailed)
            {
                //If the VSServiceProvider is not initialize, we can't do anything.
                return;
            }

            VSServiceProvider.Current.Logger.PublicEntry(() => {
                #region Check if textView is valid
                var fileName = textView.GetFileName();
                if (fileName == null)
                {
                    VSServiceProvider.Current.Logger.WriteToLog("Couldn't retrieve file name for current view.");
                    return;
                }
                if (!File.Exists(fileName))
                {
                    VSServiceProvider.Current.Logger.WriteToLog("Couldn't find file for current view.");
                    return;
                }
                #endregion
                VSServiceProvider.Current.Logger.WriteToLog("Text view found: " + fileName);
                #region Check if textView is a CSharp file
                var IsCSharpFile = Path.GetExtension(fileName) == ".cs";
                #endregion
                #region Get text view properties
                var vsTextProperties = VSTextPropertiesProvider.GetVSTextProperties(textView);
                #endregion
                var vsProject = VSServiceProvider.Current.GetProjectForFile(fileName);//May be null!
                ProjectTracker projectTracker = null;
                if (vsProject != null)
                {
                    projectTracker = ProjectTracker.GetOrCreateProjectTracker(vsProject);
                    if (projectTracker != null)
                    {
                        textView.Properties.AddProperty(typeof(ProjectTracker), projectTracker);
                    }
                    else
                    {
                        VSServiceProvider.Current.Logger.WriteToLog("Warning: Couldn't create a 'ProjectTracker', we won't be able to show inheritance contract information for this text view. Close and reopen the text view to try again!");
                    }
                }
                #region Check if textView is an editable code file
                var IsEditableCodeFile = /*IsCSharpFile &&*/ textView.Roles.Contains("editable") && projectTracker != null; //TODO: We need a stronger check to see if it is a editable code file
                #endregion
                if (IsEditableCodeFile)
                {
                    textView.GotAggregateFocus += NewFocus;
                    var textViewTracker         = TextViewTrackerAccessor.GetOrCreateTextViewTracker(textView, projectTracker, vsTextProperties);
                    //if (VSServiceProvider.Current.VSOptionsPage != null && (VSServiceProvider.Current.VSOptionsPage.InheritanceOnMethods || VSServiceProvider.Current.VSOptionsPage.InheritanceOnProperties)) {
                    //  //var inheritanceAdornmentManager = AdornmentManager.GetOrCreateAdornmentManager(textView, "InheritanceAdornments", outliningManager, VSServiceProvider.Current.Logger);
                    //  //var inheritanceTracker = InheritanceTracker.GetOrCreateAdornmentTracker(textViewTracker);
                    //}
                    //var quickInfoTracker = QuickInfoTracker.GetOrCreateQuickInfoTracker(textViewTracker); //Disabled for now, unfinished
                }
                #region Check if textView is a metadata file
                var IsMetadataFile = !IsEditableCodeFile && fileName.Contains('$'); //TODO: We need a strong check to see if it is a metadata file
                #endregion
                if (IsMetadataFile)
                {
                    if (lastFocus == null || !lastFocus.Properties.ContainsProperty(typeof(ProjectTracker)))
                    {
                        VSServiceProvider.Current.Logger.WriteToLog("Couldn't find project for metadata file.");
                    }
                    else
                    {
                        var outliningManager = OutliningManagerService.GetOutliningManager(textView);
                        if (outliningManager == null)
                        {
                            VSServiceProvider.Current.Logger.WriteToLog("Couldn't get outlining manager for current view.");
                            return;
                        }
                        projectTracker = lastFocus.Properties.GetProperty <ProjectTracker>(typeof(ProjectTracker));
                        textView.Properties.AddProperty(typeof(ProjectTracker), projectTracker);
                        textView.GotAggregateFocus += NewFocus;
                        if (VSServiceProvider.Current.VSOptionsPage != null && VSServiceProvider.Current.VSOptionsPage.Metadata)
                        {
                            var metadataAdornmentManager = AdornmentManager.GetOrCreateAdornmentManager(textView, "MetadataAdornments", outliningManager, VSServiceProvider.Current.Logger);
                            var metadataTracker          = MetadataTracker.GetOrCreateMetadataTracker(textView, projectTracker, vsTextProperties);
                        }
                    }
                }
            }, "TextViewCreated");
        }