public void AddAnalyzerAssembly(string analyzerAssemblyFullPath) { if (_analyzers.ContainsKey(analyzerAssemblyFullPath)) { return; } var analyzerLoader = _visualStudioWorkspaceOpt.Services.GetRequiredService<IAnalyzerService>().GetLoader(); analyzerLoader.AddDependencyLocation(analyzerAssemblyFullPath); var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, analyzerLoader, this.Language); _analyzers[analyzerAssemblyFullPath] = analyzer; if (_pushingChangesToWorkspaceHosts) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, analyzerReference)); List<VisualStudioAnalyzer> existingReferencesWithLoadErrors = _analyzers.Values.Where(a => a.HasLoadErrors).ToList(); foreach (var existingReference in existingReferencesWithLoadErrors) { this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceRemoved(_id, existingReference.GetReference())); existingReference.Reset(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, existingReference.GetReference())); } GetAnalyzerDependencyCheckingService().CheckForConflictsAsync(); } GetAnalyzerFileWatcherService().AddPath(analyzerAssemblyFullPath); GetAnalyzerFileWatcherService().ErrorIfAnalyzerAlreadyLoaded(_id, analyzerAssemblyFullPath); }
public void AddAnalyzerAssembly(string analyzerAssemblyFullPath) { if (_analyzers.ContainsKey(analyzerAssemblyFullPath)) { return; } var analyzerLoader = _visualStudioWorkspaceOpt.Services.GetRequiredService <IAnalyzerService>().GetLoader(); analyzerLoader.AddDependencyLocation(analyzerAssemblyFullPath); var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, analyzerLoader, this.Language); _analyzers[analyzerAssemblyFullPath] = analyzer; if (_pushingChangesToWorkspaceHosts) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, analyzerReference)); GetAnalyzerDependencyCheckingService().CheckForConflictsAsync(); } GetAnalyzerFileWatcherService().AddPath(analyzerAssemblyFullPath); GetAnalyzerFileWatcherService().ErrorIfAnalyzerAlreadyLoaded(_id, analyzerAssemblyFullPath); }
public void AddAnalyzerReference(string analyzerAssemblyFullPath) { AssertIsForeground(); if (CurrentProjectAnalyzersContains(analyzerAssemblyFullPath)) { return; } var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); if (Workspace == null) { // This can happen only in tests. var testAnalyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, loader: null, language: this.Language); this.AddOrUpdateAnalyzer(analyzerAssemblyFullPath, testAnalyzer); return; } var analyzerLoader = Workspace.Services.GetRequiredService <IAnalyzerService>().GetLoader(); analyzerLoader.AddDependencyLocation(analyzerAssemblyFullPath); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, analyzerLoader, this.Language); this.AddOrUpdateAnalyzer(analyzerAssemblyFullPath, analyzer); if (PushingChangesToWorkspace) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspace(workspace => workspace.OnAnalyzerReferenceAdded(Id, analyzerReference)); List <VisualStudioAnalyzer> existingReferencesWithLoadErrors = GetCurrentAnalyzers().Where(a => a.HasLoadErrors).ToList(); foreach (var existingReference in existingReferencesWithLoadErrors) { this.ProjectTracker.NotifyWorkspace(workspace => workspace.OnAnalyzerReferenceRemoved(Id, existingReference.GetReference())); existingReference.Reset(); this.ProjectTracker.NotifyWorkspace(workspace => workspace.OnAnalyzerReferenceAdded(Id, existingReference.GetReference())); } GetAnalyzerDependencyCheckingService().CheckForConflictsAsync(); } if (File.Exists(analyzerAssemblyFullPath)) { GetAnalyzerFileWatcherService().AddPath(analyzerAssemblyFullPath); GetAnalyzerFileWatcherService().ErrorIfAnalyzerAlreadyLoaded(Id, analyzerAssemblyFullPath); } else { analyzer.UpdatedOnDisk += OnAnalyzerChanged; } }
public void AddAnalyzerReference(string analyzerAssemblyFullPath) { AssertIsForeground(); if (CurrentProjectAnalyzersContains(analyzerAssemblyFullPath)) { return; } var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); if (Workspace == null) { // This can happen only in tests. var testAnalyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, loader: null, language: this.Language); this.AddOrUpdateAnalyzer(analyzerAssemblyFullPath, testAnalyzer); return; } var analyzerLoader = Workspace.Services.GetRequiredService<IAnalyzerService>().GetLoader(); analyzerLoader.AddDependencyLocation(analyzerAssemblyFullPath); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, analyzerLoader, this.Language); this.AddOrUpdateAnalyzer(analyzerAssemblyFullPath, analyzer); if (_pushingChangesToWorkspaceHosts) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(Id, analyzerReference)); List<VisualStudioAnalyzer> existingReferencesWithLoadErrors = GetCurrentAnalyzers().Where(a => a.HasLoadErrors).ToList(); foreach (var existingReference in existingReferencesWithLoadErrors) { this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceRemoved(Id, existingReference.GetReference())); existingReference.Reset(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(Id, existingReference.GetReference())); } GetAnalyzerDependencyCheckingService().CheckForConflictsAsync(); } if (File.Exists(analyzerAssemblyFullPath)) { GetAnalyzerFileWatcherService().AddPath(analyzerAssemblyFullPath); GetAnalyzerFileWatcherService().ErrorIfAnalyzerAlreadyLoaded(Id, analyzerAssemblyFullPath); } else { analyzer.UpdatedOnDisk += OnAnalyzerChanged; } }
public void AddAnalyzerAssembly(string analyzerAssemblyFullPath) { if (_analyzers.ContainsKey(analyzerAssemblyFullPath)) { return; } var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, this.Language); _analyzers[analyzerAssemblyFullPath] = analyzer; if (_pushingChangesToWorkspaceHosts) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, analyzerReference)); } }
public void AddAnalyzerAssembly(string analyzerAssemblyFullPath) { if (_analyzers.ContainsKey(analyzerAssemblyFullPath)) { return; } var analyzerLoader = _visualStudioWorkspaceOpt.Services.GetRequiredService <IAnalyzerService>().GetLoader(); analyzerLoader.AddDependencyLocation(analyzerAssemblyFullPath); var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, analyzerLoader, this.Language); _analyzers[analyzerAssemblyFullPath] = analyzer; if (_pushingChangesToWorkspaceHosts) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, analyzerReference)); List <VisualStudioAnalyzer> existingReferencesWithLoadErrors = _analyzers.Values.Where(a => a.HasLoadErrors).ToList(); foreach (var existingReference in existingReferencesWithLoadErrors) { this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceRemoved(_id, existingReference.GetReference())); existingReference.Reset(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, existingReference.GetReference())); } GetAnalyzerDependencyCheckingService().CheckForConflictsAsync(); } if (File.Exists(analyzerAssemblyFullPath)) { GetAnalyzerFileWatcherService().AddPath(analyzerAssemblyFullPath); GetAnalyzerFileWatcherService().ErrorIfAnalyzerAlreadyLoaded(_id, analyzerAssemblyFullPath); } else { analyzer.UpdatedOnDisk += OnAnalyzerChanged; } }
public void AddAnalyzerAssembly(string analyzerAssemblyFullPath) { if (_analyzers.ContainsKey(analyzerAssemblyFullPath)) { return; } var fileChangeService = (IVsFileChangeEx)this.ServiceProvider.GetService(typeof(SVsFileChangeEx)); var analyzer = new VisualStudioAnalyzer(analyzerAssemblyFullPath, fileChangeService, this.HostDiagnosticUpdateSource, this.Id, this.Workspace, this.Language); _analyzers[analyzerAssemblyFullPath] = analyzer; if (_pushingChangesToWorkspaceHosts) { var analyzerReference = analyzer.GetReference(); this.ProjectTracker.NotifyWorkspaceHosts(host => host.OnAnalyzerReferenceAdded(_id, analyzerReference)); GetAnalyzerDependencyCheckingService().CheckForConflictsAsync(); } GetAnalyzerFileWatcherService().ErrorIfAnalyzerAlreadyLoaded(_id, analyzerAssemblyFullPath); }
public VisualStudioUnresolvedAnalyzerReference(string fullPath, VisualStudioAnalyzer visualStudioAnalyzer) { _underlying = new UnresolvedAnalyzerReference(fullPath); _visualStudioAnalyzer = visualStudioAnalyzer; }
public AnalyzerAssemblyLoaderThatEnsuresFileBeingWatched(VisualStudioAnalyzer analyzer) { _analyzer = analyzer; }
private bool TryGetAnalyzer(string analyzerAssemblyFullPath, out VisualStudioAnalyzer analyzer) { lock (_gate) { return _analyzers.TryGetValue(analyzerAssemblyFullPath, out analyzer); } }
private void AddOrUpdateAnalyzer(string analyzerAssemblyFullPath, VisualStudioAnalyzer analyzer) { lock (_gate) { _analyzers[analyzerAssemblyFullPath] = analyzer; } }