private static @Nullable Field processInterfaces(Class<?> @NotNull [] interfaces,
                                                   @NotNull Set<? super Class<?>> visited,
                                                   @NotNull Predicate<? super Field> checker) {
    for (Class<?> anInterface : interfaces) {
      if (!visited.add(anInterface)) {
        continue;
      }

      for (Field field : anInterface.getDeclaredFields()) {
        if (checker.test(field)) {
          field.setAccessible(true);
          return field;
        }
      }

      Field field = processInterfaces(anInterface.getInterfaces(), visited, checker);
      if (field != null) {
        return field;
      }
    }
    return null;
  }
private static @Nullable Field processInterfaces(Class<?> @NotNull [] interfaces,
                                                   @NotNull Set<? super Class<?>> visited,
                                                   @NotNull Predicate<? super Field> checker)