public void beforeChildMovement(@NotNull final PsiTreeChangeEvent event) {
      final PsiElement oldParent = event.getOldParent();
      final PsiElement newParent = event.getNewParent();
      final PsiElement child = event.getChild();
      if (newParent instanceof PsiDirectory) {
        final Module module = ModuleUtil.findModuleForPsiElement(newParent);
        if (module == null) return;
        AbstractUrl childUrl = null;
        if (child instanceof PsiFile) {
          childUrl =
              new PsiFileUrl(
                  ((PsiDirectory) newParent).getVirtualFile().getUrl()
                      + "/"
                      + ((PsiFile) child).getName());
        } else if (child instanceof PsiDirectory) {
          childUrl =
              new DirectoryUrl(
                  ((PsiDirectory) newParent).getVirtualFile().getUrl()
                      + "/"
                      + ((PsiDirectory) child).getName(),
                  module.getName());
        }

        for (String listName : myName2FavoritesRoots.keySet()) {
          final List<TreeItem<Pair<AbstractUrl, String>>> roots =
              myName2FavoritesRoots.get(listName);
          final AbstractUrl finalChildUrl = childUrl;
          iterateTreeItems(
              roots,
              new Consumer<TreeItem<Pair<AbstractUrl, String>>>() {
                @Override
                public void consume(TreeItem<Pair<AbstractUrl, String>> item) {
                  final Pair<AbstractUrl, String> root = item.getData();
                  final Object[] path = root.first.createPath(myProject);
                  if (path == null || path.length < 1 || path[0] == null) {
                    return;
                  }
                  final Object element = path[path.length - 1];
                  if (element == child && finalChildUrl != null) {
                    item.setData(Pair.create(finalChildUrl, root.second));
                  } else {
                    if (element == oldParent) {
                      item.setData(
                          Pair.create(root.first.createUrlByElement(newParent), root.second));
                    }
                  }
                }
              });
        }
      }
    }