public static ProjectData convertToProjectData(@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;
  }
public static ProjectData convertToProjectData(@NotNull LcovCoverageReport report,
                                                 @NotNull Function<? super String, String> toLocalPathConvertor)