code: public static ISynchronizationPoint<IOException> rename(File source, File destination, byte priority) {
  		// TODO we should use the roots instead of drive
  		TaskManager t1 = Threading.getDrivesTaskManager().getTaskManager(source);
  		TaskManager t2 = Threading.getDrivesTaskManager().getTaskManager(destination);
  		if (t1 == t2)
  			return new RenameFileTask(t1, source, destination, priority).start().getOutput();
  		AsyncWork<Long, IOException> copy = IOUtil.copy(source, destination, priority, source.length(), null, 0, null);
  		SynchronizationPoint<IOException> result = new SynchronizationPoint<>();
  		copy.listenInline(() -> {
  			new RemoveFileTask(source, priority).start().getOutput().listenInline(result);
  		}, result);
  		return result;
  	}
docs: Rename a file.
  It may do a copy then a delete, or a simple rename, depending if the source and destination are
  on the same drive or not.