protected void collectLinesInFile(@NotNull CoverageSuitesBundle suite,
                                    @NotNull PsiFile psiFile,
                                    Module module,
                                    Int2IntMap oldToNewLineMapping,
                                    @NotNull MarkupModel markupModel,
                                    @NotNull TreeMap<Integer, LineData> executableLines,
                                    @NotNull TreeMap<Integer, String> classNames) {
    var editor = myEditor;
    var engine = suite.getCoverageEngine();
    var data = suite.getCoverageData();
    if (data == null) {
      coverageDataNotFound(suite);
      return;
    }
    class HighlightersCollector {
      private void collect(File outputFile, final String qualifiedName) {
        final ClassData fileData = data.getClassData(qualifiedName);
        if (fileData != null) {
          final Object[] lines = fileData.getLines();
          if (lines != null) {
            final Object[] postProcessedLines = engine.postProcessExecutableLines(lines, editor);
            for (Object o : postProcessedLines) {
              if (o instanceof LineData lineData) {
                if (engine.isGeneratedCode(myProject, qualifiedName, lineData)) continue;
                final int line = (lineData).getLineNumber() - 1;
                final int lineNumberInCurrent;
                if (oldToNewLineMapping != null) {
                  if (!oldToNewLineMapping.containsKey(line)) continue;
                  lineNumberInCurrent = oldToNewLineMapping.get(line);
                }
                else {
                  // use id mapping
                  lineNumberInCurrent = line;
                }
                executableLines.put(line, lineData);
                classNames.put(line, qualifiedName);

                addHighlighter(markupModel, executableLines, suite, line, lineNumberInCurrent, qualifiedName);
              }
            }
          }
        }
        else if (outputFile != null && !CoverageDataManager.getInstance(myProject).isSubCoverageActive() &&
                 engine.includeUntouchedFileInCoverage(qualifiedName, outputFile, psiFile, suite)) {
          highlightNonCoveredFile(outputFile, markupModel, executableLines, suite, oldToNewLineMapping);
        }
      }
    }

    final HighlightersCollector collector = new HighlightersCollector();
    final Set<File> outputFiles = engine.getCorrespondingOutputFiles(psiFile, module, suite);
    if (!outputFiles.isEmpty()) {
      for (File outputFile : outputFiles) {
        final String qualifiedName = engine.getQualifiedName(outputFile, psiFile);
        if (qualifiedName != null) {
          collector.collect(outputFile, qualifiedName);
        }
      }
    }
    else {
      //check non-compilable classes which present in ProjectData
      for (String qName : engine.getQualifiedNames(psiFile)) {
        collector.collect(null, qName);
      }
    }
  }
protected void collectLinesInFile(@NotNull CoverageSuitesBundle suite,
                                    @NotNull PsiFile psiFile,
                                    Module module,
                                    Int2IntMap oldToNewLineMapping,
                                    @NotNull MarkupModel markupModel,
                                    @NotNull TreeMap<Integer, LineData> executableLines,
                                    @NotNull TreeMap<Integer, String> classNames)