@Nullable
  protected FileCoverageInfo collectBaseFileCoverage(@NotNull VirtualFile file,
                                                     @NotNull final SimpleCoverageAnnotator.CoverageAnnotatorRunner annotator,
                                                     @NotNull final ProjectData projectData,
                                                     @NotNull final Map<String, String> normalizedFiles2Files) {

    file = file.getCanonicalFile() != null ? file.getCanonicalFile() : file;
    assert file != null;

    final String filePath = normalizeFilePath(file.getPath());

    // process file
    final FileCoverageInfo info;

    final ClassData classData = getClassData(filePath, projectData, normalizedFiles2Files);
    if (classData != null) {
      // fill info from coverage data
      info = fileInfoForCoveredFile(classData);
    }
    else {
      // file wasn't mentioned in coverage information
      info = fillInfoForUncoveredFile(VfsUtilCore.virtualToIoFile(file));
    }

    if (info != null) {
      annotator.annotateFile(filePath, info);
    }
    return info;
  }
@Nullable
  protected FileCoverageInfo collectBaseFileCoverage(@NotNull VirtualFile file,
                                                     @NotNull final SimpleCoverageAnnotator.CoverageAnnotatorRunner annotator,
                                                     @NotNull final ProjectData projectData,
                                                     @NotNull final Map<String, String> normalizedFiles2Files)