@Override
      public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        int modelRow = myTable.convertRowIndexToModel(row);
        Pair<Object, T> pair = myModel.data.get(modelRow);
        Object target = pair.first;
        editorValue = pair.second; // (T)value
        if (!canEditTarget(target, editorValue)) return null;

        JPanel panel = createActionPanel(target, new Value<>() {
          @Override
          public T get() {
            return editorValue;
          }

          @Override
          public void set(T value) {
            editorValue = adjustChosenValue(target, value);
          }

          @Override
          public void commit() {
            TableUtil.stopEditing(myTable);
            selectRows(new int[]{modelRow}, true);
            if (Comparing.equal(editorValue, pair.second)) {
              // do nothing
            }
            else {
              int ret = clearSubdirectoriesOnDemandOrCancel(false, target);
              if (ret == Messages.CANCEL) {
                myModel.setValueAt(value, modelRow, column);
              }
              selectRows(new int[]{modelRow}, true);
            }          }
        }, true);
        return panel;
      }
@Override
      public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)