private static <T> List<T> filter(List<T> elements, Predicate<? super T>... predicates) {
        return isEmpty(predicates) ? elements
                                   : elements.stream()
                                             .filter(Predicates.and(predicates)::apply)
                                             .collect(toImmutableList());
    }
get all methods of given type which are sorted from bottom class, up the super class hierarchy,
optionally filtered by predicates.
grpc/src/main/java/com/linecorp/armeria/server/grpc/InternalReflectionUtils.java