/**
   * Moves methods (as opposite to {@link #makeMethodsAbstract(java.util.Collection,
   * com.jetbrains.python.psi.PyClass...)})
   *
   * @param from source
   * @param methodsToMove what to move
   * @param to where
   * @return newly added methods
   */
  private static List<PyElement> moveMethods(
      final PyClass from, final Collection<PyFunction> methodsToMove, final PyClass... to) {
    final List<PyElement> result = new ArrayList<PyElement>();
    for (final PyClass destClass : to) {
      // We move copies here because there may be several destinations
      final List<PyFunction> copies = new ArrayList<PyFunction>(methodsToMove.size());
      for (final PyFunction element : methodsToMove) {
        final PyFunction newMethod = (PyFunction) element.copy();
        copies.add(newMethod);
      }

      result.addAll(PyClassRefactoringUtil.copyMethods(copies, destClass));
    }
    deleteElements(methodsToMove);

    PyClassRefactoringUtil.insertPassIfNeeded(from);
    return result;
  }