public void Dismiss()
 {
     if (IsDismissed)
     {
         return;
     }
     IsDismissed      = true;
     TextView.Closed -= TextView_Closed;
     textViewPopup?.Dispose();
     textViewPopup = null;
     sessionCommandTargetFilter?.Close();
     sessionCommandTargetFilter = null;
     Dismissed?.Invoke(this, EventArgs.Empty);
     if (completionSources != null)
     {
         foreach (var source in completionSources)
         {
             source.Dispose();
         }
         completionSources = null;
     }
 }
        public void Start()
        {
            if (IsStarted)
            {
                throw new InvalidOperationException();
            }
            if (IsDismissed)
            {
                throw new InvalidOperationException();
            }
            IsStarted = true;
            this.completionSources = CreateCompletionSources();

            var list = new List <CompletionCollection>();

            foreach (var source in completionSources)
            {
                source.AugmentCompletionSession(this, list);
            }
            foreach (var cc in list)
            {
                completionCollections.Add(cc);
            }

            if (completionCollections.Count == 0)
            {
                Dismiss();
            }
            else
            {
                SelectedCompletionCollection = completionCollections[0];
                completionPresenter          = completionPresenterService.Create(this);
                Debug.Assert(completionPresenter != null);
                sessionCommandTargetFilter = new SessionCommandTargetFilter(this);
                textViewPopup = new TextViewPopup(TextView, GetTrackingPoint(SelectedCompletionCollection), completionPresenter);
                textViewPopup.Show();
            }
        }