private async Task <AdhocWorkspace> BuildAsync(SolutionSource solutionSource)
        {
            var loader = new ProjectLoader(_fileSystem);

            foreach (var project in solutionSource.Projects.ToArray())
            {
                if (!await loader.LoadAsync(project))
                {
                    solutionSource.Projects.Remove(project);
                }
            }

            var projects = solutionSource.Projects.ToList();

            while (projects.Count > 0)
            {
                var validProjects = projects
                                    .Where(p => p.ProjectReferences.All(_projectInfos.ContainsKey))
                                    .ToArray();

                foreach (var project in validProjects)
                {
                    var info = CreateProjectInfo(project);
                    _projectInfos.Add(project.Path, info);
                    projects.Remove(project);
                }
            }

            var workspace = new AdhocWorkspace();

            var solutionInfo = SolutionInfo.Create(SolutionId.CreateNewId(), VersionStamp.Default, solutionSource.FilePath, _projectInfos.Values);

            workspace.AddSolution(solutionInfo);
            return(workspace);
        }
        private SolutionSource ParseLines(string filePath, string[] lines)
        {
            var solution = new SolutionSource(filePath);
            
            foreach (var line in lines.Where(l => !string.IsNullOrWhiteSpace(l)))
            {
                if (line.StartsWith("Project"))
                {
                    if (_projectLineParser.TryParseLine(line, out var project))
                    {
                        solution.Projects.Add(project);
                    }
                }
            }

            return solution;
        }