@NotNull
  VcsCommitStyle getStyle(int row, int column, boolean hasFocus, boolean selected, boolean hovered) {
    VcsCommitStyle baseStyle = getBaseStyle(row, column, hasFocus, selected);

    VisibleGraph<Integer> visibleGraph = getVisibleGraph();
    if (row < 0 || row >= visibleGraph.getVisibleCommitCount()) {
      LOG.error("Visible graph has " + visibleGraph.getVisibleCommitCount() + " commits, yet we want row " + row);
      return baseStyle;
    }

    RowInfo<Integer> rowInfo = visibleGraph.getRowInfo(row);
    VcsCommitStyle style = createStyle(rowInfo.getRowType() == RowType.UNMATCHED ? JBColor.GRAY : baseStyle.getForeground(),
                                       baseStyle.getBackground(), VcsLogHighlighter.TextStyle.NORMAL);

    int commitId = rowInfo.getCommit();
    VcsShortCommitDetails details = myLogData.getCommitMetadataCache().getCachedData(commitId);
    if (details != null) {
      int columnModelIndex = convertColumnIndexToModel(column);
      List<VcsCommitStyle> styles = ContainerUtil.map(myHighlighters, highlighter -> {
        try {
          return highlighter.getStyle(commitId, details, columnModelIndex, selected);
        }
        catch (ProcessCanceledException e) {
          return VcsCommitStyle.DEFAULT;
        }
        catch (Throwable t) {
          LOG.error("Exception while getting style from highlighter " + highlighter, t);
          return VcsCommitStyle.DEFAULT;
        }
      });
      style = VcsCommitStyleFactory.combine(ContainerUtil.append(styles, style));
    }

    if (!selected && hovered) {
      Color background = Objects.requireNonNull(style.getBackground());
      VcsCommitStyle lightSelectionBgStyle = VcsCommitStyleFactory.background(getHoveredBackgroundColor(background));
      style = VcsCommitStyleFactory.combine(Arrays.asList(lightSelectionBgStyle, style));
    }

    return style;
  }
@NotNull
  VcsCommitStyle getStyle(int row, int column, boolean hasFocus, boolean selected, boolean hovered)