private void EmitProject(string eventType, DotNetProjectInformation information) { _emitter.Emit( eventType, new ProjectInformationResponse() { { "DotNetProject", information } }); }
public void Update(string projectDirectory, IEnumerable <ProjectContext> contexts, Action <ProjectId, ProjectContext> addAction, Action <ProjectId> removeAction) { _logger.LogDebug($"Updating project ${projectDirectory}"); bool added; var entry = GetOrAddEntry(projectDirectory, out added); // remove frameworks which don't exist after update var remove = entry.Frameworks.Except(contexts.Select(c => c.TargetFramework)); foreach (var each in remove) { var toRemove = entry.Get(each); removeAction(toRemove.Id); entry.Remove(each); } foreach (var context in contexts) { _logger.LogDebug($" For context {context.TargetFramework}"); ProjectState currentState = entry.Get(context.TargetFramework); if (currentState != null) { _logger.LogDebug($" Update exsiting {nameof(ProjectState)}."); currentState.ProjectContext = context; } else { _logger.LogDebug($" Add new {nameof(ProjectState)}."); var projectId = ProjectId.CreateNewId(); entry.Set(new ProjectState(projectId, context)); addAction(projectId, context); } } var projectInformation = new DotNetProjectInformation(entry); if (added) { EmitProject(EventTypes.ProjectChanged, projectInformation); } else { EmitProject(EventTypes.ProjectAdded, projectInformation); } }
/// <summary> /// Remove projects not in the give project set and execute the <paramref name="removeAction"/> on the removed project id. /// </summary> /// <param name="perservedProjects">Projects to perserve</param> /// <param name="removeAction"></param> public void RemoveExcept(IEnumerable <string> perservedProjects, Action <ProjectEntry> removeAction) { var removeList = new HashSet <string>(_projects.Keys, StringComparer.OrdinalIgnoreCase); removeList.ExceptWith(perservedProjects); foreach (var key in removeList) { var entry = _projects[key]; var projectInformation = new DotNetProjectInformation(entry); EmitProject(EventTypes.ProjectRemoved, projectInformation); removeAction(entry); _projects.Remove(key); } }
public Task <object> GetProjectModel(string path) { _logger.LogDebug($"GetProjectModel {path}"); var document = _omnisharpWorkspace.GetDocument(path); if (document == null) { return(Task.FromResult <object>(null)); } var projectPath = document.Project.FilePath; _logger.LogDebug($"GetProjectModel {path}=>{projectPath}"); var projectEntry = _projectStates.GetOrAddEntry(projectPath); var projectInformation = new DotNetProjectInformation(projectEntry); return(Task.FromResult <object>(projectInformation)); }