@Override
  public void moveFile(Object requestor, @NotNull VirtualFile file, @NotNull VirtualFile newParent) throws IOException {
    FSItem fsItem = convertAndCheck(file);
    FSItem newParentItem = convertAndCheck(newParent);
    FSDir oldParentItem = convertAndCheckParent(file);
    if (!newParentItem.isDirectory()) throw new IOException("Target is not a directory: " + file.getPath());
    FSDir newDir = (FSDir)newParentItem;
    String name = file.getName();
    if (newDir.findChild(name) != null) throw new IOException("Directory already contains a file named " + name);
    oldParentItem.removeChild(name, file.getParent());
    newDir.addChild(name, fsItem);
    clearFsItemCache(file);
  }
@Override
  public void moveFile(Object requestor, @NotNull VirtualFile file, @NotNull VirtualFile newParent)