public async Task Parse_SetOneDependency_ResultOneDependency() { Parser parser = CreateCSharpParser(); ProjectSourceCodes sourceSodes = await SourceWithOneDependency(); var parsedResults = parser.Parse(new ProjectSourceCodes[] { sourceSodes }); var dependency = parsedResults.Take(); Assert.Single(dependency?.Dependencies); }
public async Task <ProjectSourceCodes> GetSourcesAsync(IRepositoryData repository) { var files = (await GetFiles(repository.Path)).Select(x => new ProjectSourceCodes.File { Name = x.Name, SourceCode = x.Data } ).ToArray(); var project = new ProjectSourceCodes { Files = files }; project.ProjectName = projectName; return(project); }
private ProjectDependency Parse(ProjectSourceCodes sourceCode) { var projectDependency = new ProjectDependency { ProjectName = sourceCode.ProjectName }; ProjectSourceCodes.File currentFile = null; try { var dependencies = projectDependency.Dependencies = new Dictionary <string, Dictionary <string, HashSet <string> > >(); var allFiles = sourceCode?.Files ?? new ProjectSourceCodes.File[] { }; foreach (var file in allFiles) { currentFile = file; var projectsModels = codeParser.ExtractDependencies(file.SourceCode); foreach (var projectModels in projectsModels) { var projectName = projectModels.Key; var models = projectModels.Value; if (dependencies.TryAdd(projectName, null)) { var files = new HashSet <string> { file.Name }; dependencies[projectName] = models.ToDictionary( x => x, x => files ); } else { var currentProject = dependencies[projectName]; foreach (var model in models) { if (currentProject.ContainsKey(model)) { currentProject[model].Add(file.Name); } else { var files = new HashSet <string> { file.Name }; currentProject.Add(model, files); } } } } } } catch (Exception e) { error.Status = CodeErrors.HasError; error.Class = $"{nameof(Parser)}"; error.Method = $"{nameof(Parse)}({nameof(ProjectSourceCodes)} sourceCode)"; logger.Error(e, $"Parsing error in file [{currentFile?.Name}]!"); } return(projectDependency); }