コード例 #1
0
        private List <Node> getValidPathNodes(AppCode.Repository.Session s, List <File> generetedFilesSession)
        {
            List <Node> nodes = new List <Node>();

            List <PathNode> pathNodes = s.PathNodes.Where(pn => pn.Origin != "Trace").OrderBy(pn => pn.Created).ToList();

            foreach (var item in pathNodes)
            {
                AppCode.Repository.Event eventFounded = s.Events.Where(e => e.Id == item.Event_Id).FirstOrDefault();

                if (eventFounded == null)
                {
                    continue;
                }

                string fileId = generetedFilesSession
                                .Where(gf => gf.filePath.ToLower() == eventFounded.CodeFilePath.ToLower())
                                .Select(gf => gf.fileId).FirstOrDefault();

                if (String.IsNullOrWhiteSpace(fileId))
                {
                    continue;
                }

                nodes.Add(new Node
                {
                    fileId    = fileId,
                    line      = eventFounded.LineNumber ?? 0,
                    eventId   = item.Event_Id.ToString(),
                    evaluated = false
                });
            }

            return(nodes);
        }
コード例 #2
0
        private List <File> getFiles(AppCode.Repository.Session s, List <CodeFile> listCodeFiles, List <File> generetedFiles, List <Group> generatedGroups)
        {
            List <File> files = new List <File>();

            for (int i = 0; i < listCodeFiles.Count; i++)
            {
                CodeFile c = listCodeFiles[i];

                File file = new File();
                file.originalId = c.Id.ToString();
                file.fileId     = i.ToString();
                file.fileName   = System.IO.Path.GetFileName(c.Path);
                file.filePath   = c.Path;
                file.sessionId  = s.Id.ToString();
                file.lines      = Regex.Matches(ProcessUnzipString(s.Description, c.Content), Environment.NewLine, RegexOptions.Multiline).Count;

                file.events = s.Events
                              .Where(e => e.CodeFilePath.ToLower() == c.Path.ToLower())
                              .Where(e => e.EventKind == "StepInto" || e.EventKind == "StepOver" || e.EventKind == "BreakpointHitted")
                              .Where(e => s.PathNodes.Any(pn => pn.Event_Id == e.Id && pn.Origin != "Trace"))
                              .OrderBy(e => e.Created)
                              .Select(e => new Event
                {
                    line    = e.LineNumber ?? 0,
                    eventId = e.Id.ToString(),
                    data    = new JavaScriptSerializer().Serialize(e)
                })
                              .ToList();

                file.breakpoints = s.Breakpoints
                                   .Where(b => b.CodeFilePath.ToLower() == c.Path.ToLower())
                                   .Select(b => new Breakpoint
                {
                    line = b.LineNumber ?? 0,
                    data = new JavaScriptSerializer().Serialize(b)
                }).ToList();

                File alreadyExistFile = generetedFiles
                                        .Where(f => f.filePath.ToLower() == c.Path.ToLower())
                                        .FirstOrDefault();

                if (alreadyExistFile != null)
                {
                    file.groupId    = alreadyExistFile.groupId;
                    file.groupIndex = alreadyExistFile.groupIndex;
                }
                else
                {
                    Group group = generatedGroups
                                  .Where(g => g.path.ToLower() == System.IO.Path.GetDirectoryName(c.Path).ToLower())
                                  .FirstOrDefault();

                    if (group == null)
                    {
                        continue;
                    }

                    file.groupId = group.groupId;

                    int total = generetedFiles
                                .Where(f => f.groupId == file.groupId)
                                .GroupBy(f => f.sessionId)
                                .Select(gouped => new { total = gouped.Count() })
                                .OrderByDescending(o => o.total)
                                .Select(o => o.total)
                                .FirstOrDefault();

                    file.groupIndex = total;

                    if (file.groupIndex > group.maxIndexWidthQuantity)
                    {
                        group.maxIndexWidthQuantity = file.groupIndex;
                    }
                }

                files.Add(file);
                generetedFiles.Add(file);
            }

            return(files);
        }
コード例 #3
0
        private List <Session> getSessions(List <AppCode.Repository.Session> listSession, List <Group> generatedGroups)
        {
            List <Session> sessions = new List <Session>();

            for (int i = 0; i < listSession.Count; i++)
            {
                AppCode.Repository.Session s = listSession[i];

                Session session = new Session();

                session.sessionId = s.Id.ToString();
                session.name      = String.Format("{0:yyyy-MM-ddTHH:mm:ssZ}", s.Started) + "  " + s.Description;
                session.files     = getFiles(s, s.CodeFiles
                                             .GroupBy(c => c.Path.ToLower())
                                             .Select(c => c.FirstOrDefault())
                                             .OrderBy(c => c.Created)
                                             .ToList(), sessions.SelectMany(p => p.files).ToList(), generatedGroups);
                session.pathnodes = getValidPathNodes(s, session.files);

                foreach (var node in session.pathnodes)
                {
                    File file = session.files.Where(f => f.fileId == node.fileId).First();
                    file.nodePoints++;

                    node.evaluated = true;

                    foreach (var fileItem in session.files.Where(f => f.fileId != file.fileId))
                    {
                        if (fileItem.nodePoints == 0)
                        {
                            fileItem.nodeSpaceBefore++;
                            continue;
                        }

                        int remainNodes = session.pathnodes.Where(n => fileItem.fileId == n.fileId && n.evaluated == false).Count();

                        if (remainNodes > 0)
                        {
                            fileItem.nodeSpaceAfter++;
                        }
                    }
                }

                foreach (var itemFile in session.files)
                {
                    foreach (var itemEvent in itemFile.events)
                    {
                        itemEvent.positionIndex = session.pathnodes
                                                  .Select((pn, index) => new { index = index, eventId = pn.eventId })
                                                  .Where(pn => pn.eventId == itemEvent.eventId)
                                                  .Select(pn => pn.index)
                                                  .FirstOrDefault();
                    }

                    int notHittedCount = 0;
                    foreach (var itemBreakpoint in itemFile.breakpoints)
                    {
                        Event eventInFile = itemFile.events
                                            .Where(e => e.line == itemBreakpoint.line)
                                            .FirstOrDefault();

                        if (eventInFile == null)
                        {
                            notHittedCount--;
                        }

                        itemBreakpoint.positionIndex = eventInFile == null ? notHittedCount : eventInFile.positionIndex;
                    }

                    //--Problem of Continue has no breakpoint associeted on graph
                    //setar no evento que este tem breakpoint associado
                    var eventsWithOutBreakpoints = itemFile.events
                                                   .Where(e => itemFile.breakpoints.Any(b => b.line == e.line && b.positionIndex != e.positionIndex))
                                                   .Select(e => { return(e); }).ToList();

                    foreach (var e in eventsWithOutBreakpoints)
                    {
                        Breakpoint breakpoint = itemFile.breakpoints.Where(b => b.line == e.line).First();
                        itemFile.breakpoints.Add(new Breakpoint()
                        {
                            data          = breakpoint.data,
                            line          = breakpoint.line,
                            positionIndex = e.positionIndex
                        });
                    }
                }

                sessions.Add(session);
            }

            return(sessions);
        }