public static ALProject Discover(string wkspcePaths)
        {
            var paths = ALProjectCollector.GetProjectInfo(wkspcePaths).FullName;

            var fileContent = File.ReadAllText(paths);
            var result      = JsonConvert.DeserializeObject <ALProject>(fileContent);

            result.FilePath = wkspcePaths;

            return(result);
        }
        public List <CollectorItem> DiscoverLocalFile(string itemPath, ALProject project = null)
        {
            if (project is null)
            {
                project = ALProjectCollector.Discover(itemPath);
            }

            var collectorItems = new List <CollectorItem>();
            var alobjects      = ALParser.Read(itemPath);

            foreach (var alobject in alobjects)
            {
                if (alobject.Type == ALObjectType.codeunit)
                {
                    bool isTestCodeunit = alobject
                                          .Properties
                                          .Any(p => p.Name.ToLower() == "subtype" && p.Value.ToLower() == "test");

                    if (isTestCodeunit)
                    {
                        var testCodeunit = ALParser.Read <ALTestCodeunitReader>(itemPath).FirstOrDefault();

                        collectorItems.Add(new CollectorItem
                        {
                            TypeId      = alobject.Type,
                            Id          = alobject.Id,
                            Type        = $"{alobject.Type}",
                            Publisher   = project.publisher,
                            Version     = project.version.ToString(),
                            Symbol      = testCodeunit,
                            FsPath      = itemPath,
                            Name        = alobject.Name,
                            Application = project.name,
                            IsLocal     = true,
                            ProjectPath = project.FilePath,
                            SymbolData  = new SymbolData
                            {
                                Index = alobject.Id,
                                Path  = itemPath,
                                Type  = alobject.Type,
                                Name  = alobject.Name
                            }
                        });
                    }
                }
            }

            //alobjects.ToList().Clear();

            return(collectorItems);
        }
        public static IEnumerable <ALProject> Discover(List <string> wkspcePaths)
        {
            var paths = ALProjectCollector.GetProjectInfo(wkspcePaths).Select(s => s.FullName);

            var projects = paths.Select(s =>
            {
                var fileContent = File.ReadAllText(s);
                var result      = JsonConvert.DeserializeObject <ALProject>(fileContent);
                result.FilePath = s;
                return(result);
            });

            return(projects.ToList());
        }
        public async Task <IALObject> GetSymbolObject(SymbolData data, bool mapSourcePath = true)
        {
            FileInfo info = new FileInfo(data.Path);

            if (info.Extension == ".al")
            {
                var alobjects = ALParser.Read(data.Path);
                var alobject  = alobjects.FirstOrDefault(f => f.Type == data.Type && f.Name == data.Name);
                var project   = ALProjectCollector.Discover(data.Path);

                return(alobject);
            }

            var symbols = await GetSymbolReference(data.Path, mapSourcePath);

            var result = symbols.Symbols.Where(w => w.Type == data.Type && w.Name == data.Name).FirstOrDefault();

            return(await Task.FromResult(result));
        }
        public async Task <List <CollectorItem> > DiscoverLocalFiles(List <string> wkspcePaths)
        {
            var projects = ALProjectCollector.Discover(wkspcePaths);
            var srcDirs  = projects.Select(s => Directory.GetParent(s.FilePath).FullName).ToArray();
            var result   = new List <CollectorItem>();
            var tasks    = new List <Task <List <CollectorItem> > >();

            foreach (var project in projects)
            {
                var path         = Directory.GetParent(project.FilePath).FullName;
                var localSymbols = Directory
                                   .GetDirectories(path)
                                   .SelectMany(s => Directory.GetFiles(s, "*.al", SearchOption.AllDirectories))
                                   .Select(item => Task.Run(() => DiscoverLocalFile(item, project)));

                tasks.AddRange(localSymbols);
            }

            var subResult = await Task.WhenAll(tasks);

            result = subResult.SelectMany(s => s).ToList();

            return(result);
        }