Como encontrar os índices das linhas visíveis em um TableView no JavaFX 9

Como obtenho os índices das linhas visíveis em um TableView no JavaFX 9? No JavaFX 8, posso fazer o seguinte:

  // --- The offending imports in Java 9
  // import com.sun.javafx.scene.control.skin.TableViewSkin;
  // import com.sun.javafx.scene.control.skin.VirtualFlow;

  /**
   * This is a total hack. We need it as scrollTo jumps the selected
   * row to the top of the table. Jarring if the row is already 
   * visible. As a workaround, we only scroll if the row isn't already
   * visible
   *
   * @return A 2 element ray with the start and end index of visible rows
   */
  public int[] getVisibleRows() {
      TableView<?> tableView = getTableView();
      TableViewSkin<?> skin = (TableViewSkin<?>) tableView.getSkin();
      if (skin == null) return new int[] {0, 0};
      VirtualFlow<?> flow = (VirtualFlow<?>) skin.getChildren().get(1);
      int idxFirst;
      int idxLast;
      if (flow != null &&
              flow.getFirstVisibleCellWithinViewPort() != null &&
              flow.getLastVisibleCellWithinViewPort() != null) {
          idxFirst = flow.getFirstVisibleCellWithinViewPort().getIndex();
          if (idxFirst > tableView.getItems().size()) {
              idxFirst = tableView.getItems().size() - 1;
          }
          idxLast = flow.getLastVisibleCellWithinViewPort().getIndex();
          if (idxLast > tableView.getItems().size()) {
              idxLast = tableView.getItems().size() - 1;
          }
      }
      else {
          idxFirst = 0;
          idxLast = 0;
      }
      return new int[]{idxFirst, idxLast};
  }

No Java 9, como parte da modularização, a equipe do JDK está ocultando as APIs que não deveriam ser públicas (por exemplo, todos os pacotes que começam com 'com.sun'). Se eu tentar compilar isso no Java 9, recebo erros de:

  [...] cannot find symbol
  [ERROR]   symbol:   class TableViewSkin
  [ERROR]   location: package com.sun.javafx.scene.control.skin

  [...] cannot find symbol
  [ERROR]   symbol:   class VirtualFlow
  [ERROR]   location: package com.sun.javafx.scene.control.skin

Existe alguma maneira oficial de obter as linhas visíveis em um TableView? Alguma idéia sobre outra solução melhor para isso?

ATUALIZADO: Solução baseada na solução de @ user4712734

TableViewExt<?> tableViewExt = new TableViewExt<>(tableView);

public int[] getVisibleRows() {
    return new int[]{ tableViewExt.getFirstVisibleIndex(), 
                      tableViewExt.getLastVisibleIndex()};
}

Código para TableViewExt

questionAnswers(2)

yourAnswerToTheQuestion