private @NotNull <R extends BuildRootDescriptor> List<R> filterDescriptorsByFile(@NotNull List<R> descriptors, File file, int parentsToCheck) {
    List<R> result = descriptors;
    for (int i = 0; i < descriptors.size(); i++) {
      R descriptor = descriptors.get(i);
      if (isFileAccepted(file, descriptor) && isParentDirectoriesAccepted(file, parentsToCheck, descriptor)) {
        if (result != descriptors) {
          result.add(descriptor);
        }
      }
      else if (result == descriptors) {
        result = new ArrayList<>(descriptors.size() - 1);
        for (int j = 0; j < i; j++) {
          result.add(descriptors.get(j));
        }
      }
    }
    return result;
  }
private @NotNull <R extends BuildRootDescriptor> List<R> filterDescriptorsByFile(@NotNull List<R> descriptors, File file, int parentsToCheck)