/** * Invoke {@link Method} by resolving the * * @param method * @param args * @return * @throws Throwable */ public Object invoke(Method method, Object[] args) throws Throwable { RepositoryFragment<?> fragment = fragmentCache.computeIfAbsent(method, key -> { return stream().filter(it -> it.hasMethod(key)) // .filter(it -> it.getImplementation().isPresent()) // .findFirst() .orElseThrow(() -> new IllegalArgumentException(String.format("No fragment found for method %s", key))); }); Object target = fragment.getImplementation().orElseThrow( () -> new IllegalArgumentException(String.format("No implementation found for method %s", method))); return method.invoke(target, args); }