From 5f3abf6e4dc40b8ac292327e7c8ad6c84f34c84f Mon Sep 17 00:00:00 2001 From: Martin Panzer Date: Fri, 14 Feb 2025 19:35:29 +0100 Subject: [PATCH] Only check filters once for calls to getResourceMethod Before, for each resource method, no matter if rest-client or rest-server, each filter was checked if it called ResourceInfo#getResourceMethod. This can however be cached, since the set of filters does not change. (cherry picked from commit 9a3fd380848603192939373138260bf5b4c03905) --- .../server/deployment/ResteasyReactiveProcessor.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment/ResteasyReactiveProcessor.java b/extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment/ResteasyReactiveProcessor.java index 84deabd149d05..44da922edd83b 100644 --- a/extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment/ResteasyReactiveProcessor.java +++ b/extensions/resteasy-reactive/rest/deployment/src/main/java/io/quarkus/resteasy/reactive/server/deployment/ResteasyReactiveProcessor.java @@ -562,6 +562,8 @@ public void setupEndpoints(ApplicationIndexBuildItem applicationIndexBuildItem, classLevelExceptionMappers.isPresent() ? classLevelExceptionMappers.get().getMappers() : Collections.emptyMap()) .setResourceMethodCallback(new Consumer<>() { + Boolean filtersAccessResourceMethod; + @Override public void accept(EndpointIndexer.ResourceMethodCallbackEntry entry) { MethodInfo method = entry.getMethodInfo(); @@ -588,6 +590,11 @@ public void accept(EndpointIndexer.ResourceMethodCallbackEntry entry) { .build()); } + if (filtersAccessResourceMethod == null) { + filtersAccessResourceMethod = filtersAccessResourceMethod( + resourceInterceptorsBuildItem.getResourceInterceptors()); + } + boolean paramsRequireReflection = false; for (short i = 0; i < method.parametersCount(); i++) { Type parameterType = method.parameterType(i); @@ -611,12 +618,12 @@ public void accept(EndpointIndexer.ResourceMethodCallbackEntry entry) { } } - if (paramsRequireReflection || + if (filtersAccessResourceMethod || + paramsRequireReflection || MULTI.toString().equals(entry.getResourceMethod().getSimpleReturnType()) || REST_MULTI.toString().equals(entry.getResourceMethod().getSimpleReturnType()) || PUBLISHER.toString().equals(entry.getResourceMethod().getSimpleReturnType()) || LEGACY_PUBLISHER.toString().equals(entry.getResourceMethod().getSimpleReturnType()) || - filtersAccessResourceMethod(resourceInterceptorsBuildItem.getResourceInterceptors()) || entry.additionalRegisterClassForReflectionCheck()) { minimallyRegisterResourceClassForReflection(entry, reflectiveClassBuildItemBuildProducer); }