Пример #1
0
 private ActiveTextEditor ToActiveTextEditor(IWpfTextView wpfTextView, IVirtualTextDocument virtualTextDocument)
 {
     return(new ActiveTextEditor(wpfTextView,
                                 virtualTextDocument.FileName,
                                 virtualTextDocument.Uri,
                                 wpfTextView.TextSnapshot.LineCount));
 }
Пример #2
0
 protected CodemarkSuggestedActionBase(IComponentModel componentModel, IWpfTextView wpfTextView, IVirtualTextDocument virtualTextDocument, EditorState textSelection)
 {
     ComponentModel       = componentModel;
     _wpfTextView         = wpfTextView;
     _virtualTextDocument = virtualTextDocument;
     _textSelection       = textSelection;
 }
Пример #3
0
 public CreateReviewSuggestedAction(IComponentModel componentModel, IWpfTextView wpfTextView, IVirtualTextDocument virtualTextDocument,
                                    EditorState textSelection)
 {
     _componentModel      = componentModel;
     _virtualTextDocument = virtualTextDocument;
     _textSelection       = textSelection;
 }
Пример #4
0
 public void Add(IVirtualTextDocument key, IWpfTextView wpfTextView)
 {
     lock (Locker) {
         if (!Items.TryGetValue(key.Id, out List <IWpfTextView> textViews))
         {
             textViews = new List <IWpfTextView>();
             Items.Add(key.Id, textViews);
         }
         textViews.Add(wpfTextView);
     }
 }
Пример #5
0
        /// <summary>
        /// SubjectBuffersConnected happens first
        /// </summary>
        /// <param name="wpfTextView"></param>
        /// <param name="reason"></param>
        /// <param name="subjectBuffers"></param>
        public void SubjectBuffersConnected(IWpfTextView wpfTextView, ConnectionReason reason, Collection <ITextBuffer> subjectBuffers)
        {
            try {
                var logPrefix = $"{nameof(SubjectBuffersConnected)}";
                using (var metrics = Log.WithMetrics($"{logPrefix} ")) {
                    if (wpfTextView == null || !wpfTextView.HasValidDocumentRoles())
                    {
                        return;
                    }

                    IVirtualTextDocument virtualTextDocument = null;
                    if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextView, out virtualTextDocument))
                    {
                        Log.Warning($"{logPrefix} Could not create virtualTextDocument");
                        return;
                    }

                    Log.Verbose($"{logPrefix} pre-Lock");
                    lock (WeakTableLock) {
                        Log.Verbose($"{logPrefix} in-Lock");
                        foreach (var buffer in subjectBuffers)
                        {
                            if (!TextBufferTable.TryGetValue(buffer, out HashSet <IWpfTextView> textViews))
                            {
                                textViews = new HashSet <IWpfTextView>();
                                TextBufferTable.Add(buffer, textViews);
                            }

                            textViews.Add(wpfTextView);
                        }
                        using (metrics.Measure($"{logPrefix} Building properties")) {
                            if (virtualTextDocument.SupportsMarkers)
                            {
                                wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.DocumentMarkerManager,
                                                                                    () => new DocumentMarkerManager(CodeStreamAgentServiceFactory.Create(), wpfTextView, virtualTextDocument));
                            }
                            wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.TextViewDocument, () => virtualTextDocument);
                            wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.TextViewState, () => new TextViewState());
#if DEBUG
                            if (TextViewCache == null)
                            {
                                System.Diagnostics.Debugger.Break();
                            }
#endif
                        }
                        TextViewCache.Add(virtualTextDocument, wpfTextView);
                    }
                    Log.Verbose($"{logPrefix} Uri={virtualTextDocument.Uri}");
                }
            }
            catch (Exception ex) {
                Log.Error(ex, nameof(SubjectBuffersConnected));
            }
        }
Пример #6
0
 public CodemarkSuggestedActionsSource(IComponentModel componentModel,
                                       ITextView textView,
                                       ITextBuffer textBuffer,
                                       IVirtualTextDocument virtualTextDocument)
 {
     _componentModel      = componentModel;
     _textBuffer          = textBuffer;
     _textView            = textView;
     _virtualTextDocument = virtualTextDocument;
     _sessionService      = _componentModel.GetService <ISessionService>();
 }
Пример #7
0
 public void Remove(IVirtualTextDocument key, IWpfTextView wpfTextView)
 {
     lock (Locker) {
         if (Items.TryGetValue(key.Id, out List <IWpfTextView> textViews))
         {
             textViews.Remove(wpfTextView);
             if (!textViews.Any())
             {
                 Items.Remove(key.Id);
             }
         }
     }
 }
