code: @NullSafe
    public static File[] listFiles(File directory, FileFilter fileFilter) {
      List<File> files = new ArrayList<>();
  
      for (File file : safeListFiles(directory, fileFilter)) {
        files.addAll(isDirectory(file) ? Arrays.asList(listFiles(file, fileFilter)) : Collections.singletonList(file));
      }
  
      return (files.isEmpty() ? NO_FILES : files.toArray(new File[files.size()]));
    }
docs: Lists all files in the given directory accepted by the {@link FileFilter}.  This method uses recursion to list
  all files in the given directory as well as any sub-directories of the given directory accepted by
  the {@link FileFilter}.
  
  @param directory the directory to search for files.
  @param fileFilter the {@link FileFilter} used to filter and match files.
  @return an array of all files in the given directory and any sub-directories of the given directory accepted by
  the {@link FileFilter}.
  @see #safeListFiles(File, FileFilter)
  @see java.io.FileFilter
  @see java.io.File