diff --git a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/ApacheMonitorFilterInstrumentation.java b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/ApacheMonitorFilterInstrumentation.java index 96c188d370..315eda1c0e 100644 --- a/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/ApacheMonitorFilterInstrumentation.java +++ b/apm-agent-plugins/apm-dubbo-plugin/src/main/java/co/elastic/apm/agent/dubbo/ApacheMonitorFilterInstrumentation.java @@ -33,6 +33,7 @@ import org.apache.dubbo.rpc.Invoker; import static net.bytebuddy.matcher.ElementMatchers.declaresMethod; +import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; @@ -57,7 +58,7 @@ public ElementMatcher getMethodMatcher() { .and(takesArgument(0, named("org.apache.dubbo.rpc.Invoker"))) .and(takesArgument(1, named("org.apache.dubbo.rpc.Invocation"))) // makes sure we only instrument Dubbo 2.7.3+ which introduces this method - .and(returns(named("org.apache.dubbo.rpc.Result") + .and(returns(hasSuperType(named("org.apache.dubbo.rpc.Result")) .and(declaresMethod(named("whenCompleteWithContext") .and(takesArgument(0, named("java.util.function.BiConsumer"))))))); } diff --git a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java index 77851d4839..162bfca6b2 100644 --- a/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java +++ b/apm-agent-plugins/apm-java-concurrent-plugin/src/main/java/co/elastic/apm/agent/concurrent/ExecutorInstrumentation.java @@ -139,7 +139,7 @@ public ElementMatcher getMethodMatcher() { return named("execute").and(returns(void.class)).and(takesArguments(Runnable.class)) .or(named("submit").and(returns(hasSuperType(is(Future.class)))).and(takesArguments(Runnable.class))) .or(named("submit").and(returns(hasSuperType(is(Future.class)))).and(takesArguments(Runnable.class, Object.class))) - .or(named("schedule").and(returns(ScheduledFuture.class)).and(takesArguments(Runnable.class, long.class, TimeUnit.class))); + .or(named("schedule").and(returns(hasSuperType(is(ScheduledFuture.class)))).and(takesArguments(Runnable.class, long.class, TimeUnit.class))); } } @@ -171,7 +171,7 @@ public static void onExit(@Nullable @Advice.Thrown Throwable thrown, @Override public ElementMatcher getMethodMatcher() { return named("submit").and(returns(hasSuperType(is(Future.class)))).and(takesArguments(Callable.class)) - .or(named("schedule").and(returns(ScheduledFuture.class)).and(takesArguments(Callable.class, long.class, TimeUnit.class))); + .or(named("schedule").and(returns(hasSuperType(is(ScheduledFuture.class)))).and(takesArguments(Callable.class, long.class, TimeUnit.class))); } } @@ -233,7 +233,7 @@ public ElementMatcher getTypeMatcher() { @Override public ElementMatcher getMethodMatcher() { return named("execute").and(returns(void.class)).and(takesArguments(ForkJoinTask.class)) - .or(named("submit").and(returns(ForkJoinTask.class)).and(takesArguments(ForkJoinTask.class))) + .or(named("submit").and(returns(hasSuperType(is(ForkJoinTask.class)))).and(takesArguments(ForkJoinTask.class))) .or(named("invoke").and(returns(Object.class)).and(takesArguments(ForkJoinTask.class))); } diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncInstrumentation.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncInstrumentation.java index 41b6894c50..23ee195614 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncInstrumentation.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientAsyncInstrumentation.java @@ -57,7 +57,7 @@ public ElementMatcher getTypeMatcher() { @Override public ElementMatcher getMethodMatcher() { return named("sendAsync") - .and(returns(named("java.util.concurrent.CompletableFuture"))) + .and(returns(hasSuperType(named("java.util.concurrent.CompletableFuture")))) .and(takesArguments(3)); } diff --git a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientInstrumentation.java b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientInstrumentation.java index ad08e0dca1..7f8c0dc92d 100644 --- a/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientInstrumentation.java +++ b/apm-agent-plugins/apm-jdk-httpclient-plugin/src/main/java/co/elastic/apm/agent/httpclient/HttpClientInstrumentation.java @@ -56,7 +56,7 @@ public ElementMatcher getTypeMatcher() { @Override public ElementMatcher getMethodMatcher() { - return named("send").and(returns(named("java.net.http.HttpResponse"))); + return named("send").and(returns(hasSuperType(named("java.net.http.HttpResponse")))); } @Nullable diff --git a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java index fcd87b6d6a..0562929e50 100644 --- a/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java +++ b/apm-agent-plugins/apm-okhttp-plugin/src/main/java/co/elastic/apm/agent/okhttp/OkHttp3ClientInstrumentation.java @@ -40,6 +40,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; +import static net.bytebuddy.matcher.ElementMatchers.hasSuperType; import static net.bytebuddy.matcher.ElementMatchers.nameEndsWith; import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith; import static net.bytebuddy.matcher.ElementMatchers.named; @@ -108,6 +109,6 @@ public ElementMatcher getTypeMatcher() { @Override public ElementMatcher getMethodMatcher() { - return named("execute").and(returns(named("okhttp3.Response"))); + return named("execute").and(returns(hasSuperType(named("okhttp3.Response")))); } } diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AsyncInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AsyncInstrumentation.java index 5be92f1f3d..6e91415adb 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AsyncInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/AsyncInstrumentation.java @@ -90,7 +90,7 @@ public ElementMatcher getTypeMatcher() { public ElementMatcher getMethodMatcher() { return isPublic() .and(named("startAsync")) - .and(returns(named("javax.servlet.AsyncContext"))) + .and(returns(hasSuperType(named("javax.servlet.AsyncContext")))) .and(takesArguments(0) .or( takesArgument(0, named("javax.servlet.ServletRequest")) diff --git a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/RequestStreamRecordingInstrumentation.java b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/RequestStreamRecordingInstrumentation.java index 3bd6fccf94..930ad7364c 100644 --- a/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/RequestStreamRecordingInstrumentation.java +++ b/apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/RequestStreamRecordingInstrumentation.java @@ -61,7 +61,8 @@ public ElementMatcher getTypeMatcher() { @Override public ElementMatcher getMethodMatcher() { - return named("getInputStream").and(returns(named("javax.servlet.ServletInputStream"))); + return named("getInputStream") + .and(returns(hasSuperType(named("javax.servlet.ServletInputStream")))); } @Override