ProjectData (@NotNull LcovCoverageReport report, @NotNull Function<? super String, String> toLocalPathConvertor) { ProjectData projectData = new ProjectData(); for (Map.Entry<String, List<LcovCoverageReport.LineHits>> entry : report.getInfo().entrySet()) { String filePath = entry.getKey(); String localPath = toLocalPathConvertor.apply(filePath); ClassData classData = projectData.getOrCreateClassData(normalizeFilePath(localPath)); int max = 0; List<LcovCoverageReport.LineHits> lineHitsList = entry.getValue(); if (!lineHitsList.isEmpty()) { LcovCoverageReport.LineHits lastLineHits = lineHitsList.get(lineHitsList.size() - 1); max = lastLineHits.getLineNumber(); } LineData[] lines = new LineData[max + 1]; for (LcovCoverageReport.LineHits lineHits : lineHitsList) { LineData lineData = new LineData(lineHits.getLineNumber(), lineHits.getFunctionName()); lineData.setHits(lineHits.getHits()); lines[lineHits.getLineNumber()] = lineData; } classData.setLines(lines); } return projectData; }