From b7a95857c7e4696f082fac2fd10ce4f26967e55f Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Tue, 18 Jan 2022 03:26:03 +0900 Subject: [PATCH] Fix some java lint warnings (#5120) * Convert InstrumentationTestRunner from interface to abstract class * Foo * Commit * Revert unintended --- .../otel.errorprone-conventions.gradle.kts | 4 ++ dependencyManagement/build.gradle.kts | 1 + instrumentation-api/build.gradle.kts | 7 ++ .../ConcurrentLinkedHashMap.java | 4 +- .../concurrentlinkedhashmap/LinkedDeque.java | 47 ++++++------- .../api/config/ConfigParsingException.java | 2 + .../api/instrumenter/InstrumenterBuilder.java | 4 +- .../api/instrumenter/UnsafeAttributes.java | 2 + .../internal/RuntimeVirtualFieldSupplier.java | 1 + .../api/tracer/DatabaseClientTracer.java | 11 +-- .../api/tracer/HttpClientTracer.java | 11 +-- .../api/tracer/net/NetPeerAttributes.java | 10 ++- .../awslambda/v1_0/LambdaParameters.java | 4 +- .../v1_0/TracingRequestApiGatewayWrapper.java | 6 +- .../awslambda/v1_0/TracingRequestWrapper.java | 4 +- .../v1_0/TracingRequestWrapperBase.java | 7 +- .../v1_0/internal/HeadersFactory.java | 5 +- .../v2_2/AwsJsonProtocolFactoryAccess.java | 2 + .../awssdk/v2_2/MethodHandleFactory.java | 2 +- .../awssdk/v2_2/Serializer.java | 6 +- .../jaxrs/ClassHierarchyIterable.java | 4 +- .../internal/OpenTelemetryConnection.java | 2 +- .../v9_2/internal/JettyClientWrapUtil.java | 2 +- .../JettyHttpClient9TracingInterceptor.java | 2 +- .../kafkaclients/TracingConsumer.java | 2 + .../v1_5/AsyncInstrumentRegistry.java | 68 ++++++++++--------- .../quartz/v2_0/QuartzTracing.java | 6 +- .../ReactorAsyncOperationEndStrategy.java | 2 + .../RxJava2AsyncOperationEndStrategy.java | 2 + .../rxjava2/TracingParallelFlowable.java | 1 + .../RxJava3AsyncOperationEndStrategy.java | 2 + .../rxjava3/TracingParallelFlowable.java | 1 + .../v3_1_1/TracingParallelFlowable.java | 1 + .../integration/MessageHeadersGetter.java | 8 ++- .../integration/MessageHeadersSetter.java | 4 +- .../TracingChannelInterceptor.java | 6 +- javaagent-extension-api/build.gradle.kts | 3 + javaagent-tooling/build.gradle.kts | 3 + .../javaagent-tooling-java9/build.gradle.kts | 11 +++ ...ntimeFieldBasedImplementationSupplier.java | 4 +- .../VirtualFieldImplementationsGenerator.java | 2 +- muzzle/build.gradle.kts | 3 + .../muzzle/MuzzleCompilationException.java | 2 + .../test/utils/ExceptionUtils.java | 3 +- .../testing/InstrumentationTestRunner.java | 1 + .../junit/http/AbstractHttpClientTest.java | 4 +- 46 files changed, 189 insertions(+), 100 deletions(-) diff --git a/conventions/src/main/kotlin/otel.errorprone-conventions.gradle.kts b/conventions/src/main/kotlin/otel.errorprone-conventions.gradle.kts index de61a04b5e..8c777b59be 100644 --- a/conventions/src/main/kotlin/otel.errorprone-conventions.gradle.kts +++ b/conventions/src/main/kotlin/otel.errorprone-conventions.gradle.kts @@ -40,6 +40,10 @@ tasks { disable("StringSplitter") disable("ImmutableMemberCollection") + // Fully qualified names may be necessary when deprecating a class to avoid + // deprecation warning. + disable("UnnecessarilyFullyQualified") + // Don't currently use this (to indicate a local variable that's mutated) but could // consider for future. disable("Var") diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 79a95592bb..4564f4be6f 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -102,6 +102,7 @@ val DEPENDENCIES = listOf( "io.opentelemetry.proto:opentelemetry-proto:0.11.0-alpha", "org.assertj:assertj-core:3.22.0", "org.awaitility:awaitility:4.1.1", + "com.google.code.findbugs:annotations:3.0.1u2", "com.google.code.findbugs:jsr305:3.0.2", "org.codehaus.groovy:groovy-all:${groovyVersion}", "org.objenesis:objenesis:3.2", diff --git a/instrumentation-api/build.gradle.kts b/instrumentation-api/build.gradle.kts index 7e89bd5634..5d7cc10dfc 100644 --- a/instrumentation-api/build.gradle.kts +++ b/instrumentation-api/build.gradle.kts @@ -46,6 +46,13 @@ tasks { exclude("**/concurrentlinkedhashmap/**") } + // Work around https://github.com/jflex-de/jflex/issues/762 + compileJava { + with(options) { + compilerArgs.add("-Xlint:-fallthrough") + } + } + sourcesJar { dependsOn("generateJflex") } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java index 2f4f0d69f7..86f4d92755 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java @@ -211,7 +211,7 @@ public final class ConcurrentLinkedHashMap extends AbstractMap transient Set> entrySet; /** Creates an instance based on the builder's configuration. */ - @SuppressWarnings({"unchecked", "cast"}) + @SuppressWarnings({"unchecked", "cast", "rawtypes"}) private ConcurrentLinkedHashMap(Builder builder) { // The data store and its maximum capacity concurrencyLevel = builder.concurrencyLevel; @@ -1110,7 +1110,7 @@ public final class ConcurrentLinkedHashMap extends AbstractMap */ @SuppressWarnings("serial") static final class Node extends AtomicReference> - implements Linked> { + implements LinkedDeque.Linked> { final K key; @GuardedBy("evictionLock") diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/LinkedDeque.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/LinkedDeque.java index 6f6b6a871b..98b93e6bce 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/LinkedDeque.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/cache/internal/concurrentlinkedhashmap/LinkedDeque.java @@ -50,7 +50,8 @@ import javax.annotation.concurrent.NotThreadSafe; * http://code.google.com/p/concurrentlinkedhashmap/ */ @NotThreadSafe -final class LinkedDeque> extends AbstractCollection implements Deque { +final class LinkedDeque> extends AbstractCollection + implements Deque { // This class provides a doubly-linked list that is optimized for the virtual // machine. The first and last elements are manipulated instead of a slightly @@ -424,26 +425,26 @@ final class LinkedDeque> extends AbstractCollection imple /** Retrieves the next element to traverse to or null if there are no more elements. */ abstract E computeNext(); } -} - -/** An element that is linked on the {@link Deque}. */ -interface Linked> { - - /** - * Retrieves the previous element or null if either the element is unlinked or the first - * element on the deque. - */ - T getPrevious(); - - /** Sets the previous element or null if there is no link. */ - void setPrevious(T prev); - - /** - * Retrieves the next element or null if either the element is unlinked or the last - * element on the deque. - */ - T getNext(); - - /** Sets the next element or null if there is no link. */ - void setNext(T next); + + /** An element that is linked on the {@link Deque}. */ + interface Linked> { + + /** + * Retrieves the previous element or null if either the element is unlinked or the + * first element on the deque. + */ + T getPrevious(); + + /** Sets the previous element or null if there is no link. */ + void setPrevious(T prev); + + /** + * Retrieves the next element or null if either the element is unlinked or the last + * element on the deque. + */ + T getNext(); + + /** Sets the next element or null if there is no link. */ + void setNext(T next); + } } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/ConfigParsingException.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/ConfigParsingException.java index 0550827674..7c631ea26d 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/ConfigParsingException.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/ConfigParsingException.java @@ -6,6 +6,8 @@ package io.opentelemetry.instrumentation.api.config; public class ConfigParsingException extends RuntimeException { + private static final long serialVersionUID = 1L; + public ConfigParsingException(String message) { super(message); } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java index baeef2451b..9cc4564887 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java @@ -98,7 +98,9 @@ public final class InstrumenterBuilder { } /** Adds {@link AttributesExtractor}s to extract attributes from requests and responses. */ - public InstrumenterBuilder addAttributesExtractors( + @SafeVarargs + @SuppressWarnings("varargs") + public final InstrumenterBuilder addAttributesExtractors( AttributesExtractor... attributesExtractors) { return addAttributesExtractors(Arrays.asList(attributesExtractors)); } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/UnsafeAttributes.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/UnsafeAttributes.java index 07995752ae..9284d1a062 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/UnsafeAttributes.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/UnsafeAttributes.java @@ -21,6 +21,8 @@ import java.util.Map; final class UnsafeAttributes extends HashMap, Object> implements Attributes, AttributesBuilder { + private static final long serialVersionUID = 1L; + // Attributes @SuppressWarnings("unchecked") diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/RuntimeVirtualFieldSupplier.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/RuntimeVirtualFieldSupplier.java index 4792ee069f..2de8929387 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/RuntimeVirtualFieldSupplier.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/RuntimeVirtualFieldSupplier.java @@ -43,6 +43,7 @@ public final class RuntimeVirtualFieldSupplier { ownerToFieldToImplementationMap = Cache.weak(); @Override + @SuppressWarnings("unchecked") public VirtualField find(Class type, Class fieldType) { return (VirtualField) ownerToFieldToImplementationMap diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java index 36504576c0..0bc46b652e 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java @@ -10,7 +10,6 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.tracer.net.NetPeerAttributes; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.net.InetSocketAddress; import javax.annotation.Nullable; @@ -30,13 +29,17 @@ public abstract class DatabaseClientTracer extends BaseT protected static final String USER_AGENT = "User-Agent"; - protected final NetPeerAttributes netPeerAttributes; + protected final io.opentelemetry.instrumentation.api.tracer.net.NetPeerAttributes + netPeerAttributes; - protected HttpClientTracer(NetPeerAttributes netPeerAttributes) { + protected HttpClientTracer( + io.opentelemetry.instrumentation.api.tracer.net.NetPeerAttributes netPeerAttributes) { super(); this.netPeerAttributes = netPeerAttributes; } - protected HttpClientTracer(OpenTelemetry openTelemetry, NetPeerAttributes netPeerAttributes) { + protected HttpClientTracer( + OpenTelemetry openTelemetry, + io.opentelemetry.instrumentation.api.tracer.net.NetPeerAttributes netPeerAttributes) { super(openTelemetry); this.netPeerAttributes = netPeerAttributes; } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/net/NetPeerAttributes.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/net/NetPeerAttributes.java index 734547308d..53785e74a9 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/net/NetPeerAttributes.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/net/NetPeerAttributes.java @@ -10,7 +10,6 @@ import static java.util.Collections.emptyMap; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.instrumentation.api.config.Config; -import io.opentelemetry.instrumentation.api.tracer.AttributeSetter; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -49,7 +48,9 @@ public final class NetPeerAttributes { setNetPeer(span::setAttribute, remoteConnection); } - public void setNetPeer(AttributeSetter span, @Nullable InetSocketAddress remoteConnection) { + public void setNetPeer( + io.opentelemetry.instrumentation.api.tracer.AttributeSetter span, + @Nullable InetSocketAddress remoteConnection) { if (remoteConnection != null) { InetAddress remoteAddress = remoteConnection.getAddress(); if (remoteAddress != null) { @@ -79,7 +80,10 @@ public final class NetPeerAttributes { } public void setNetPeer( - AttributeSetter span, @Nullable String peerName, @Nullable String peerIp, int port) { + io.opentelemetry.instrumentation.api.tracer.AttributeSetter span, + @Nullable String peerName, + @Nullable String peerIp, + int port) { if (peerName != null && !peerName.equals(peerIp)) { span.setAttribute(SemanticAttributes.NET_PEER_NAME, peerName); } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java index 39b957afdc..ce95939703 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/LambdaParameters.java @@ -12,11 +12,11 @@ import java.util.function.BiFunction; final class LambdaParameters { static Object[] toArray( - Method targetMethod, T input, Context context, BiFunction mapper) { + Method targetMethod, T input, Context context, BiFunction, Object> mapper) { Class[] parameterTypes = targetMethod.getParameterTypes(); Object[] parameters = new Object[parameterTypes.length]; for (int i = 0; i < parameterTypes.length; i++) { - Class clazz = parameterTypes[i]; + Class clazz = parameterTypes[i]; boolean isContext = clazz.equals(Context.class); if (isContext) { parameters[i] = context; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java index dfd922658d..2dc543b680 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestApiGatewayWrapper.java @@ -27,12 +27,12 @@ public class TracingRequestApiGatewayWrapper TracingRequestApiGatewayWrapper( OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda, - BiFunction mapper) { + BiFunction, Object> mapper) { super(openTelemetrySdk, wrappedLambda, mapper); } // Visible for testing - static Object map(APIGatewayProxyRequestEvent event, Class clazz) { + static T map(APIGatewayProxyRequestEvent event, Class clazz) { try { return OBJECT_MAPPER.readValue(event.getBody(), clazz); } catch (JsonProcessingException e) { @@ -45,7 +45,7 @@ public class TracingRequestApiGatewayWrapper protected APIGatewayProxyResponseEvent doHandleRequest( APIGatewayProxyRequestEvent input, Context context) { Object result = super.doHandleRequest(input, context); - APIGatewayProxyResponseEvent event = null; + APIGatewayProxyResponseEvent event; // map to response event if needed if (result instanceof APIGatewayProxyResponseEvent) { event = (APIGatewayProxyResponseEvent) result; diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java index 6857eea056..89030321c7 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapper.java @@ -21,12 +21,12 @@ public class TracingRequestWrapper extends TracingRequestWrapperBase mapper) { + BiFunction, Object> mapper) { super(openTelemetrySdk, wrappedLambda, mapper); } // Visible for testing - static Object map(Object jsonMap, Class clazz) { + static T map(Object jsonMap, Class clazz) { try { return OBJECT_MAPPER.convertValue(jsonMap, clazz); } catch (IllegalArgumentException e) { diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java index 4a004e081c..2b8ccb02be 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingRequestWrapperBase.java @@ -26,9 +26,9 @@ abstract class TracingRequestWrapperBase extends TracingRequestHandler parameterMapper; + private final BiFunction, Object> parameterMapper; - protected TracingRequestWrapperBase(BiFunction parameterMapper) { + protected TracingRequestWrapperBase(BiFunction, Object> parameterMapper) { this( AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk(), WrappedLambda.fromConfiguration(), @@ -39,7 +39,7 @@ abstract class TracingRequestWrapperBase extends TracingRequestHandler parameterMapper) { + BiFunction, Object> parameterMapper) { super(openTelemetrySdk, WrapperConfiguration.flushTimeout()); this.wrappedLambda = wrappedLambda; this.targetMethod = wrappedLambda.getRequestTargetMethod(); @@ -47,6 +47,7 @@ abstract class TracingRequestWrapperBase extends TracingRequestHandler map = + (Map) OBJECT_MAPPER.readValue(jParser, Map.class); + return map; } } } catch (Exception e) { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsJsonProtocolFactoryAccess.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsJsonProtocolFactoryAccess.java index 7c69c0dd97..a6e4720d17 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsJsonProtocolFactoryAccess.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsJsonProtocolFactoryAccess.java @@ -40,8 +40,10 @@ final class AwsJsonProtocolFactoryAccess { // AwsJsonProtocolFactory requires any URI to be present .option(SdkClientOption.ENDPOINT, URI.create("http://empty")) .build()); + @SuppressWarnings("rawtypes") Class awsJsonProtocolClass = Class.forName("software.amazon.awssdk.protocols.json.AwsJsonProtocol"); + @SuppressWarnings("unchecked") Object awsJsonProtocol = Enum.valueOf(awsJsonProtocolClass, "AWS_JSON"); awsJsonProtocolFactoryBuilder .getClass() diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java index 211e31aa27..000beaa4f6 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/MethodHandleFactory.java @@ -24,7 +24,7 @@ class MethodHandleFactory { } }; - MethodHandle forField(Class clazz, String fieldName) + MethodHandle forField(Class clazz, String fieldName) throws NoSuchMethodException, IllegalAccessException { MethodHandle methodHandle = getterCache.get(clazz).get(fieldName); if (methodHandle == null) { diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/Serializer.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/Serializer.java index f0f2a310b7..979ecb08e8 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/Serializer.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/Serializer.java @@ -32,10 +32,10 @@ class Serializer { return serialize((SdkPojo) target); } if (target instanceof Collection) { - return serialize((Collection) target); + return serialize((Collection) target); } if (target instanceof Map) { - return serialize(((Map) target).keySet()); + return serialize(((Map) target).keySet()); } // simple type return target.toString(); @@ -61,7 +61,7 @@ class Serializer { .orElse(null); } - private String serialize(Collection collection) { + private String serialize(Collection collection) { String serialized = collection.stream().map(this::serialize).collect(Collectors.joining(",")); return (StringUtils.isEmpty(serialized) ? null : "[" + serialized + "]"); } diff --git a/instrumentation/jaxrs/jaxrs-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/jaxrs/ClassHierarchyIterable.java b/instrumentation/jaxrs/jaxrs-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/jaxrs/ClassHierarchyIterable.java index 7a3a0c1bb3..1f0f353535 100644 --- a/instrumentation/jaxrs/jaxrs-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/jaxrs/ClassHierarchyIterable.java +++ b/instrumentation/jaxrs/jaxrs-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/jaxrs/ClassHierarchyIterable.java @@ -89,8 +89,8 @@ public class ClassHierarchyIterable implements Iterable> { } } - private void queueNewInterfaces(Class[] interfaces) { - for (Class clazz : interfaces) { + private void queueNewInterfaces(Class[] interfaces) { + for (Class clazz : interfaces) { if (queuedInterfaces.add(clazz)) { classesToExpand.add(clazz); } diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnection.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnection.java index bf56aa6ee7..dc0f59f382 100644 --- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnection.java +++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnection.java @@ -130,7 +130,7 @@ public class OpenTelemetryConnection implements Connection { throws SQLException { CallableStatement statement = delegate.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); - return new OpenTelemetryCallableStatement(statement, dbInfo, sql); + return new OpenTelemetryCallableStatement<>(statement, dbInfo, sql); } @Override diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientWrapUtil.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientWrapUtil.java index 061fc3bb9d..afc33235b8 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientWrapUtil.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientWrapUtil.java @@ -63,7 +63,7 @@ public final class JettyClientWrapUtil { return (Response.ResponseListener) Proxy.newProxyInstance( listenerClass.getClassLoader(), - interfaces.toArray(new Class[0]), + interfaces.toArray(new Class[0]), (proxy, method, args) -> { try (Scope ignored = context.makeCurrent()) { return method.invoke(listener, args); diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyHttpClient9TracingInterceptor.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyHttpClient9TracingInterceptor.java index 3c45ce6527..4dea9bf1df 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyHttpClient9TracingInterceptor.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyHttpClient9TracingInterceptor.java @@ -112,7 +112,7 @@ public class JettyHttpClient9TracingInterceptor (Request.RequestListener) Proxy.newProxyInstance( listenerClass.getClassLoader(), - interfaces.toArray(new Class[0]), + interfaces.toArray(new Class[0]), (proxy, method, args) -> { try (Scope ignored = context.makeCurrent()) { return method.invoke(listener, args); diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/TracingConsumer.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/TracingConsumer.java index 318d1811c5..6d000f6bf7 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/TracingConsumer.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/TracingConsumer.java @@ -153,11 +153,13 @@ class TracingConsumer implements Consumer { } @Override + @Deprecated public OffsetAndMetadata committed(TopicPartition partition) { return consumer.committed(partition); } @Override + @Deprecated public OffsetAndMetadata committed(TopicPartition topicPartition, Duration duration) { return consumer.committed(topicPartition, duration); } diff --git a/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AsyncInstrumentRegistry.java b/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AsyncInstrumentRegistry.java index 71afa599b2..60edc4ff84 100644 --- a/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AsyncInstrumentRegistry.java +++ b/instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AsyncInstrumentRegistry.java @@ -76,8 +76,7 @@ final class AsyncInstrumentRegistry { .buildWithCallback(recorderCallback); return recorderCallback; }); - recorder.addMeasurement( - attributes, new DoubleMeasurementSource(obj, (ToDoubleFunction) objMetric)); + recorder.addMeasurement(attributes, new DoubleMeasurementSource<>(obj, objMetric)); return new AsyncMeasurementHandle(recorder, attributes); } @@ -112,8 +111,7 @@ final class AsyncInstrumentRegistry { .buildWithCallback(recorderCallback); return recorderCallback; }); - recorder.addMeasurement( - attributes, new DoubleMeasurementSource(obj, (ToDoubleFunction) objMetric)); + recorder.addMeasurement(attributes, new DoubleMeasurementSource<>(obj, objMetric)); return new AsyncMeasurementHandle(recorder, attributes); } @@ -138,8 +136,7 @@ final class AsyncInstrumentRegistry { .buildWithCallback(recorderCallback); return recorderCallback; }); - recorder.addMeasurement( - attributes, new LongMeasurementSource(obj, (ToLongFunction) objMetric)); + recorder.addMeasurement(attributes, new LongMeasurementSource<>(obj, objMetric)); return new AsyncMeasurementHandle(recorder, attributes); } @@ -165,8 +162,7 @@ final class AsyncInstrumentRegistry { .buildWithCallback(recorderCallback); return recorderCallback; }); - recorder.addMeasurement( - attributes, new DoubleMeasurementSource(obj, (ToDoubleFunction) objMetric)); + recorder.addMeasurement(attributes, new DoubleMeasurementSource<>(obj, objMetric)); return new AsyncMeasurementHandle(recorder, attributes); } @@ -194,54 +190,62 @@ final class AsyncInstrumentRegistry { } private static final class DoubleMeasurementsRecorder - extends MeasurementsRecorder + extends MeasurementsRecorder> implements Consumer { @Override public void accept(ObservableDoubleMeasurement measurement) { - measurements.forEach( - (attributes, gauge) -> { - Object obj = gauge.objWeakRef.get(); - if (obj != null) { - measurement.record(gauge.metricFunction.applyAsDouble(obj), attributes); - } - }); + measurements.forEach((attributes, gauge) -> record(measurement, attributes, gauge)); + } + + private static void record( + ObservableDoubleMeasurement measurement, + Attributes attributes, + DoubleMeasurementSource gauge) { + T obj = gauge.objWeakRef.get(); + if (obj != null) { + measurement.record(gauge.metricFunction.applyAsDouble(obj), attributes); + } } } private static final class LongMeasurementsRecorder - extends MeasurementsRecorder + extends MeasurementsRecorder> implements Consumer { @Override public void accept(ObservableLongMeasurement measurement) { - measurements.forEach( - (attributes, gauge) -> { - Object obj = gauge.objWeakRef.get(); - if (obj != null) { - measurement.record(gauge.metricFunction.applyAsLong(obj), attributes); - } - }); + measurements.forEach((attributes, gauge) -> record(measurement, attributes, gauge)); + } + + private static void record( + ObservableLongMeasurement measurement, + Attributes attributes, + LongMeasurementSource gauge) { + T obj = gauge.objWeakRef.get(); + if (obj != null) { + measurement.record(gauge.metricFunction.applyAsLong(obj), attributes); + } } } - private static final class DoubleMeasurementSource { + private static final class DoubleMeasurementSource { - private final WeakReference objWeakRef; - private final ToDoubleFunction metricFunction; + private final WeakReference objWeakRef; + private final ToDoubleFunction metricFunction; - private DoubleMeasurementSource(@Nullable Object obj, ToDoubleFunction metricFunction) { + private DoubleMeasurementSource(@Nullable T obj, ToDoubleFunction metricFunction) { this.objWeakRef = new WeakReference<>(obj); this.metricFunction = metricFunction; } } - private static final class LongMeasurementSource { + private static final class LongMeasurementSource { - private final WeakReference objWeakRef; - private final ToLongFunction metricFunction; + private final WeakReference objWeakRef; + private final ToLongFunction metricFunction; - private LongMeasurementSource(@Nullable Object obj, ToLongFunction metricFunction) { + private LongMeasurementSource(@Nullable T obj, ToLongFunction metricFunction) { this.objWeakRef = new WeakReference<>(obj); this.metricFunction = metricFunction; } diff --git a/instrumentation/quartz-2.0/library/src/main/java/io/opentelemetry/instrumentation/quartz/v2_0/QuartzTracing.java b/instrumentation/quartz-2.0/library/src/main/java/io/opentelemetry/instrumentation/quartz/v2_0/QuartzTracing.java index aa2a37b85b..1b29afb3bf 100644 --- a/instrumentation/quartz-2.0/library/src/main/java/io/opentelemetry/instrumentation/quartz/v2_0/QuartzTracing.java +++ b/instrumentation/quartz-2.0/library/src/main/java/io/opentelemetry/instrumentation/quartz/v2_0/QuartzTracing.java @@ -6,7 +6,9 @@ package io.opentelemetry.instrumentation.quartz.v2_0; import io.opentelemetry.api.OpenTelemetry; +import org.quartz.JobKey; import org.quartz.JobListener; +import org.quartz.Matcher; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.matchers.EverythingMatcher; @@ -51,7 +53,9 @@ public final class QuartzTracing { try { // We must pass a matcher to work around a bug in Quartz 2.0.0. It's unlikely anyone uses // a version before 2.0.2, but it makes muzzle simple. - scheduler.getListenerManager().addJobListener(jobListener, EverythingMatcher.allJobs()); + @SuppressWarnings({"rawtypes", "unchecked"}) + Matcher[] matchers = new Matcher[] {EverythingMatcher.allJobs()}; + scheduler.getListenerManager().addJobListener(jobListener, matchers); } catch (SchedulerException e) { throw new IllegalStateException("Could not add JobListener to Scheduler", e); } diff --git a/instrumentation/reactor/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/ReactorAsyncOperationEndStrategy.java b/instrumentation/reactor/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/ReactorAsyncOperationEndStrategy.java index 3ec2fe1858..d4964847f9 100644 --- a/instrumentation/reactor/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/ReactorAsyncOperationEndStrategy.java +++ b/instrumentation/reactor/reactor-3.1/library/src/main/java/io/opentelemetry/instrumentation/reactor/ReactorAsyncOperationEndStrategy.java @@ -81,6 +81,8 @@ public final class ReactorAsyncOperationEndStrategy implements AsyncOperationEnd private abstract class EndOnFirstNotificationConsumer extends AtomicBoolean implements Runnable, Consumer { + private static final long serialVersionUID = 1L; + private final Context context; protected EndOnFirstNotificationConsumer(Context context) { diff --git a/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/RxJava2AsyncOperationEndStrategy.java b/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/RxJava2AsyncOperationEndStrategy.java index 2c11459f3e..4505c553d2 100644 --- a/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/RxJava2AsyncOperationEndStrategy.java +++ b/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/RxJava2AsyncOperationEndStrategy.java @@ -139,6 +139,8 @@ public final class RxJava2AsyncOperationEndStrategy implements AsyncOperationEnd private abstract class EndOnFirstNotificationConsumer extends AtomicBoolean implements Action, Consumer, BiConsumer { + private static final long serialVersionUID = 1L; + private final Context context; protected EndOnFirstNotificationConsumer(Context context) { diff --git a/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/TracingParallelFlowable.java b/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/TracingParallelFlowable.java index de279ee18b..38c6844032 100644 --- a/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/TracingParallelFlowable.java +++ b/instrumentation/rxjava/rxjava-2.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava2/TracingParallelFlowable.java @@ -45,6 +45,7 @@ class TracingParallelFlowable extends ParallelFlowable { return; } int n = subscribers.length; + @SuppressWarnings("rawtypes") Subscriber[] parents = new Subscriber[n]; for (int i = 0; i < n; i++) { Subscriber z = subscribers[i]; diff --git a/instrumentation/rxjava/rxjava-3-common/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/RxJava3AsyncOperationEndStrategy.java b/instrumentation/rxjava/rxjava-3-common/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/RxJava3AsyncOperationEndStrategy.java index 9b7a33c93c..384b0db1ae 100644 --- a/instrumentation/rxjava/rxjava-3-common/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/RxJava3AsyncOperationEndStrategy.java +++ b/instrumentation/rxjava/rxjava-3-common/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/RxJava3AsyncOperationEndStrategy.java @@ -139,6 +139,8 @@ public final class RxJava3AsyncOperationEndStrategy implements AsyncOperationEnd private abstract class EndOnFirstNotificationConsumer extends AtomicBoolean implements Action, Consumer, BiConsumer { + private static final long serialVersionUID = 1L; + private final Context context; protected EndOnFirstNotificationConsumer(Context context) { diff --git a/instrumentation/rxjava/rxjava-3.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/TracingParallelFlowable.java b/instrumentation/rxjava/rxjava-3.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/TracingParallelFlowable.java index bc6362b679..1ff0247610 100644 --- a/instrumentation/rxjava/rxjava-3.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/TracingParallelFlowable.java +++ b/instrumentation/rxjava/rxjava-3.0/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/TracingParallelFlowable.java @@ -45,6 +45,7 @@ class TracingParallelFlowable extends ParallelFlowable { return; } int n = subscribers.length; + @SuppressWarnings("rawtypes") Subscriber[] parents = new Subscriber[n]; for (int i = 0; i < n; i++) { Subscriber z = subscribers[i]; diff --git a/instrumentation/rxjava/rxjava-3.1.1/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/v3_1_1/TracingParallelFlowable.java b/instrumentation/rxjava/rxjava-3.1.1/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/v3_1_1/TracingParallelFlowable.java index 8b9a40cb01..ac21f0f8ea 100644 --- a/instrumentation/rxjava/rxjava-3.1.1/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/v3_1_1/TracingParallelFlowable.java +++ b/instrumentation/rxjava/rxjava-3.1.1/library/src/main/java/io/opentelemetry/instrumentation/rxjava3/v3_1_1/TracingParallelFlowable.java @@ -45,6 +45,7 @@ class TracingParallelFlowable extends ParallelFlowable { return; } int n = subscribers.length; + @SuppressWarnings("rawtypes") Subscriber[] parents = new Subscriber[n]; for (int i = 0; i < n; i++) { Subscriber z = subscribers[i]; diff --git a/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersGetter.java b/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersGetter.java index b630464067..e15cab7768 100644 --- a/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersGetter.java +++ b/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersGetter.java @@ -23,8 +23,10 @@ enum MessageHeadersGetter implements TextMapGetter { @Override public Iterable keys(MessageWithChannel carrier) { MessageHeaders headers = carrier.getMessage().getHeaders(); + @SuppressWarnings("unchecked") Map> nativeHeaders = - headers.get(NativeMessageHeaderAccessor.NATIVE_HEADERS, Map.class); + (Map>) + headers.get(NativeMessageHeaderAccessor.NATIVE_HEADERS, Map.class); if (nativeHeaders != null) { return nativeHeaders.keySet(); } @@ -50,8 +52,10 @@ enum MessageHeadersGetter implements TextMapGetter { @Nullable private static String getNativeHeader(MessageHeaders carrier, String key) { + @SuppressWarnings("unchecked") Map> nativeMap = - carrier.get(NativeMessageHeaderAccessor.NATIVE_HEADERS, Map.class); + (Map>) + carrier.get(NativeMessageHeaderAccessor.NATIVE_HEADERS, Map.class); if (nativeMap == null) { return null; } diff --git a/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersSetter.java b/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersSetter.java index 1564b5013b..37c540a52d 100644 --- a/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersSetter.java +++ b/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/MessageHeadersSetter.java @@ -29,7 +29,9 @@ enum MessageHeadersSetter implements TextMapSetter { private static void setNativeHeader(MessageHeaderAccessor carrier, String key, String value) { Object nativeMap = carrier.getHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS); if (nativeMap instanceof Map) { - ((Map>) nativeMap).put(key, singletonList(value)); + @SuppressWarnings("unchecked") + Map> map = ((Map>) nativeMap); + map.put(key, singletonList(value)); } } } diff --git a/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/TracingChannelInterceptor.java b/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/TracingChannelInterceptor.java index 988475dcba..913eebc0cc 100644 --- a/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/TracingChannelInterceptor.java +++ b/instrumentation/spring/spring-integration-4.1/library/src/main/java/io/opentelemetry/instrumentation/spring/integration/TracingChannelInterceptor.java @@ -186,9 +186,10 @@ final class TracingChannelInterceptor implements ExecutorChannelInterceptor { private static void ensureNativeHeadersAreMutable(MessageHeaderAccessor headerAccessor) { Object nativeMap = headerAccessor.getHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS); if (nativeMap != null && !(nativeMap instanceof LinkedMultiValueMap)) { + @SuppressWarnings("unchecked") + Map> map = (Map>) nativeMap; headerAccessor.setHeader( - NativeMessageHeaderAccessor.NATIVE_HEADERS, - new LinkedMultiValueMap<>((Map>) nativeMap)); + NativeMessageHeaderAccessor.NATIVE_HEADERS, new LinkedMultiValueMap<>(map)); } } @@ -250,6 +251,7 @@ final class TracingChannelInterceptor implements ExecutorChannelInterceptor { // unwrap spring aop proxy // based on org.springframework.test.util.AopTestUtils#getTargetObject + @SuppressWarnings("unchecked") public static T unwrapProxy(T candidate) { try { if (AopUtils.isAopProxy(candidate) && candidate instanceof Advised) { diff --git a/javaagent-extension-api/build.gradle.kts b/javaagent-extension-api/build.gradle.kts index 06d0c63042..21284aaa87 100644 --- a/javaagent-extension-api/build.gradle.kts +++ b/javaagent-extension-api/build.gradle.kts @@ -18,4 +18,7 @@ dependencies { implementation("io.opentelemetry:opentelemetry-sdk-metrics") // autoconfigure is unstable, do not expose as api implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") + + // Used by byte-buddy but not brought in as a transitive dependency. + compileOnly("com.google.code.findbugs:annotations") } diff --git a/javaagent-tooling/build.gradle.kts b/javaagent-tooling/build.gradle.kts index 002a7feb6a..9fc436f67f 100644 --- a/javaagent-tooling/build.gradle.kts +++ b/javaagent-tooling/build.gradle.kts @@ -40,6 +40,9 @@ dependencies { annotationProcessor("com.google.auto.service:auto-service") compileOnly("com.google.auto.service:auto-service") + // Used by byte-buddy but not brought in as a transitive dependency. + compileOnly("com.google.code.findbugs:annotations") + testImplementation(project(":testing-common")) testImplementation("com.google.guava:guava") testImplementation("org.assertj:assertj-core") diff --git a/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts b/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts index 8f202c4b9d..17dd0426f6 100644 --- a/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts +++ b/javaagent-tooling/javaagent-tooling-java9/build.gradle.kts @@ -17,3 +17,14 @@ dependencies { otelJava { minJavaVersionSupported.set(JavaVersion.VERSION_1_9) } + +tasks { + compileJava { + with(options) { + // Because this module targets Java 9, we trigger this compiler bug which was fixed but not + // backported to Java 9 compilation. + // https://bugs.openjdk.java.net/browse/JDK-8209058 + compilerArgs.add("-Xlint:none") + } + } +} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/RuntimeFieldBasedImplementationSupplier.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/RuntimeFieldBasedImplementationSupplier.java index 21825d7e87..c4d4b3a72d 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/RuntimeFieldBasedImplementationSupplier.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/RuntimeFieldBasedImplementationSupplier.java @@ -22,7 +22,9 @@ final class RuntimeFieldBasedImplementationSupplier getVirtualFieldImplementationClassName(type.getName(), fieldType.getName()); Class contextStoreClass = Class.forName(virtualFieldImplClassName, false, null); Method method = contextStoreClass.getMethod("getVirtualField", Class.class, Class.class); - return (VirtualField) method.invoke(null, type, fieldType); + @SuppressWarnings("unchecked") + VirtualField field = (VirtualField) method.invoke(null, type, fieldType); + return field; } catch (ClassNotFoundException exception) { throw new IllegalStateException("VirtualField not found", exception); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException exception) { diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/VirtualFieldImplementationsGenerator.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/VirtualFieldImplementationsGenerator.java index 6c5b4af770..56f508d659 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/VirtualFieldImplementationsGenerator.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/field/VirtualFieldImplementationsGenerator.java @@ -303,7 +303,7 @@ final class VirtualFieldImplementationsGenerator { } } - public static VirtualField getVirtualField(Class keyClass, Class contextClass) { + public static VirtualField getVirtualField(Class keyClass, Class contextClass) { // We do not actually check the keyClass here - but that should be fine since compiler would // check things for us. return INSTANCE; diff --git a/muzzle/build.gradle.kts b/muzzle/build.gradle.kts index 8b517c2435..b826d1bc02 100644 --- a/muzzle/build.gradle.kts +++ b/muzzle/build.gradle.kts @@ -21,6 +21,9 @@ dependencies { implementation(project(":javaagent-extension-api")) implementation("org.slf4j:slf4j-api") + // Used by byte-buddy but not brought in as a transitive dependency. + compileOnly("com.google.code.findbugs:annotations") + testImplementation(project(":testing-common")) testImplementation("com.google.guava:guava") testImplementation("org.assertj:assertj-core:3.19.0") diff --git a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/MuzzleCompilationException.java b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/MuzzleCompilationException.java index f988e2ecaa..77127fcadf 100644 --- a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/MuzzleCompilationException.java +++ b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/MuzzleCompilationException.java @@ -6,6 +6,8 @@ package io.opentelemetry.javaagent.tooling.muzzle; final class MuzzleCompilationException extends RuntimeException { + private static final long serialVersionUID = 1L; + MuzzleCompilationException(String message) { super(message); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/test/utils/ExceptionUtils.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/test/utils/ExceptionUtils.java index 62b0cf5d1f..49661028f9 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/test/utils/ExceptionUtils.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/test/utils/ExceptionUtils.java @@ -7,6 +7,7 @@ package io.opentelemetry.instrumentation.test.utils; public final class ExceptionUtils { + @SuppressWarnings("unchecked") static RuntimeException sneakyThrow(Throwable t) { if (t == null) { throw new NullPointerException("t"); @@ -15,7 +16,7 @@ public final class ExceptionUtils { } // Exactly what we want - @SuppressWarnings("TypeParameterUnusedInFormals") + @SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"}) private static T sneakyThrow0(Throwable t) throws T { throw (T) t; } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index 9648b10859..b5b593ed73 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -70,6 +70,7 @@ public abstract class InstrumentationTestRunner { } @SafeVarargs + @SuppressWarnings("varargs") public final void waitAndAssertTraces(Consumer... assertions) { waitAndAssertTraces(Arrays.asList(assertions)); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index 053d26ac09..63b9c100d8 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -398,7 +398,7 @@ public abstract class AbstractHttpClientTest { for (int i = 0; i < options.maxRedirects; i++) { assertions.add(span -> assertServerSpan(span).hasParent(trace.getSpan(0))); } - trace.hasSpansSatisfyingExactly(assertions.toArray(new Consumer[0])); + trace.hasSpansSatisfyingExactly(assertions); }); } @@ -1098,7 +1098,7 @@ public abstract class AbstractHttpClientTest { } private int doRequestWithExistingTracingHeaders(String method, URI uri) throws Exception { - Map headers = new HashMap(); + Map headers = new HashMap<>(); for (String field : testing.getOpenTelemetry().getPropagators().getTextMapPropagator().fields()) { headers.put(field, "12345789");