void (@NotNull File absoluteRoot, @NotNull File root, @NotNull Pattern pattern, @NotNull List<? super File> files) { File[] dirs = root.listFiles(); if (dirs == null) return; for (File dir : dirs) { if (dir.isFile()) { String relativePath = getRelativePath(absoluteRoot, dir); if (relativePath != null) { String path = toSystemIndependentName(relativePath); if (pattern.matcher(path).matches()) { files.add(dir); } } } else { collectMatchedFiles(absoluteRoot, dir, pattern, files); } } }