@Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
          try {
            if (callback != null) callback.beforeDeleting(dir);
            doDelete(dir);
            return FileVisitResult.CONTINUE;
          }
          catch (IOException e) {
            if (exc != null) {
              exc.addSuppressed(e);
              throw exc;
            }
            else {
              throw e;
            }
          }
        }
@Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc)