public ConstructionPlanInfo CreatePlanFromAnalysis(AnalyzerResultInfo analyzerResultInfo) { var factoryFiles = new List <FactoryFileInfo>(); var knownDependencies = GetKnownDependencies(analyzerResultInfo); foreach (var projectInfo in analyzerResultInfo.ProjectInfos) { foreach (var documentInfo in projectInfo.DocumentInfos) { var factoryFile = FactoryFileInfo.Create(projectInfo.ProjectPath, documentInfo.FilePath, documentInfo.NameSpace); foreach (var moduleInfo in documentInfo.ModuleInfos) { foreach (var mappingInfo in moduleInfo.MappingInfos) { var factoryClassName = CreateFactoryClassName(mappingInfo.To.FullMetadataName); var moduleFullName = moduleInfo.FullName; var classToConstruct = mappingInfo.From.FullMetadataName; var returnType = mappingInfo.To.FullMetadataName; var mostSatisfiedConstructionInfo = GetMostSatisfiedConstructionInfo(mappingInfo, knownDependencies); var parameterFactoryAccessInfos = mostSatisfiedConstructionInfo.Parameters.Select( parameterInfo => { var(nameSpace, fullMetadataName) = knownDependencies.First(knownDependency => knownDependency.FullMetadataname == parameterInfo.FullMetadataName); return(FactoryAccessInfo.Create(nameSpace, CreateFactoryClassName(fullMetadataName))); }) .ToList(); var factory = FactoryInfo.Create(factoryClassName, moduleFullName, classToConstruct, returnType, parameterFactoryAccessInfos); factoryFile.AddFactory(factory); } } factoryFiles.Add(factoryFile); } } return(ConstructionPlanInfo.Create(factoryFiles)); }
public async Task <AnalyzerResultInfo> AnalyzeSolution(string solutionPath) { using (var workspace = MSBuildWorkspace.Create()) { workspace.WorkspaceFailed += (sender, eventArgs) => { Console.WriteLine(eventArgs.Diagnostic.Message); }; var solution = await workspace.OpenSolutionAsync(solutionPath); var projectInfos = new List <ProjectInfo>(); foreach (var project in solution.Projects) { var projectPath = project.FilePath; var documentInfos = await AnalyzeProject(project); projectInfos.Add(ProjectInfo.Create(projectPath, documentInfos)); } return(AnalyzerResultInfo.Create(projectInfos)); } }