@Override
  protected void doRefactorImpl(final @NotNull Project project,
                                final @NotNull PyClass classUnderRefactoring,
                                final @NotNull PyMemberInfoStorage infoStorage,
                                @NotNull Editor editor) {

    //TODO: Move to presenter?
    final Query<PyClass> query = PyClassInheritorsSearch.search(classUnderRefactoring, false);
    if (query.findFirst() == null) {
      final String message = RefactoringBundle.message("class.0.does.not.have.inheritors", classUnderRefactoring.getName());
      CommonRefactoringUtil.showErrorHint(project, editor, message, getTitle(), getHelpId());
      return;
    }

    ViewPresenterUtils
      .linkViewWithPresenterAndLaunch(PyPushDownPresenter.class, PyPushDownView.class, new Creator<>() {
        @Override
        public @NotNull PyPushDownPresenter createPresenter(@NotNull PyPushDownView view) {
          return new PyPushDownPresenterImpl(project, view, classUnderRefactoring, infoStorage);
        }

        @Override
        public @NotNull PyPushDownView createView(@NotNull PyPushDownPresenter presenter) {
          return new PyPushDownViewSwingImpl(classUnderRefactoring, project, presenter);
        }
      });
  }
@Override
  protected void doRefactorImpl(final @NotNull Project project,
                                final @NotNull PyClass classUnderRefactoring,
                                final @NotNull PyMemberInfoStorage infoStorage,
                                @NotNull Editor editor)