Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }