private static ColumnInfo[] createTreeColumns(DualViewColumnInfo[] columns) {
    Collection<ColumnInfo<?, ?>> result = new ArrayList<>();

    ColumnInfo firstColumn = columns[0];
    ColumnInfo firstTreeColumn = new ColumnInfo(firstColumn.getName()) {
      @Override
      public Object valueOf(Object object) {
        return firstColumn.valueOf(object);
      }

      @Override
      public Class getColumnClass() {
        return TreeTableModel.class;
      }

      @Override
      public boolean isCellEditable(Object o) {
        return true;
      }
    };
    result.add(firstTreeColumn);
    for (int i = 1; i < columns.length; i++) {
      DualViewColumnInfo column = columns[i];
      if (column.shouldBeShownIsTheTree()) result.add(column);
    }

    return result.toArray(ColumnInfo.EMPTY_ARRAY);
  }
private static ColumnInfo[] createTreeColumns(DualViewColumnInfo[] columns)