// ------------------------------------------------------
        /// <summary>
        /// Unhooks the specified delegates from the code model event sink.
        /// </summary>
        /// <param name="elementAdded">
        /// A delegate that was previously registered to be called when an
        /// element is added to the code model.
        /// </param>
        /// <param name="elementChanged">
        /// A delegate that was previously registered to be called when an
        /// element changes in the code model.
        /// </param>
        /// <param name="elementDeleted">
        /// A delegate that was previously registered to be called when an
        /// element is deleted from the code model.
        /// </param>
        public void UnadviseCodeModelEvents(
            _dispCodeModelEvents_ElementAddedEventHandler elementAdded,
            _dispCodeModelEvents_ElementChangedEventHandler elementChanged,
            _dispCodeModelEvents_ElementDeletedEventHandler elementDeleted)
        {
            // This might be called as a consequence of closing the IDE, in
            // which case this would fail, so wrap it in a try/catch.

            try
            {
                DTE             dte      = (DTE)GetService(typeof(DTE));
                Events2         events   = (Events2)((DTE2)dte).Events;
                CodeModelEvents cmEvents = events.get_CodeModelEvents(null);

                if (cmEvents != null)
                {
                    if (elementAdded != null)
                    {
                        cmEvents.ElementAdded -= elementAdded;
                    }

                    if (elementChanged != null)
                    {
                        cmEvents.ElementChanged -= elementChanged;
                    }

                    if (elementDeleted != null)
                    {
                        cmEvents.ElementDeleted -= elementDeleted;
                    }
                }
            }
            catch (Exception) { }
        }