Пример #8
0
        public ActiveTextEditor CreateActiveTextEditor(IVirtualTextDocument textDocument, IWpfTextView wpfTextView)
        {
            try {
                if (textDocument == null || wpfTextView == null)
                {
                    return(null);
                }

                return(new ActiveTextEditor(wpfTextView,
                                            textDocument.FileName,
                                            textDocument.Uri,
                                            wpfTextView.TextSnapshot.LineCount));
            }
            catch (Exception ex) {
                Log.Error(ex, nameof(GetActiveTextEditor));
            }
            return(null);
        }
Пример #9
0
 public bool TryGetValue(IVirtualTextDocument key, out IWpfTextView wpfTextView)
 {
     lock (Locker) {
         if (Items.TryGetValue(key.Id, out List <IWpfTextView> textViews))
         {
             if (textViews.Count() == 1)
             {
                 wpfTextView = textViews[0];
             }
             else
             {
                 wpfTextView = textViews.FirstOrDefault(_ => _.HasAggregateFocus || _.IsMouseOverViewOrAdornments) ?? textViews.FirstOrDefault();
             }
             return(wpfTextView != null);
         }
         wpfTextView = null;
         return(false);
     }
 }
Пример #10
0
 public DocumentMarkerManager(ICodeStreamAgentService agentService, IWpfTextView wpfTextView, IVirtualTextDocument virtualTextDocument)
 {
     _agentService        = agentService;
     _wpfTextView         = wpfTextView;
     _virtualTextDocument = virtualTextDocument;
 }
Пример #11
0
 protected CodemarkSuggestedActionBase(IComponentModel componentModel, IWpfTextView wpfTextView, IVirtualTextDocument virtualTextDocument)
 {
     ComponentModel       = componentModel;
     _wpfTextView         = wpfTextView;
     _virtualTextDocument = virtualTextDocument;
 }
Пример #12
0
 public CreateReviewSuggestedAction(IComponentModel componentModel, IWpfTextView wpfTextView, IVirtualTextDocument virtualTextDocument)
 {
     _componentModel      = componentModel;
     _wpfTextView         = wpfTextView;
     _virtualTextDocument = virtualTextDocument;
 }
Пример #13
0
 public CodemarkPermalinkSuggestedAction(IComponentModel componentModel, IWpfTextView wpfTextView, IVirtualTextDocument textDocument) : base(componentModel, wpfTextView, textDocument)
 {
 }
        /// <summary>
        /// Don't get a textDocument if our secret LSP file is trying to be opened
        /// </summary>
        /// <param name="textDocumentFactoryService"></param>
        /// <param name="textBuffer"></param>
        /// <param name="textDocument"></param>
        /// <returns></returns>
        public static bool TryGetTextDocument(this ITextDocumentFactoryService textDocumentFactoryService, ITextBuffer textBuffer, out IVirtualTextDocument textDocument)
        {
            textDocument = null;
            if (!textDocumentFactoryService.TryGetTextDocument(textBuffer, out ITextDocument td))
            {
                return(false);
            }

            textDocument = VirtualTextDocument.FromTextDocument(td);
            if (textDocument == null)
            {
                return(false);
            }

            return(!td.FilePath.EndsWithIgnoreCase(Core.Constants.CodeStreamCodeStream));
        }
Пример #15
0
 public CodemarkPermalinkSuggestedAction(IComponentModel componentModel, IWpfTextView wpfTextView, IVirtualTextDocument textDocument, EditorState textSelection) : base(componentModel, wpfTextView, textDocument, textSelection)
 {
 }
Пример #16
0
        public static bool TryGetTextDocument(this ITextDocumentFactoryService textDocumentFactoryService, IWpfTextView textView, out IVirtualTextDocument textDocument)
        {
            textDocument = null;

            try {
                if (textView.Properties.TryGetProperty(PropertyNames.TextViewDocument, out textDocument))
                {
                    return(textDocument != null);
                }
                // get all the buffers and try to find one that is attached to a document
                var subjectBuffers = textView?.BufferGraph.GetTextBuffers(_ => true);
                if (subjectBuffers == null)
                {
                    if (!TryGetTextDocument(textDocumentFactoryService, textView.TextBuffer, out textDocument))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (subjectBuffers.Count == 1 && subjectBuffers[0] == textView.TextBuffer)
                    {
                        if (!TryGetTextDocument(textDocumentFactoryService, textView.TextBuffer, out textDocument))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        foreach (var buffer in subjectBuffers)
                        {
                            if (TryGetTextDocument(textDocumentFactoryService, buffer, out textDocument))
                            {
                                break;
                            }
                        }
                    }
                }
                return(textDocument != null);
            }
            catch (Exception) {
                return(false);
            }
        }