public SignatureHelpSource(ITextBuffer textBuffer, TextViewTracker textViewTracker) { Contract.Requires(textBuffer != null); Contract.Requires(textViewTracker != null); _textBuffer = textBuffer; _textViewTracker = textViewTracker; }
public QuickInfoSource(ITextBuffer textBuffer, ITextViewTracker textViewTracker) { Contract.Requires(textBuffer != null); Contract.Requires(textViewTracker != null); _textBuffer = textBuffer; _textViewTracker = (TextViewTracker)textViewTracker; }
public ISignatureHelpSource TryCreateSignatureHelpSource(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 <ISignatureHelpSource>(() => { if (VSServiceProvider.Current.VSOptionsPage != null && !VSServiceProvider.Current.VSOptionsPage.SignatureHelp) { return null; } //Can we get the TextViewTracker? TextViewTracker textViewTracker; if (TextViewTracker.TryGetTextViewTracker(textBuffer, out textViewTracker)) { return new SignatureHelpSource(textBuffer, textViewTracker); } else { return null; } }, "TryCreateSignatureHelpSource")); }
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; } TextViewTracker textViewTracker; if (TextViewTracker.TryGetTextViewTracker(textBuffer, out textViewTracker)) { return new QuickInfoSource(textBuffer, textViewTracker); } else { return null; } }, "TryCreateQuickInfoSession")); }
public static bool TryGetTextViewTracker(ITextBuffer textBuffer, out TextViewTracker textViewTracker) { Contract.Requires(textBuffer != null); if (textBuffer.Properties == null) { textViewTracker = null; return false; } return textBuffer.Properties.TryGetProperty(TextViewTrackerKey, out textViewTracker); }
public SignatureHelpSource(ITextBuffer textBuffer, ITextViewTracker textViewTracker) { Contract.Requires(textBuffer != null); Contract.Requires(textViewTracker != null); _textBuffer = textBuffer; _textViewTracker = (TextViewTracker)textViewTracker; }
public static bool TryGetTextViewTracker(ITextBuffer textBuffer, out TextViewTracker textViewTracker) { Contract.Requires(textBuffer != null); if (textBuffer.Properties == null) { textViewTracker = null; return(false); } return(textBuffer.Properties.TryGetProperty(TextViewTrackerKey, out textViewTracker)); }
private InheritanceTracker(TextViewTracker textViewTracker) { Contract.Requires(textViewTracker != null); Contract.Requires(textViewTracker.TextView != null); if (!AdornmentManager.TryGetAdornmentManager(textViewTracker.TextView, "InheritanceAdornments", out _adornmentManager)) { ContractsPackageAccessor.Current.Logger.WriteToLog("Inheritance adornment layer not instantiated."); throw new InvalidOperationException("Inheritance adornment layer not instantiated."); } _methodsNeedingContractLookup = new Queue<KeyValuePair<object, MethodDeclarationNode>>(); _propertiesNeedingContractLookup = new Queue<KeyValuePair<Tuple<object, object>, PropertyDeclarationNode>>(); _methodKeys = new HashSet<object>(); _propertyKeys = new HashSet<object>(); _textViewTracker = textViewTracker; _textViewTracker.LatestCompilationChanged += OnLatestCompilationChanged; _textViewTracker.LatestSourceFileChanged += OnLatestSourceFileChanged; _textViewTracker.ProjectTracker.BuildDone += OnBuildDone; _textViewTracker.TextView.Closed += OnClosed; }
private InheritanceTracker(TextViewTracker textViewTracker) { Contract.Requires(textViewTracker != null); Contract.Requires(textViewTracker.TextView != null); if (!AdornmentManager.TryGetAdornmentManager(textViewTracker.TextView, "InheritanceAdornments", out _adornmentManager)) { ContractsPackageAccessor.Current.Logger.WriteToLog("Inheritance adornment layer not instantiated."); throw new InvalidOperationException("Inheritance adornment layer not instantiated."); } _methodsNeedingContractLookup = new Queue <KeyValuePair <object, MethodDeclarationNode> >(); _propertiesNeedingContractLookup = new Queue <KeyValuePair <Tuple <object, object>, PropertyDeclarationNode> >(); _methodKeys = new HashSet <object>(); _propertyKeys = new HashSet <object>(); _textViewTracker = textViewTracker; _textViewTracker.LatestCompilationChanged += OnLatestCompilationChanged; _textViewTracker.LatestSourceFileChanged += OnLatestSourceFileChanged; _textViewTracker.ProjectTracker.BuildDone += OnBuildDone; _textViewTracker.TextView.Closed += OnClosed; }
public static InheritanceTracker GetOrCreateAdornmentTracker(TextViewTracker textViewTracker) { Contract.Requires(textViewTracker != null); Contract.Ensures(Contract.Result <InheritanceTracker>() != null); return(textViewTracker.TextView.Properties.GetOrCreateSingletonProperty <InheritanceTracker>(InheritanceTrackerKey, delegate { return new InheritanceTracker(textViewTracker); })); }
/// <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 = TextViewTracker.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"); }
public static InheritanceTracker GetOrCreateAdornmentTracker(TextViewTracker textViewTracker) { Contract.Requires(textViewTracker != null); Contract.Ensures(Contract.Result<InheritanceTracker>() != null); return textViewTracker.TextView.Properties.GetOrCreateSingletonProperty<InheritanceTracker>(InheritanceTrackerKey, delegate { return new InheritanceTracker(textViewTracker); }); }