Beispiel #2
0
        /// <summary>
        /// Registers for code model events.
        /// </summary>
        private void AdviseCodeModelEvents()
        {
            try
            {
                languageService.OnFileCodeModelChanged += OnFileCodeModelChanged;

                var dte2 = dte as DTE2;
                if (dte2 == null)
                {
                    throw new NullReferenceException("dte2 is NULL");
                }

                var events2 = dte2.Events as Events2;
                if (events2 == null)
                {
                    throw new NullReferenceException("events2 is NULL");
                }

                codeModelEvents = events2.get_CodeModelEvents(null);
                if (codeModelEvents != null)
                {
                    codeModelEvents.ElementAdded   += codeModelEvents_Added;
                    codeModelEvents.ElementChanged += codeModelEvents_Changed;
                    codeModelEvents.ElementDeleted += codeModelEvents_Deleted;
                }
            }
            catch (ArgumentException)
            {
                // Failed to get CodeModelEvents, this should not occur.
                SourceOutlineToolWindow.DisplayMessage(Resources.ErrorPrefix, "Failed to get Code Model events.");
                throw;
            }
        }
        // ------------------------------------------------------
        /// <summary>
        /// Hooks the specified delegates into the code model event sink.
        /// </summary>
        /// <param name="elementAdded">
        /// A delegate to be called when an element is added to the code
        /// model.
        /// </param>
        /// <param name="elementChanged">
        /// A delegate to be called when an element changes in the code model.
        /// </param>
        /// <param name="elementDeleted">
        /// A delegate to be called when an element is deleted from the code
        /// model.
        /// </param>
        public void AdviseCodeModelEvents(
            _dispCodeModelEvents_ElementAddedEventHandler elementAdded,
            _dispCodeModelEvents_ElementChangedEventHandler elementChanged,
            _dispCodeModelEvents_ElementDeletedEventHandler elementDeleted)
        {
            DTE             dte      = (DTE)GetService(typeof(DTE));
            Events2         events   = (Events2)((DTE2)dte).Events;
            CodeModelEvents cmEvents = events.get_CodeModelEvents(null);

            if (cmEvents != null)
            {
                if (elementAdded != null)
                {
                    cmEvents.ElementAdded += elementAdded;
                }

                if (elementChanged != null)
                {
                    cmEvents.ElementChanged += elementChanged;
                }

                if (elementDeleted != null)
                {
                    cmEvents.ElementDeleted += elementDeleted;
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Registers for code model events.
        /// </summary>
        private void AdviseCodeModelEvents()
        {
            try
            {
                EnvDTE80.DTE2 dte2 = _dte as EnvDTE80.DTE2;
                if (dte2 == null)
                {
                    throw new NullReferenceException("dte2 is NULL");
                }

                EnvDTE80.Events2 events2 = dte2.Events as EnvDTE80.Events2;
                if (events2 == null)
                {
                    throw new NullReferenceException("events2 is NULL");
                }

                _codeModelEvents = events2.get_CodeModelEvents(null);
                if (_codeModelEvents != null)
                {
                    _codeModelEvents.ElementAdded   += new _dispCodeModelEvents_ElementAddedEventHandler(codeModelEvents_Added);
                    _codeModelEvents.ElementChanged += new _dispCodeModelEvents_ElementChangedEventHandler(codeModelEvents_Changed);
                    _codeModelEvents.ElementDeleted += new _dispCodeModelEvents_ElementDeletedEventHandler(codeModelEvents_Deleted);
                }
            }
            catch (System.ArgumentException)
            {                // Failed to get CodeModelEvents, this should not occur.
                Utils.DisplayMessage(Resources.ErrorPrefix, "Failed to get Code Model events.");
                throw;
            }
        }
Beispiel #5
0
        public StepTaggerProvider()
        {
            if (_events2 != null)
            {
                return;
            }

            _events2            = GaugePackage.DTE.Events as Events2;
            _codeModelEvents    = _events2.CodeModelEvents;
            _projectItemsEvents = _events2.ProjectItemsEvents;
            _documentEvents     = _events2.DocumentEvents;

            _codeModelEvents.ElementAdded   += element => RefreshUsages();
            _codeModelEvents.ElementChanged += (element, change) => RefreshUsages();
            _codeModelEvents.ElementDeleted += (parent, element) => RefreshUsages();

            _projectItemsEvents.ItemAdded   += item => RefreshUsages();
            _projectItemsEvents.ItemRemoved += item => RefreshUsages();
            _projectItemsEvents.ItemRenamed += (item, name) => RefreshUsages();

            _documentEvents.DocumentSaved += document =>
            {
                if (document.IsGaugeConceptFile() || document.IsGaugeSpecFile())
                {
                    RefreshUsages();
                }
            };
        }
Beispiel #6
0
 public DteWithEvents(DTE dte)
 {
     DTE = dte;
     SolutionEvents = dte.Events.SolutionEvents;
     ProjectItemsEvents = ((Events2)dte.Events).ProjectItemsEvents;
     DocumentEvents = ((Events2) dte.Events).DocumentEvents;
     BuildEvents = ((Events2) dte.Events).BuildEvents;
     CodeModelEvents = ((Events2)dte.Events).CodeModelEvents;
 }
Beispiel #7
0
 public DteWithEvents(DTE dte)
 {
     DTE                = dte;
     SolutionEvents     = dte.Events.SolutionEvents;
     ProjectItemsEvents = ((Events2)dte.Events).ProjectItemsEvents;
     DocumentEvents     = ((Events2)dte.Events).DocumentEvents;
     BuildEvents        = ((Events2)dte.Events).BuildEvents;
     CodeModelEvents    = ((Events2)dte.Events).CodeModelEvents;
 }
Beispiel #8
0
 public SolutionListener(IVsSolution solution, DTE2 dte)
 {
     if (solution != null)
     {
         solution.AdviseSolutionEvents(this, out cookie);
     }
     if (dte != null)
     {
         _dte        = dte;
         _codeEvents = ((Events2)dte.Events).get_CodeModelEvents();
     }
 }
Beispiel #9
0
        public void Dispose()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            if (_solutionEvents != null)
            {
                _solutionEvents.Renamed -= SolutionEvents_Renamed;
                _solutionEvents          = null;
            }

            if (_documentEvents != null)
            {
                _documentEvents.DocumentOpened  -= DocumentEvents_DocumentOpened;
                _documentEvents.DocumentClosing -= DocumentEvents_DocumentClosing;
                _documentEvents.DocumentSaved   -= DocumentEvents_DocumentSaved;
                _documentEvents = null;
            }

            if (_codeModelEvents != null)
            {
                _codeModelEvents.ElementAdded   -= CodeModelEvents_ElementAdded;
                _codeModelEvents.ElementChanged -= CodeModelEvents_ElementChanged;
                _codeModelEvents.ElementDeleted -= CodeModelEvents_ElementDeleted;
                _codeModelEvents = null;
            }

            if (_solutionCookie != 0)
            {
                var solution = _serviceProvider.GetService <IVsSolution, SVsSolution>(false);
                if (solution != null)
                {
                    solution.UnadviseSolutionEvents(_solutionCookie);
                }
            }

            if (_docEventsCookie != 0)
            {
                var docEvents = _serviceProvider.GetService <IVsTrackProjectDocuments2, SVsTrackProjectDocuments>(false);
                if (docEvents != null)
                {
                    docEvents.UnadviseTrackProjectDocumentsEvents(_docEventsCookie);
                }
            }

            if (_windowEventsCookie != 0)
            {
                var windowEvents = _serviceProvider.GetService <IVsRunningDocumentTable, SVsRunningDocumentTable>(false);
                if (windowEvents != null)
                {
                    windowEvents.UnadviseRunningDocTableEvents(_windowEventsCookie);
                }
            }
        }
Beispiel #10
0
        public DteWithEvents(DTE dte, IIdeTracer tracer)
        {
            DTE                = dte;
            SolutionEvents     = dte.Events.SolutionEvents;
            ProjectItemsEvents = ((Events2)dte.Events).ProjectItemsEvents;
            DocumentEvents     = ((Events2)dte.Events).DocumentEvents;
            BuildEvents        = ((Events2)dte.Events).BuildEvents;
            CodeModelEvents    = ((Events2)dte.Events).CodeModelEvents;

            SolutionEventsListener   = new SolutionEventsListener();
            FileChangeEventsListener = new FileChangeEventsListener(tracer);

            SolutionEvents.BeforeClosing += FileChangeEventsListener.StopListening;
        }
Beispiel #11
0
        public DteWithEvents(DTE dte, IIdeTracer tracer)
        {
            DTE = dte;
            SolutionEvents = dte.Events.SolutionEvents;
            ProjectItemsEvents = ((Events2)dte.Events).ProjectItemsEvents;
            DocumentEvents = ((Events2) dte.Events).DocumentEvents;
            BuildEvents = ((Events2) dte.Events).BuildEvents;
            CodeModelEvents = ((Events2)dte.Events).CodeModelEvents;

            SolutionEventsListener = new SolutionEventsListener();
            FileChangeEventsListener = new FileChangeEventsListener(tracer);

            SolutionEvents.BeforeClosing += FileChangeEventsListener.StopListening;
        }
Beispiel #12
0
 public Model(string _projName, Events2 _evs2)
 {
     projName = _projName;
     proj     = GetProject(projName);
     if (proj != null)
     {
         vcCodeModel = (VCCodeModel)proj.CodeModel;
     }
     evs2  = _evs2;
     cmEvs = evs2.CodeModelEvents;
     //cmEvs.ElementChanged += OnElementChanged;
     //cmEvs.ElementDeleted += OnElementDeleted;
     //cmEvs.ElementAdded += OnElementAdded;
 }
Beispiel #13
0
        public Project(Func <EnvDTE.Project> vsProjectFuncFunc)
        {
            _vsProjectFunc = vsProjectFuncFunc;
            _dte           = Package.GetGlobalService(typeof(DTE)) as DTE;
            if (_events2 != null)
            {
                return;
            }

            _events2         = _dte.Events as Events2;
            _codeModelEvents = _events2.CodeModelEvents;
            _commandEvents   = _events2.CommandEvents;

            _projectItemsEvents            = _events2.ProjectItemsEvents;
            _documentEvents                = _events2.DocumentEvents;
            _documentEvents.DocumentSaved += document =>
            {
                if (document.IsGaugeConceptFile())
                {
                    RefreshImplementations();
                }
            };

            _projectItemsEvents.ItemAdded   += projectItem => RefreshImplementations();
            _projectItemsEvents.ItemRemoved += projectItem => RefreshImplementations();
            _projectItemsEvents.ItemRenamed += (item, name) => RefreshImplementations();
            _codeModelEvents.ElementAdded   += element => RefreshImplementations();
            _codeModelEvents.ElementChanged += (element, change) => RefreshImplementations();
            _codeModelEvents.ElementDeleted += (parent, element) => RefreshImplementations();

            _commandEvents.AfterExecute += (cmdId, id, customIn, customOut) =>
            {
                if ((VSConstants.VSStd2KCmdID)id == VSConstants.VSStd2KCmdID.RENAME)
                {
                    RefreshImplementations();
                }
            };
        }
Beispiel #14
0
        private void Initialize()
        {
            if (_initialized)
            {
                return;
            }

            ThreadHelper.ThrowIfNotOnUIThread();

            try
            {
                var dte = _shellProjectService.GetDTE() as DTE2;
                if (dte != null)
                {
                    var events = dte.Events as Events2;

                    _solutionEvents = events?.SolutionEvents;
                    if (_solutionEvents != null)
                    {
                        _solutionEvents.Renamed += SolutionEvents_Renamed;
                    }

                    _documentEvents = events?.get_DocumentEvents(null);
                    if (_documentEvents != null)
                    {
                        _documentEvents.DocumentOpened  += DocumentEvents_DocumentOpened;
                        _documentEvents.DocumentClosing += DocumentEvents_DocumentClosing;
                        _documentEvents.DocumentSaved   += DocumentEvents_DocumentSaved;
                    }

                    _codeModelEvents = events?.get_CodeModelEvents(null);
                    if (_codeModelEvents != null)
                    {
                        _codeModelEvents.ElementAdded   += CodeModelEvents_ElementAdded;
                        _codeModelEvents.ElementChanged += CodeModelEvents_ElementChanged;
                        _codeModelEvents.ElementDeleted += CodeModelEvents_ElementDeleted;
                    }
                }

                var solution = _serviceProvider.GetService <IVsSolution, SVsSolution>(false);
                if (solution != null)
                {
                    solution.AdviseSolutionEvents(this, out _solutionCookie);
                }

                var docEvents = _serviceProvider.GetService <IVsTrackProjectDocuments2, SVsTrackProjectDocuments>(false);
                if (docEvents != null)
                {
                    docEvents.AdviseTrackProjectDocumentsEvents(this, out _docEventsCookie);
                }

                var windowEvents = _serviceProvider.GetService <IVsRunningDocumentTable, SVsRunningDocumentTable>(false);
                if (windowEvents != null)
                {
                    windowEvents.AdviseRunningDocTableEvents(this, out _windowEventsCookie);
                }
            }
            finally
            {
                _initialized = true;
            }
        }
Beispiel #15
0
        /// <summary>
        /// Registers for code model events.
        /// </summary>
        private void AdviseCodeModelEvents()
        {
            try
            {
                EnvDTE80.DTE2 dte2 = _dte as EnvDTE80.DTE2;
                if (dte2 == null)
                    throw new NullReferenceException("dte2 is NULL");

                EnvDTE80.Events2 events2 = dte2.Events as EnvDTE80.Events2;
                if (events2 == null)
                    throw new NullReferenceException("events2 is NULL");

                _codeModelEvents = events2.get_CodeModelEvents(null);
                if (_codeModelEvents != null)
                {
                    _codeModelEvents.ElementAdded += new _dispCodeModelEvents_ElementAddedEventHandler(codeModelEvents_Added);
                    _codeModelEvents.ElementChanged += new _dispCodeModelEvents_ElementChangedEventHandler(codeModelEvents_Changed);
                    _codeModelEvents.ElementDeleted += new _dispCodeModelEvents_ElementDeletedEventHandler(codeModelEvents_Deleted);
                }
            }
            catch (System.ArgumentException)
            {    // Failed to get CodeModelEvents, this should not occur.
                Utils.DisplayMessage(Resources.ErrorPrefix, "Failed to get Code Model events.");
                throw;
            }
        }
Beispiel #16
0
        /// <summary>
        /// Registers for code model events.
        /// </summary>
        private void AdviseCodeModelEvents()
        {
            try
            {
                languageService.OnFileCodeModelChanged += OnFileCodeModelChanged;

                var dte2 = dte as DTE2;
                if (dte2 == null)
                    throw new NullReferenceException("dte2 is NULL");

                var events2 = dte2.Events as Events2;
                if (events2 == null)
                    throw new NullReferenceException("events2 is NULL");

                codeModelEvents = events2.get_CodeModelEvents(null);
                if (codeModelEvents != null)
                {
                    codeModelEvents.ElementAdded += codeModelEvents_Added;
                    codeModelEvents.ElementChanged += codeModelEvents_Changed;
                    codeModelEvents.ElementDeleted += codeModelEvents_Deleted;
                }
            }
            catch (ArgumentException)
            {
                // Failed to get CodeModelEvents, this should not occur.
                SourceOutlineToolWindow.DisplayMessage(Resources.ErrorPrefix, "Failed to get Code Model events.");
                throw;
            }
        }