From fd35911d9b9bba528e5ef355496f20e2e76f1b80 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 2 Jul 2019 10:51:58 +0200 Subject: [PATCH] Fixed object class methods resolution for executorBPP --- .../async/ExecutorBeanPostProcessor.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java index 2e001d3db..2e549697d 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessor.java @@ -22,6 +22,7 @@ import java.lang.reflect.Modifier; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; import org.aopalliance.aop.Advice; @@ -266,14 +267,16 @@ class ExecutorBeanPostProcessor implements BeanPostProcessor { } private static boolean anyFinalMethods(T object, Class iface) { - for (Method method : ReflectionUtils.getAllDeclaredMethods(iface)) { - Method m = ReflectionUtils.findMethod(object.getClass(), method.getName(), - method.getParameterTypes()); - if (m != null && Modifier.isFinal(m.getModifiers())) { - return true; - } - } - return false; + AtomicBoolean finalMethodPresent = new AtomicBoolean(); + ReflectionUtils.doWithMethods(iface, method -> finalMethodPresent.set(true), + method -> { + Method m = ReflectionUtils.findMethod(object.getClass(), + method.getName(), method.getParameterTypes()); + return m != null && + !ReflectionUtils.isObjectMethod(m) && + Modifier.isFinal(m.getModifiers()); + }); + return finalMethodPresent.get(); } }