diff --git a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelElementMatchers.java b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelElementMatchers.java new file mode 100644 index 00000000000..eba7043e9be --- /dev/null +++ b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelElementMatchers.java @@ -0,0 +1,43 @@ +package datadog.opentelemetry.tooling; + +import datadog.trace.agent.tooling.bytebuddy.matcher.ClassLoaderMatchers; +import datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; +import net.bytebuddy.matcher.ElementMatchers; + +/** Replaces OpenTelemetry's {@code AgentElementMatchers} when mapping extensions. */ +public final class OtelElementMatchers { + + public static ElementMatcher.Junction extendsClass( + ElementMatcher matcher) { + return HierarchyMatchers.extendsClass(matcher); + } + + public static ElementMatcher.Junction implementsInterface( + ElementMatcher matcher) { + return HierarchyMatchers.implementsInterface(matcher); + } + + public static ElementMatcher.Junction hasSuperType( + ElementMatcher matcher) { + return HierarchyMatchers.hasSuperType(matcher); + } + + public static ElementMatcher.Junction methodIsDeclaredByType( + ElementMatcher matcher) { + return ElementMatchers.isDeclaredBy(matcher); + } + + public static ElementMatcher.Junction hasSuperMethod( + ElementMatcher matcher) { + return HierarchyMatchers.hasSuperMethod(matcher); + } + + public static ElementMatcher.Junction hasClassesNamed(String... classNames) { + return ClassLoaderMatchers.hasClassNamedOneOf(classNames); + } + + private OtelElementMatchers() {} +} diff --git a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java index 3a047579ba2..9132652d2c8 100644 --- a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java +++ b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java @@ -45,11 +45,10 @@ public void visit( @Override public MethodVisitor visitMethod( int access, String name, String descriptor, String signature, String[] exceptions) { - if (!UNSUPPORTED_METHODS.contains(name)) { - return super.visitMethod(access, name, descriptor, signature, exceptions); - } else { + if (UNSUPPORTED_METHODS.contains(name)) { return null; // remove unsupported method } + return super.visitMethod(access, name, descriptor, signature, exceptions); } private String[] removeUnsupportedTypes(String[] interfaces) { @@ -84,12 +83,12 @@ static final class Renamer extends Remapper { RENAMED_TYPES.put( "io/opentelemetry/javaagent/extension/instrumentation/TypeTransformer", "datadog/opentelemetry/tooling/OtelTransformer"); + RENAMED_TYPES.put( + "io/opentelemetry/javaagent/extension/matcher/AgentElementMatchers", + "datadog/opentelemetry/tooling/OtelElementMatchers"); RENAMED_TYPES.put( "io/opentelemetry/javaagent/bootstrap/Java8BytecodeBridge", "datadog/trace/bootstrap/otel/Java8BytecodeBridge"); - RENAMED_TYPES.put( - "io/opentelemetry/javaagent/extension/matcher/AgentElementMatchers", - "datadog/trace/agent/tooling/bytebuddy/matcher/HierarchyMatchers"); } @Override diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java index 221c3b9f685..8b6315b8225 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java @@ -142,7 +142,7 @@ public String muzzleDirective() { } /** Override this to supply additional class-loader requirements. */ - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return ANY_CLASS_LOADER; } diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/ClassLoaderMatchers.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/ClassLoaderMatchers.java index df71c0461d6..c3ea303a705 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/ClassLoaderMatchers.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/ClassLoaderMatchers.java @@ -22,7 +22,7 @@ public final class ClassLoaderMatchers { private static final Logger log = LoggerFactory.getLogger(ClassLoaderMatchers.class); - public static final ElementMatcher ANY_CLASS_LOADER = any(); + public static final ElementMatcher.Junction ANY_CLASS_LOADER = any(); private static final ClassLoader BOOTSTRAP_CLASSLOADER = null; diff --git a/dd-java-agent/instrumentation/armeria-jetty/src/main/java/datadog/trace/instrumentation/armeria/jetty/ArmeriaHttpConnectionInstrumentation.java b/dd-java-agent/instrumentation/armeria-jetty/src/main/java/datadog/trace/instrumentation/armeria/jetty/ArmeriaHttpConnectionInstrumentation.java index b64d9718075..c27711a3033 100644 --- a/dd-java-agent/instrumentation/armeria-jetty/src/main/java/datadog/trace/instrumentation/armeria/jetty/ArmeriaHttpConnectionInstrumentation.java +++ b/dd-java-agent/instrumentation/armeria-jetty/src/main/java/datadog/trace/instrumentation/armeria/jetty/ArmeriaHttpConnectionInstrumentation.java @@ -24,7 +24,7 @@ public String instrumentedType() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("com.linecorp.armeria.server.ServiceRequestContext"); } diff --git a/dd-java-agent/instrumentation/cxf-2.1/src/main/java/datadog/trace/instrumentation/cxf/InvokerInstrumentation.java b/dd-java-agent/instrumentation/cxf-2.1/src/main/java/datadog/trace/instrumentation/cxf/InvokerInstrumentation.java index ae469542267..ae5773f6d69 100644 --- a/dd-java-agent/instrumentation/cxf-2.1/src/main/java/datadog/trace/instrumentation/cxf/InvokerInstrumentation.java +++ b/dd-java-agent/instrumentation/cxf-2.1/src/main/java/datadog/trace/instrumentation/cxf/InvokerInstrumentation.java @@ -24,7 +24,7 @@ public InvokerInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return ClassLoaderMatchers.hasClassNamed("javax.servlet.ServletRequest") .or(ClassLoaderMatchers.hasClassNamed("jakarta.servlet.ServletRequest")); } diff --git a/dd-java-agent/instrumentation/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/CassandraClusterInstrumentation.java b/dd-java-agent/instrumentation/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/CassandraClusterInstrumentation.java index a60c2443368..19fece81951 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/CassandraClusterInstrumentation.java +++ b/dd-java-agent/instrumentation/datastax-cassandra-3.8/src/main/java/datadog/trace/instrumentation/datastax/cassandra38/CassandraClusterInstrumentation.java @@ -36,7 +36,7 @@ public Map contextStore() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("com.datastax.driver.core.EndPoint"); } diff --git a/dd-java-agent/instrumentation/datastax-cassandra-3/src/main/java/datadog/trace/instrumentation/datastax/cassandra/CassandraClusterInstrumentation.java b/dd-java-agent/instrumentation/datastax-cassandra-3/src/main/java/datadog/trace/instrumentation/datastax/cassandra/CassandraClusterInstrumentation.java index 7f8dc38beee..88579c46a52 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra-3/src/main/java/datadog/trace/instrumentation/datastax/cassandra/CassandraClusterInstrumentation.java +++ b/dd-java-agent/instrumentation/datastax-cassandra-3/src/main/java/datadog/trace/instrumentation/datastax/cassandra/CassandraClusterInstrumentation.java @@ -37,7 +37,7 @@ public Map contextStore() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return not(hasClassNamed("com.datastax.driver.core.EndPoint")); } diff --git a/dd-java-agent/instrumentation/elasticsearch/rest-7/src/main/java/datadog/trace/instrumentation/elasticsearch7/Elasticsearch7RestClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch/rest-7/src/main/java/datadog/trace/instrumentation/elasticsearch7/Elasticsearch7RestClientInstrumentation.java index a1dff549523..0e52a5a9bde 100644 --- a/dd-java-agent/instrumentation/elasticsearch/rest-7/src/main/java/datadog/trace/instrumentation/elasticsearch7/Elasticsearch7RestClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch/rest-7/src/main/java/datadog/trace/instrumentation/elasticsearch7/Elasticsearch7RestClientInstrumentation.java @@ -31,7 +31,7 @@ public Elasticsearch7RestClientInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching pre-ES7 releases which have their own instrumentations. return hasClassNamed("org.elasticsearch.client.RestClient$InternalRequest"); } diff --git a/dd-java-agent/instrumentation/elasticsearch/transport-7.3/src/main/java/datadog/trace/instrumentation/elasticsearch7_3/Elasticsearch73TransportClientInstrumentation.java b/dd-java-agent/instrumentation/elasticsearch/transport-7.3/src/main/java/datadog/trace/instrumentation/elasticsearch7_3/Elasticsearch73TransportClientInstrumentation.java index d37b859f194..2c1a194a408 100644 --- a/dd-java-agent/instrumentation/elasticsearch/transport-7.3/src/main/java/datadog/trace/instrumentation/elasticsearch7_3/Elasticsearch73TransportClientInstrumentation.java +++ b/dd-java-agent/instrumentation/elasticsearch/transport-7.3/src/main/java/datadog/trace/instrumentation/elasticsearch7_3/Elasticsearch73TransportClientInstrumentation.java @@ -32,7 +32,7 @@ public Elasticsearch73TransportClientInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching pre-ES7 releases which have their own instrumentations. return hasClassNamed("org.elasticsearch.action.ActionType"); } diff --git a/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradleBuildScopeServicesInstrumentation.java b/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradleBuildScopeServicesInstrumentation.java index 89f66d00f86..23b34d99cc0 100644 --- a/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradleBuildScopeServicesInstrumentation.java +++ b/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradleBuildScopeServicesInstrumentation.java @@ -23,7 +23,7 @@ public GradleBuildScopeServicesInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only instrument Gradle 8.3+ return hasClassNamed("org.gradle.api.file.ConfigurableFilePermissions"); } diff --git a/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradlePluginInjectorInstrumentation.java b/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradlePluginInjectorInstrumentation.java index 698c3e7f7c3..da8469559a7 100644 --- a/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradlePluginInjectorInstrumentation.java +++ b/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/GradlePluginInjectorInstrumentation.java @@ -18,7 +18,7 @@ public GradlePluginInjectorInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only instrument Gradle 8.3+ return hasClassNamed("org.gradle.api.file.ConfigurableFilePermissions"); } diff --git a/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/legacy/GradleBuildListenerInstrumentation.java b/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/legacy/GradleBuildListenerInstrumentation.java index d25b0d19521..1764ea0703c 100644 --- a/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/legacy/GradleBuildListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/gradle/src/main/groovy/datadog/trace/instrumentation/gradle/legacy/GradleBuildListenerInstrumentation.java @@ -22,7 +22,7 @@ public GradleBuildListenerInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only instrument Gradle older than 8.3 return not(hasClassNamed("org.gradle.api.file.ConfigurableFilePermissions")); } diff --git a/dd-java-agent/instrumentation/gson-1.6/src/main/java/datadog/trace/instrumentation/gson/JsonReaderInstrumentation.java b/dd-java-agent/instrumentation/gson-1.6/src/main/java/datadog/trace/instrumentation/gson/JsonReaderInstrumentation.java index a8cd7e21e1d..a848155602e 100644 --- a/dd-java-agent/instrumentation/gson-1.6/src/main/java/datadog/trace/instrumentation/gson/JsonReaderInstrumentation.java +++ b/dd-java-agent/instrumentation/gson-1.6/src/main/java/datadog/trace/instrumentation/gson/JsonReaderInstrumentation.java @@ -34,7 +34,7 @@ public String instrumentedType() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("com.google.gson.stream.JsonReader"); } diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java index 21580899faf..5d187a1d0ab 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpClientInstrumentation.java @@ -26,7 +26,7 @@ public HttpClientInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("java.net.http.HttpClient"); } diff --git a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java index 3d00cbcc046..4b49abe1655 100644 --- a/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java +++ b/dd-java-agent/instrumentation/java-http-client/src/main/java/datadog/trace/instrumentation/httpclient/HttpHeadersInstrumentation.java @@ -22,7 +22,7 @@ public HttpHeadersInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("java.net.http.HttpRequest"); } diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java index 553180c092f..dabd2218610 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-1/src/main/java/datadog/trace/instrumentation/jaxrs1/JaxRsAnnotationsInstrumentation.java @@ -54,7 +54,7 @@ private Collection getJaxRsAnnotations() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching JAX-RS 2 which has its own instrumentation. return not(hasClassNamed("javax.ws.rs.container.AsyncResponse")); } diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java index 3e0612be1e8..8467c310a1a 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/main/java/datadog/trace/instrumentation/jaxrs2/JaxRsAnnotationsInstrumentation.java @@ -64,7 +64,7 @@ public Map contextStore() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching JAX-RS 1 which has its own instrumentation. return hasClassNamed("javax.ws.rs.container.AsyncResponse"); } diff --git a/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java b/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java index fbc6a4d28ed..9b6bdd7aa3d 100644 --- a/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java +++ b/dd-java-agent/instrumentation/jedis-1.4/src/main/java/datadog/trace/instrumentation/jedis/JedisInstrumentation.java @@ -29,7 +29,7 @@ public JedisInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching Jedis 3+ which has its own instrumentation. return not(hasClassNamed("redis.clients.jedis.commands.ProtocolCommand")); } diff --git a/dd-java-agent/instrumentation/jetty-appsec-8.1.3/src/main/java/datadog/trace/instrumentation/jetty8/RequestGetPartsInstrumentation.java b/dd-java-agent/instrumentation/jetty-appsec-8.1.3/src/main/java/datadog/trace/instrumentation/jetty8/RequestGetPartsInstrumentation.java index 8b4100c6803..2bdb26563a5 100644 --- a/dd-java-agent/instrumentation/jetty-appsec-8.1.3/src/main/java/datadog/trace/instrumentation/jetty8/RequestGetPartsInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-appsec-8.1.3/src/main/java/datadog/trace/instrumentation/jetty8/RequestGetPartsInstrumentation.java @@ -75,28 +75,26 @@ public void methodAdvice(MethodTransformer transformer) { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return RequestImplementationClassLoaderMatcher.INSTANCE; } public static class RequestImplementationClassLoaderMatcher - implements ElementMatcher { - public static final ElementMatcher INSTANCE = + extends ElementMatcher.Junction.ForNonNullValues { + public static final ElementMatcher.Junction INSTANCE = new RequestImplementationClassLoaderMatcher(); @Override - public boolean matches(ClassLoader cl) { - InputStream is = cl.getResourceAsStream("org/eclipse/jetty/server/Request.class"); - if (is == null) { - return false; - } - try { + protected boolean doMatch(ClassLoader cl) { + try (InputStream is = cl.getResourceAsStream("org/eclipse/jetty/server/Request.class")) { + if (is == null) { + return false; + } ClassReader classReader = new ClassReader(is); final boolean[] foundField = new boolean[1]; final boolean[] foundGetParameters = new boolean[1]; classReader.accept(new ClassLoaderMatcherClassVisitor(foundField, foundGetParameters), 0); return !foundField[0] && foundGetParameters[0]; - } catch (IOException e) { return false; } diff --git a/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberInstrumentation.java b/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberInstrumentation.java index 551ef5108e0..35649a927d1 100644 --- a/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberInstrumentation.java +++ b/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberInstrumentation.java @@ -30,7 +30,7 @@ public JUnit5CucumberInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("io.cucumber.junit.platform.engine.CucumberTestEngine"); } diff --git a/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberItrInstrumentation.java b/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberItrInstrumentation.java index f26739d0109..d917bf19bd1 100644 --- a/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberItrInstrumentation.java +++ b/dd-java-agent/instrumentation/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberItrInstrumentation.java @@ -31,7 +31,7 @@ public JUnit5CucumberItrInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("io.cucumber.junit.platform.engine.CucumberTestEngine"); } diff --git a/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockInstrumentation.java b/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockInstrumentation.java index 2e9d4d4dbad..e7e4d07c01d 100644 --- a/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockInstrumentation.java +++ b/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockInstrumentation.java @@ -30,7 +30,7 @@ public JUnit5SpockInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("org.spockframework.runtime.SpockEngine"); } diff --git a/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockItrInstrumentation.java b/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockItrInstrumentation.java index 2fccccc88f6..103fe442579 100644 --- a/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockItrInstrumentation.java +++ b/dd-java-agent/instrumentation/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockItrInstrumentation.java @@ -32,7 +32,7 @@ public JUnit5SpockItrInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("org.spockframework.runtime.SpockEngine"); } diff --git a/dd-java-agent/instrumentation/opensearch/transport/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java b/dd-java-agent/instrumentation/opensearch/transport/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java index d334fa75e9e..da40d47c41d 100644 --- a/dd-java-agent/instrumentation/opensearch/transport/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java +++ b/dd-java-agent/instrumentation/opensearch/transport/src/main/java/datadog/trace/instrumentation/opensearch/OpensearchTransportClientInstrumentation.java @@ -31,7 +31,7 @@ public OpensearchTransportClientInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("org.opensearch.action.ActionType"); } diff --git a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/GlobalTracerInstrumentation.java b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/GlobalTracerInstrumentation.java index d8be33a568d..7a2e1dff243 100644 --- a/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/GlobalTracerInstrumentation.java +++ b/dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/GlobalTracerInstrumentation.java @@ -26,7 +26,7 @@ public GlobalTracerInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching OT 0.32+ which has its own instrumentation. return not(hasClassNamed("io.opentracing.tag.Tag")); } diff --git a/dd-java-agent/instrumentation/osgi-4.3/src/main/java/datadog/trace/instrumentation/osgi43/BundleReferenceInstrumentation.java b/dd-java-agent/instrumentation/osgi-4.3/src/main/java/datadog/trace/instrumentation/osgi43/BundleReferenceInstrumentation.java index 185c8d8f9e6..983cf56380d 100644 --- a/dd-java-agent/instrumentation/osgi-4.3/src/main/java/datadog/trace/instrumentation/osgi43/BundleReferenceInstrumentation.java +++ b/dd-java-agent/instrumentation/osgi-4.3/src/main/java/datadog/trace/instrumentation/osgi43/BundleReferenceInstrumentation.java @@ -29,7 +29,7 @@ public BundleReferenceInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching older versions of OSGi that don't have the wiring API. return hasClassNamed("org.osgi.framework.wiring.BundleWiring"); } diff --git a/dd-java-agent/instrumentation/reactor-netty-1/src/main/java/datadog/trace/instrumentation/reactor/netty/HttpClientInstrumentation.java b/dd-java-agent/instrumentation/reactor-netty-1/src/main/java/datadog/trace/instrumentation/reactor/netty/HttpClientInstrumentation.java index 4076a58b2d0..b94c44381f4 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1/src/main/java/datadog/trace/instrumentation/reactor/netty/HttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/reactor-netty-1/src/main/java/datadog/trace/instrumentation/reactor/netty/HttpClientInstrumentation.java @@ -26,7 +26,7 @@ public HttpClientInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching pre-1.0 releases which are not compatible. return hasClassNamed("reactor.netty.transport.AddressUtils"); } diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/IastServlet2Instrumentation.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/IastServlet2Instrumentation.java index 90232c90646..9995c2107f0 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/IastServlet2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/IastServlet2Instrumentation.java @@ -31,11 +31,11 @@ public String muzzleDirective() { } // Avoid matching servlet 3 which has its own instrumentation - static final ElementMatcher NOT_SERVLET_3 = + static final ElementMatcher.Junction NOT_SERVLET_3 = not(hasClassNamed("javax.servlet.AsyncEvent")); @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return NOT_SERVLET_3; } diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java index 2e6c1cd8fb7..0042ad2b4ed 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Instrumentation.java @@ -31,11 +31,11 @@ public String muzzleDirective() { } // Avoid matching servlet 3 which has its own instrumentation - static final ElementMatcher NOT_SERVLET_3 = + static final ElementMatcher.Junction NOT_SERVLET_3 = not(hasClassNamed("javax.servlet.AsyncEvent")); @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return NOT_SERVLET_3; } diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2ResponseStatusInstrumentation.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2ResponseStatusInstrumentation.java index 350588b7e30..71029d6d365 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2ResponseStatusInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2ResponseStatusInstrumentation.java @@ -26,7 +26,7 @@ public String muzzleDirective() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return Servlet2Instrumentation.NOT_SERVLET_3; } diff --git a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/ServletRequestBodyInstrumentation.java b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/ServletRequestBodyInstrumentation.java index 67a9add93d3..a17d469d7fc 100644 --- a/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/ServletRequestBodyInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/ServletRequestBodyInstrumentation.java @@ -53,7 +53,7 @@ public String muzzleDirective() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching request bodies after 3.0.x which have their own instrumentation return not(hasClassNamed("javax.servlet.ReadListener")); } diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/IastServlet3Instrumentation.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/IastServlet3Instrumentation.java index 317173cccb6..2dcbb943aa0 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/IastServlet3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/IastServlet3Instrumentation.java @@ -29,7 +29,7 @@ public String muzzleDirective() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching servlet 2 which has its own instrumentation return hasClassNamed("javax.servlet.AsyncEvent"); } diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet31RequestBodyInstrumentation.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet31RequestBodyInstrumentation.java index 73453cef6e2..d2e4fdc0984 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet31RequestBodyInstrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet31RequestBodyInstrumentation.java @@ -33,7 +33,7 @@ public String muzzleDirective() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching request bodies before 3.1.x which have their own instrumentation return hasClassNamed("javax.servlet.ReadListener"); } diff --git a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java index 1ef6c582c77..bf30f67818a 100644 --- a/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Instrumentation.java @@ -27,7 +27,7 @@ public String muzzleDirective() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching servlet 2 which has its own instrumentation return hasClassNamed("javax.servlet.AsyncEvent"); } diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HttpMessageConverterInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HttpMessageConverterInstrumentation.java index da4992401d1..ae36b91b53d 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HttpMessageConverterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/HttpMessageConverterInstrumentation.java @@ -36,7 +36,7 @@ public HttpMessageConverterInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only apply this spring-framework instrumentation when spring-webmvc is also deployed. return hasClassNamed( "org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping"); diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateAndMatrixVariablesInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateAndMatrixVariablesInstrumentation.java index 10d99a65224..f82ef331165 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateAndMatrixVariablesInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateAndMatrixVariablesInstrumentation.java @@ -56,7 +56,7 @@ public boolean isApplicable(Set enabledSystems) { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only apply to versions of spring-webmvc that include request mapping information return hasClassNamed("org.springframework.web.servlet.mvc.method.RequestMappingInfo"); } diff --git a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateVariablesUrlHandlerInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateVariablesUrlHandlerInstrumentation.java index 37f1b2d4158..41c4c77a798 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateVariablesUrlHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/TemplateVariablesUrlHandlerInstrumentation.java @@ -55,7 +55,7 @@ public boolean isApplicable(Set enabledSystems) { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only apply to versions of spring-webmvc that include request mapping information return hasClassNamed("org.springframework.web.servlet.mvc.method.RequestMappingInfo"); } diff --git a/dd-java-agent/instrumentation/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/ServletPathRequestFilterInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/ServletPathRequestFilterInstrumentation.java index f8dbdafac35..c9914fcefca 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/ServletPathRequestFilterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/ServletPathRequestFilterInstrumentation.java @@ -28,7 +28,7 @@ public ServletPathRequestFilterInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("org.springframework.web.filter.ServletRequestPathFilter") .and(hasClassNamed("javax.servlet.Filter")); } diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/ServletPathRequestFilterInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/ServletPathRequestFilterInstrumentation.java index e8c4dd4d72a..11fb0a53aeb 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/ServletPathRequestFilterInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/ServletPathRequestFilterInstrumentation.java @@ -25,7 +25,7 @@ public ServletPathRequestFilterInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { return hasClassNamed("org.springframework.web.filter.ServletRequestPathFilter") .and(hasClassNamed("jakarta.servlet.Filter")); } diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateAndMatrixVariablesInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateAndMatrixVariablesInstrumentation.java index 9a4798169ae..d42dd144cfa 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateAndMatrixVariablesInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateAndMatrixVariablesInstrumentation.java @@ -38,7 +38,7 @@ public boolean isApplicable(Set enabledSystems) { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only apply to versions of spring-webmvc that include request mapping information return hasClassNamed("org.springframework.web.servlet.mvc.method.RequestMappingInfo"); } diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateVariablesUrlHandlerInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateVariablesUrlHandlerInstrumentation.java index 8d6f2f44e1b..9afbc5ea151 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateVariablesUrlHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/TemplateVariablesUrlHandlerInstrumentation.java @@ -38,7 +38,7 @@ public boolean isApplicable(Set enabledSystems) { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only apply to versions of spring-webmvc that include request mapping information return hasClassNamed("org.springframework.web.servlet.mvc.method.RequestMappingInfo"); } diff --git a/dd-java-agent/instrumentation/testng/testng-6/src/main/java/datadog/trace/instrumentation/testng6/TestNGClassListenerInstrumentation.java b/dd-java-agent/instrumentation/testng/testng-6/src/main/java/datadog/trace/instrumentation/testng6/TestNGClassListenerInstrumentation.java index efd5bac1834..307fcf30f32 100644 --- a/dd-java-agent/instrumentation/testng/testng-6/src/main/java/datadog/trace/instrumentation/testng6/TestNGClassListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/testng/testng-6/src/main/java/datadog/trace/instrumentation/testng6/TestNGClassListenerInstrumentation.java @@ -29,7 +29,7 @@ public TestNGClassListenerInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // do not apply to TestNG 7.x and above // since those versions are handled by a different instrumentation return not(hasClassNamed("org.testng.annotations.CustomAttribute")); diff --git a/dd-java-agent/instrumentation/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/ParsedBodyParametersInstrumentation.java b/dd-java-agent/instrumentation/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/ParsedBodyParametersInstrumentation.java index c1fc3ce7660..15c39db073e 100644 --- a/dd-java-agent/instrumentation/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/ParsedBodyParametersInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/ParsedBodyParametersInstrumentation.java @@ -40,7 +40,7 @@ public String muzzleDirective() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Avoid matching Tomcat 5.0.x which is not supported by this instrumentation. return hasClassNamed("org.apache.tomcat.util.buf.StringCache"); } diff --git a/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java b/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java index 634f388fe0e..332d86f99c9 100644 --- a/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java +++ b/dd-java-agent/instrumentation/twilio/src/main/java/datadog/trace/instrumentation/twilio/TwilioAsyncInstrumentation.java @@ -35,7 +35,7 @@ public TwilioAsyncInstrumentation() { } @Override - public ElementMatcher classLoaderMatcher() { + public ElementMatcher.Junction classLoaderMatcher() { // Only apply instrumentation when guava's ListenableFuture is also deployed. return hasClassNamed("com.google.common.util.concurrent.ListenableFuture"); }