/// <summary> /// Configure store events to add assembly references when modules or the mainboard are added to the diagram /// </summary> private void SetupAssemblyReferencing() { //Get the DTE Project from the IVsHierarchy project = GetProject(); if (project != null) { //Get the MF version we are running under (e.g. 4.1 or 4.2) var prop = project.Properties.Item("TargetFrameworkMoniker"); if (prop != null) { ProjectMFVersion = ParseTargetVersion(prop.Value as string); } StoreGadgeteerCoreVersionNumber(); var vsproject = (VSProject2)project.Object; referencesEvents = vsproject.Events.ReferencesEvents; if (referencesEvents != null) { referencesEvents.ReferenceAdded += ReferencesEvents_ReferenceChangeHandler; referencesEvents.ReferenceRemoved += ReferencesEvents_ReferenceChangeHandler; referencesEvents.ReferenceChanged += ReferencesEvents_ReferenceChangeHandler; } //This is how the DSL objects access the MF version being used this.Store.PropertyBag[GadgeteerModel.ProjectMicroframeworkVersionKey] = ProjectMFVersion; //Hookup to Module creation events var hardware = this.Store.DomainDataDirectory.FindDomainClass(GadgeteerHardware.DomainClassId); this.Store.EventManagerDirectory.ElementAdded.Add(hardware, new EventHandler <ElementAddedEventArgs>(GadgeteerHardwareAdded)); this.Store.EventManagerDirectory.ElementDeleted.Add(hardware, new EventHandler <ElementDeletedEventArgs>(GadgeteerHardwareDeleted)); } }
void SetupEvents(VSProject vsProject) { _events = vsProject.Events.ReferencesEvents; _events.ReferenceAdded += r => { var p = r.SourceProject; if (p != null) { References.Add(p); } _service._treeRebuildQueued = true; }; _events.ReferenceRemoved += r => { var p = r.SourceProject; if (p != null) { References.Remove(p); } _service._treeRebuildQueued = true; }; _events.ReferenceChanged += delegate { RescanQueued = true; }; }
public static void Init() { _dteEvents = DteExtensions.DTE.Events; _documentEvents = _dteEvents.DocumentEvents; _documentEvents.DocumentSaved += DocumentEventsOnDocumentSaved; _buildEvents = _dteEvents.BuildEvents; _buildEvents.OnBuildBegin += BuildEventsOnOnBuildBegin; _solutionEvents = _dteEvents.SolutionEvents; _solutionEvents.Opened += SolutionEventsOnOpened; _solutionEvents.AfterClosing += SolutionEventsOnAfterClosing; _referencesEvents = ((ReferencesEvents)_dteEvents.GetObject("CSharpReferencesEvents")); }
/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> public void Dispose() { if (this.referencesEvents != null) { this.referencesEvents.ReferenceAdded -= this.ReferencesUpdated; this.referencesEvents.ReferenceChanged -= this.ReferencesUpdated; this.referencesEvents.ReferenceRemoved -= this.ReferencesUpdated; this.referencesEvents = null; } if (this.importsEvents != null) { this.importsEvents.ImportAdded -= this.ImportsUpdated; this.importsEvents.ImportRemoved -= this.ImportsUpdated; this.importsEvents = null; } if (this.watchers != null) { foreach (var watcher in this.watchers) { watcher.Changed -= this.FileChanged; watcher.Renamed -= this.FileChanged; watcher.Deleted -= this.FileChanged; watcher.Created -= this.FileChanged; watcher.Dispose(); } this.watchers.Clear(); this.watchers = null; } if (this.intellisenseSession != null) { if (this.handler != null) { this.intellisenseSession.DocumentUpdated -= this.handler.Handler; this.handler = null; } this.intellisenseSession = null; } if (this.appDomain != null) { AppDomain.Unload(this.appDomain); } this.appDomain = null; }
public void StopTracking() { if (referencesEvents == null) return; referencesEvents.ReferenceAdded -= ReferencesEventsOnReferenceAdded; referencesEvents.ReferenceRemoved -= ReferencesEventsOnReferenceRemoved; referencesEvents.ReferenceChanged -= ReferencesEventsOnReferenceChanged; dteWithEvents.FileChangeEventsListener.FileChanged -= FileChangedOnDisk; referencesEvents = null; timer.Change(Timeout.Infinite, Timeout.Infinite); triggerReferenceChangedTimer.Change(Timeout.Infinite, Timeout.Infinite); filesChangedOnDisk.Clear(); }
public void StartTracking() { if (project == null) return; referencesEvents = project.Events.ReferencesEvents; referencesEvents.ReferenceAdded += ReferencesEventsOnReferenceAdded; referencesEvents.ReferenceRemoved += ReferencesEventsOnReferenceRemoved; referencesEvents.ReferenceChanged += ReferencesEventsOnReferenceChanged; dteWithEvents.FileChangeEventsListener.FileChanged += FileChangedOnDisk; foreach (var reference in project.References.OfType<Reference>()) { StartListeningToReference(reference); } }
public void CheckForLoadedStateChanges() { var project = Project.GetObjectSafe <VSProject>(); if (project != null && _events == null) { SetupEvents(project); Rescan(); } if (project == null && _events != null) { _events = null; References.Clear(); _service._treeRebuildQueued = true; TargetPathUpdateQueued = true; } }
/// <summary> /// Initialize new instance of <see cref="VsProjectAssembly" /> from given <see cref="Project" />. /// </summary> /// <param name="assemblyProject">Project that will be represented by initialized assembly.</param> /// <param name="vs">The visual studio services.</param> /// <param name="namesProvider">The <see cref="CodeElement"/> names provider.</param> /// <param name="infoBuilder">The method signature information builder.</param> /// <param name="itemBuilder">The method item builder.</param> public VsProjectAssembly(Project assemblyProject, VisualStudioServices vs, CodeElementNamesProvider namesProvider, MethodInfoBuilder infoBuilder, MethodItemBuilder itemBuilder) { VS = vs; _assemblyProject = assemblyProject.Object as VSProject; _referenceEvents = _assemblyProject.Events.ReferencesEvents; _namesProvider = namesProvider; Searcher = new CodeElementSearcher(this); InfoBuilder = infoBuilder; ItemBuilder = itemBuilder; InfoBuilder.Initialize(this); ItemBuilder.Initialize(this); OnTypeSystemInitialized += initializeAssembly; }
public void StopTracking() { if (referencesEvents == null) { return; } referencesEvents.ReferenceAdded -= ReferencesEventsOnReferenceAdded; referencesEvents.ReferenceRemoved -= ReferencesEventsOnReferenceRemoved; referencesEvents.ReferenceChanged -= ReferencesEventsOnReferenceChanged; dteWithEvents.FileChangeEventsListener.FileChanged -= FileChangedOnDisk; referencesEvents = null; timer.Change(Timeout.Infinite, Timeout.Infinite); triggerReferenceChangedTimer.Change(Timeout.Infinite, Timeout.Infinite); filesChangedOnDisk.Clear(); }
public void StartTracking() { if (project == null) { return; } referencesEvents = project.Events.ReferencesEvents; referencesEvents.ReferenceAdded += ReferencesEventsOnReferenceAdded; referencesEvents.ReferenceRemoved += ReferencesEventsOnReferenceRemoved; referencesEvents.ReferenceChanged += ReferencesEventsOnReferenceChanged; dteWithEvents.FileChangeEventsListener.FileChanged += FileChangedOnDisk; foreach (var reference in project.References.OfType <Reference>()) { StartListeningToReference(reference); } }
protected override void OnDocumentClosing(EventArgs e) { //If the doc data is dirty we need to generate the code before the file closes. Otherwise we can leave the model and the code file //out of sync if (IsDocDirty) { RunCodeGeneration(); } base.OnDocumentClosing(e); if (referencesEvents != null) { referencesEvents.ReferenceAdded -= ReferencesEvents_ReferenceChangeHandler; referencesEvents.ReferenceRemoved -= ReferencesEvents_ReferenceChangeHandler; referencesEvents.ReferenceChanged -= ReferencesEvents_ReferenceChangeHandler; referencesEvents = null; } }
/// <summary> /// Initializes a new instance of the <see cref="ProjectListener"/> class. /// </summary> /// <param name="project">The project.</param> public ProjectListener(SolutionManagerService solutionManager, ProjectNode project, EventHandler<ProjectChangedEventArg> callback) { Debug.Assert(project != null); _solutionManager = solutionManager; Name = project.UniqueName; VSProject prj = project.VSProject; if (prj == null) { _referencesEvents = null; return; } _referencesEvents = prj.Events.ReferencesEvents; _referencesEvents.ReferenceAdded += new _dispReferencesEvents_ReferenceAddedEventHandler(OnReferenceAdded); _referencesEvents.ReferenceChanged += new _dispReferencesEvents_ReferenceChangedEventHandler(OnReferenceChanged); _referencesEvents.ReferenceRemoved += new _dispReferencesEvents_ReferenceRemovedEventHandler(OnReferenceRemoved); _callback = callback; _enabled = true; }
/// <summary> /// Initializes the proxy. /// </summary> /// <param name="projectId"> /// The project id. /// </param> private void Init(string projectId) { Task.Run(() => { try { var visualStudioProject = IntellisenseProxy.GetVisualStudioProjectByUniqueName(projectId); var projectName = "Unknown project"; var configFile = (string)null; var assemblies = new string[0]; if (visualStudioProject != null) { projectName = visualStudioProject.Project.Name; try { this.referencesEvents = visualStudioProject.Events.ReferencesEvents; this.referencesEvents.ReferenceAdded += this.ReferencesUpdated; this.referencesEvents.ReferenceChanged += this.ReferencesUpdated; this.referencesEvents.ReferenceRemoved += this.ReferencesUpdated; } catch (NotImplementedException) { //// CPS does not have reference events. } try { this.importsEvents = visualStudioProject.Events.ImportsEvents; this.importsEvents.ImportAdded += this.ImportsUpdated; this.importsEvents.ImportRemoved += this.ImportsUpdated; } catch (NotImplementedException) { //// CPS does not have import events. } configFile = visualStudioProject.Project.ProjectItems.OfType <ProjectItem>().FirstOrDefault(i => i.Name.EndsWith(".config", StringComparison.OrdinalIgnoreCase))?.FileNames[0]; assemblies = visualStudioProject.References.Cast <Reference>() .Where(r => { try { return(!string.IsNullOrEmpty(r.Path)); } catch { return(false); } }) .Select(r => r.Path) .ToArray(); } var setupInfomation = AppDomain.CurrentDomain.SetupInformation; setupInfomation.ApplicationBase = string.Empty; setupInfomation.ConfigurationFile = configFile; setupInfomation.LoaderOptimization = LoaderOptimization.SingleDomain; AppDomain.CurrentDomain.AssemblyResolve += IntellisenseProxy.AppDomainFix; this.appDomain = AppDomain.CreateDomain($"Intellisense project {projectName} domain", null, setupInfomation); object[] arguments = { assemblies, typeof(ConnectQlContext).Assembly.Location }; this.watchPaths = assemblies .Concat(new[] { configFile }).ToArray(); this.WatchPaths(this.watchPaths); this.handler = new RemoteEventHandler <byte[]>(this.IntellisenseSessionOnDocumentUpdated); this.intellisenseSession = (AppDomainIntellisenseSession)this.appDomain.CreateInstanceFromAndUnwrap( typeof(AppDomainIntellisenseSession).Assembly.Location, typeof(AppDomainIntellisenseSession).FullName ?? string.Empty, false, BindingFlags.CreateInstance, null, arguments, CultureInfo.CurrentCulture, null); this.intellisenseSession.DocumentUpdated += this.handler.Handler; this.Initialized?.Invoke(this, EventArgs.Empty); } catch (Exception) { this.Dispose(); Task.Run(async() => { await Task.Delay(TimeSpan.FromSeconds(1)); this.Init(projectId); }); } finally { AppDomain.CurrentDomain.AssemblyResolve -= IntellisenseProxy.AppDomainFix; } }); }