Get flat project list

This commit is contained in:
Matt Parker
2025-08-07 18:37:34 +10:00
parent 082a3a6bbf
commit d544f13b4b
4 changed files with 36 additions and 16 deletions

View File

@@ -10,6 +10,7 @@ public class SharpIdeSolutionModel : ISharpIdeNode
public required string FilePath { get; set; }
public required List<SharpIdeProjectModel> Projects { get; set; }
public required List<SharpIdeSolutionFolder> Folders { get; set; }
public required List<SharpIdeProjectModel> AllProjects { get; set; }
}
public class SharpIdeSolutionFolder : ISharpIdeNode
{

View File

@@ -12,39 +12,47 @@ public static class VsPersistenceMapper
var intermediateModel = await IntermediateMapper.GetIntermediateModel(solutionFilePath, cancellationToken);
var solutionName = Path.GetFileName(solutionFilePath);
var allProjects = new List<SharpIdeProjectModel>();
var solutionModel = new SharpIdeSolutionModel
{
Name = solutionName,
FilePath = solutionFilePath,
Projects = intermediateModel.Projects.Select(GetSharpIdeProjectModel).ToList(),
Projects = intermediateModel.Projects.Select(s => GetSharpIdeProjectModel(s, allProjects)).ToList(),
AllProjects = allProjects,
Folders = intermediateModel.SolutionFolders.Select(s => new SharpIdeSolutionFolder
{
Name = s.Model.Name,
Files = s.Files.Select(GetSharpIdeFile).ToList(),
Folders = s.Folders.Select(GetSharpIdeSolutionFolder).ToList(),
Projects = s.Projects.Select(GetSharpIdeProjectModel).ToList()
Folders = s.Folders.Select(x => GetSharpIdeSolutionFolder(x, allProjects)).ToList(),
Projects = s.Projects.Select(x => GetSharpIdeProjectModel(x, allProjects)).ToList()
}).ToList(),
};
timer.Stop();
Console.WriteLine($"Solution model fully created in {timer.ElapsedMilliseconds} ms");
return solutionModel;
}
private static SharpIdeProjectModel GetSharpIdeProjectModel(IntermediateProjectModel projectModel) => new SharpIdeProjectModel
private static SharpIdeProjectModel GetSharpIdeProjectModel(IntermediateProjectModel projectModel, List<SharpIdeProjectModel> allProjects)
{
Name = projectModel.Model.ActualDisplayName,
FilePath = projectModel.FullFilePath,
Files = TreeMapperV2.GetFiles(projectModel.FullFilePath),
Folders = TreeMapperV2.GetSubFolders(projectModel.FullFilePath),
MsBuildEvaluationProject = Test.GetProject(projectModel.FullFilePath)
};
var project = new SharpIdeProjectModel
{
Name = projectModel.Model.ActualDisplayName,
FilePath = projectModel.FullFilePath,
Files = TreeMapperV2.GetFiles(projectModel.FullFilePath),
Folders = TreeMapperV2.GetSubFolders(projectModel.FullFilePath),
MsBuildEvaluationProject = Test.GetProject(projectModel.FullFilePath)
};
allProjects.Add(project);
return project;
}
private static SharpIdeSolutionFolder GetSharpIdeSolutionFolder(IntermediateSlnFolderModel folderModel) => new SharpIdeSolutionFolder()
private static SharpIdeSolutionFolder GetSharpIdeSolutionFolder(IntermediateSlnFolderModel folderModel, List<SharpIdeProjectModel> allProjects) => new SharpIdeSolutionFolder()
{
Name = folderModel.Model.Name,
Files = folderModel.Files.Select(GetSharpIdeFile).ToList(),
Folders = folderModel.Folders.Select(GetSharpIdeSolutionFolder).ToList(),
Projects = folderModel.Projects.Select(GetSharpIdeProjectModel).ToList()
Folders = folderModel.Folders.Select(s => GetSharpIdeSolutionFolder(s, allProjects)).ToList(),
Projects = folderModel.Projects.Select(s => GetSharpIdeProjectModel(s, allProjects)).ToList()
};
private static SharpIdeFile GetSharpIdeFile(IntermediateSlnFolderFileModel fileModel) => new SharpIdeFile