docs: void processEvent(DelayQueue<Delayed> delayQueue) {
  
  
      // wait for key to be signaled
      WatchKey key;
      try {
        key = watcher.poll(250, TimeUnit.MILLISECONDS);
      } catch (InterruptedException | ClosedWatchServiceException x) {
        return;
      }
      
      if(key == null) {
        return;
      }
  
      Path dir = keys.get(key);
      if (dir == null) {
        return;
      }
  
      for (WatchEvent<?> event : key.pollEvents()) {
        WatchEvent.Kind<?> kind = event.kind();
  
        if (kind == OVERFLOW) {
          continue;
        }
  
        // Context for directory entry event is the file name of entry
        @SuppressWarnings("unchecked")
        WatchEvent<Path> ev = (WatchEvent<Path>) event;
        Path name = ev.context();
        Path child = dir.resolve(name);
  
        //
        if (ignore.contains(child)) {
          return;
        }
  
  
        if (!ignorePattern.stream().anyMatch(
            m -> child.getFileSystem().getPathMatcher(m).matches(child.getFileName()))) {
          delayQueue.add(new WatchDirDelay());
        }
  
  
        // if directory is created, and watching recursively, then
        // register it and its sub-directories
        if (kind == ENTRY_CREATE) {
          try {
            if (Files.isDirectory(child, NOFOLLOW_LINKS)) {
              registerAll(child);
            }
          } catch (IOException x) {
          }
        }
      }
  
  
      // reset key and remove from set if directory no longer accessible
      boolean valid = key.reset();
      if (!valid) {
        keys.remove(key);
  
        // all directories are inaccessible
        if (keys.isEmpty()) {
          return;
        }
      }
    }