From e34b1d78cf7d25d2df86fef9df91953176187bac Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Thu, 6 Feb 2025 10:08:14 -0600 Subject: [PATCH 1/7] Add generic Value#convert(Object) method --- .../io/opentelemetry/api/common/Value.java | 73 +++++++++++++++++++ .../io/opentelemetry/api/logs/ValueTest.java | 59 +++++++++++++++ .../current_vs_latest/opentelemetry-api.txt | 5 +- 3 files changed, 136 insertions(+), 1 deletion(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/common/Value.java b/api/all/src/main/java/io/opentelemetry/api/common/Value.java index a29be801e27..30199973970 100644 --- a/api/all/src/main/java/io/opentelemetry/api/common/Value.java +++ b/api/all/src/main/java/io/opentelemetry/api/common/Value.java @@ -6,6 +6,9 @@ package io.opentelemetry.api.common; import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -84,6 +87,76 @@ static Value> of(Map> value) { return KeyValueList.createFromMap(value); } + /** + * Convert a generic object to {@link Value}. + * + *

The following types are supported. If the {@code object} (or any nested data structures) + * contains an unsupported type, an {@link IllegalArgumentException} is thrown. + * + *

    + *
  • {@link Long} + *
  • {@link Integer} + *
  • {@link Float} + *
  • {@link Double} + *
  • {@link Boolean} + *
  • {@code byte[]} + *
  • {@code List}, where each list entry is a supported type + *
  • {@code Map}, where each value is a supported type + *
+ * + * @param object the object to convert + * @return the equivalent {@link Value} + * @throws IllegalArgumentException if not able to convert the object to {@link Value} + */ + static Value convert(Object object) { + if (object instanceof Integer) { + return Value.of((Integer) object); + } + if (object instanceof Long) { + return Value.of((Long) object); + } + if (object instanceof Float) { + return Value.of((Float) object); + } + if (object instanceof Double) { + return Value.of((Double) object); + } + if (object instanceof Boolean) { + return Value.of((Boolean) object); + } + if (object instanceof String) { + return Value.of((String) object); + } + if (object instanceof byte[]) { + return Value.of((byte[]) object); + } + if (object instanceof List) { + List list = (List) object; + List> valueList = new ArrayList<>(list.size()); + for (Object entry : list) { + valueList.add(Value.convert(entry)); + } + return Value.of(Collections.unmodifiableList(valueList)); + } + if (object instanceof Map) { + Map map = (Map) object; + Map> valueMap = new HashMap<>(map.size()); + map.forEach( + (key, value) -> { + if (!(key instanceof String)) { + throw new IllegalArgumentException( + "Cannot convert map with key type " + + key.getClass().getSimpleName() + + " to value"); + } + valueMap.put((String) key, Value.convert(value)); + }); + return Value.of(Collections.unmodifiableMap(valueMap)); + } + throw new IllegalArgumentException( + "Cannot convert object of type " + object.getClass().getSimpleName() + " to value"); + } + /** Returns the type of this {@link Value}. Useful for building switch statements. */ ValueType getType(); diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index ae83e0dd44c..a3daa65a326 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -9,6 +9,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.params.provider.Arguments.arguments; +import com.google.common.collect.ImmutableMap; import io.opentelemetry.api.common.KeyValue; import io.opentelemetry.api.common.Value; import io.opentelemetry.api.common.ValueType; @@ -20,7 +21,9 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Objects; import java.util.stream.Stream; +import org.assertj.core.data.Offset; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -212,4 +215,60 @@ void valueByteAsString() { byte[] decodedBytes = Base64.getDecoder().decode(base64Encoded); assertThat(new String(decodedBytes, StandardCharsets.UTF_8)).isEqualTo(str); } + + @ParameterizedTest + @MethodSource("convertArgs") + void convert(Object object, Value expected) { + Value converted = Value.convert(object); + if (Objects.requireNonNull(expected.getType()) == ValueType.DOUBLE) { + assertThat(converted.getType()).isEqualTo(ValueType.DOUBLE); + assertThat((Double) converted.getValue()) + .isEqualTo((Double) expected.getValue(), Offset.offset(.001)); + } else { + assertThat(converted).isEqualTo(expected); + } + } + + @SuppressWarnings("cast") + private static Stream convertArgs() { + return Stream.of( + Arguments.of((int) 1, Value.of(1)), + Arguments.of(1L, Value.of(1L)), + Arguments.of(1L, Value.of(1L)), + Arguments.of(Long.valueOf(1L), Value.of(1L)), + Arguments.of((float) 1.1, Value.of(1.1)), + Arguments.of(1.1D, Value.of(1.1)), + Arguments.of(Double.valueOf(1.1D), Value.of(1.1)), + Arguments.of(true, Value.of(true)), + Arguments.of(Boolean.valueOf(true), Value.of(true)), + Arguments.of("value", Value.of("value")), + Arguments.of( + "value".getBytes(StandardCharsets.UTF_8), + Value.of("value".getBytes(StandardCharsets.UTF_8))), + Arguments.of( + Arrays.asList("value1", "value2"), + Value.of(Arrays.asList(Value.of("value1"), Value.of("value2")))), + Arguments.of( + Arrays.asList("value", true), + Value.of(Arrays.asList(Value.of("value"), Value.of(true)))), + Arguments.of( + ImmutableMap.builder().put("key1", "value").put("key2", true).build(), + Value.of( + ImmutableMap.>builder() + .put("key1", Value.of("value")) + .put("key2", Value.of(true)) + .build())), + Arguments.of( + ImmutableMap.builder() + .put("key1", "value") + .put("key2", true) + .put("key3", Collections.singletonMap("key4", "value")) + .build(), + Value.of( + ImmutableMap.>builder() + .put("key1", Value.of("value")) + .put("key2", Value.of(true)) + .put("key3", Value.of(Collections.singletonMap("key4", Value.of("value")))) + .build()))); + } } diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt index 58b43aee602..949233e2ff0 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt @@ -1,2 +1,5 @@ Comparing source compatibility of opentelemetry-api-1.47.0-SNAPSHOT.jar against opentelemetry-api-1.46.0.jar -No changes. \ No newline at end of file +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.common.Value (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + GENERIC TEMPLATES: === T:java.lang.Object + +++ NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.api.common.Value convert(java.lang.Object) From fc212f968b0a4cf3b8b98931f73adcf31cb8d031 Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Thu, 6 Feb 2025 13:24:34 -0600 Subject: [PATCH 2/7] spotless --- .../java/io/opentelemetry/api/logs/ValueTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index a3daa65a326..8c7dbca86c3 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -220,13 +220,13 @@ void valueByteAsString() { @MethodSource("convertArgs") void convert(Object object, Value expected) { Value converted = Value.convert(object); - if (Objects.requireNonNull(expected.getType()) == ValueType.DOUBLE) { - assertThat(converted.getType()).isEqualTo(ValueType.DOUBLE); - assertThat((Double) converted.getValue()) - .isEqualTo((Double) expected.getValue(), Offset.offset(.001)); - } else { - assertThat(converted).isEqualTo(expected); - } + if (Objects.requireNonNull(expected.getType()) == ValueType.DOUBLE) { + assertThat(converted.getType()).isEqualTo(ValueType.DOUBLE); + assertThat((Double) converted.getValue()) + .isEqualTo((Double) expected.getValue(), Offset.offset(.001)); + } else { + assertThat(converted).isEqualTo(expected); + } } @SuppressWarnings("cast") From 5dca13a1ca0dea9f209da77e680a16f7ed43ba74 Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Thu, 6 Feb 2025 13:49:33 -0600 Subject: [PATCH 3/7] Add tests for unsupported types --- .../io/opentelemetry/api/logs/ValueTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index 8c7dbca86c3..ea2e680fe88 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -13,6 +13,8 @@ import io.opentelemetry.api.common.KeyValue; import io.opentelemetry.api.common.Value; import io.opentelemetry.api.common.ValueType; +import java.math.BigDecimal; +import java.math.BigInteger; import java.nio.ByteBuffer; import java.nio.ReadOnlyBufferException; import java.nio.charset.StandardCharsets; @@ -271,4 +273,19 @@ private static Stream convertArgs() { .put("key3", Value.of(Collections.singletonMap("key4", Value.of("value")))) .build()))); } + + @ParameterizedTest + @MethodSource("convertUnsupportedArgs") + void convertUnsupported(Object object) { + assertThatThrownBy(() -> Value.convert(object)).isInstanceOf(IllegalArgumentException.class); + } + + private static Stream convertUnsupportedArgs() { + return Stream.of( + Arguments.of(new Object()), + Arguments.of(new BigInteger("1")), + Arguments.of(new BigDecimal("1.1")), + Arguments.of(Collections.singletonList(new Object())), + Arguments.of(Collections.singletonMap(new Object(), "value"))); + } } From e408607b9f5d30b7285fbfd06ecd143985301983 Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Fri, 7 Feb 2025 17:56:54 -0600 Subject: [PATCH 4/7] rerun japicmp --- docs/apidiffs/current_vs_latest/opentelemetry-api.txt | 2 +- .../current_vs_latest/opentelemetry-context.txt | 2 +- .../opentelemetry-exporter-common.txt | 2 +- .../opentelemetry-exporter-logging-otlp.txt | 2 +- .../opentelemetry-exporter-logging.txt | 2 +- .../opentelemetry-exporter-otlp-common.txt | 2 +- .../current_vs_latest/opentelemetry-exporter-otlp.txt | 2 +- ...ntelemetry-exporter-sender-grpc-managed-channel.txt | 2 +- .../opentelemetry-exporter-sender-jdk.txt | 2 +- .../opentelemetry-exporter-sender-okhttp.txt | 2 +- .../opentelemetry-exporter-zipkin.txt | 2 +- .../opentelemetry-extension-kotlin.txt | 2 +- .../opentelemetry-extension-trace-propagators.txt | 2 +- .../opentelemetry-opentracing-shim.txt | 2 +- .../current_vs_latest/opentelemetry-sdk-common.txt | 10 ++-------- .../opentelemetry-sdk-extension-autoconfigure-spi.txt | 2 +- .../opentelemetry-sdk-extension-autoconfigure.txt | 9 ++------- ...entelemetry-sdk-extension-jaeger-remote-sampler.txt | 2 +- .../current_vs_latest/opentelemetry-sdk-logs.txt | 2 +- .../current_vs_latest/opentelemetry-sdk-metrics.txt | 2 +- .../current_vs_latest/opentelemetry-sdk-testing.txt | 2 +- .../current_vs_latest/opentelemetry-sdk-trace.txt | 2 +- docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt | 2 +- 23 files changed, 25 insertions(+), 36 deletions(-) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt index 96cbc15cb64..84bbf4b18b6 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-api.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-api.txt @@ -1,4 +1,4 @@ -Comparing source compatibility of opentelemetry-api-1.48.0-SNAPSHOT.jar against opentelemetry-api-1.46.0.jar +Comparing source compatibility of opentelemetry-api-1.48.0-SNAPSHOT.jar against opentelemetry-api-1.47.0.jar *** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.api.common.Value (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 GENERIC TEMPLATES: === T:java.lang.Object diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-context.txt b/docs/apidiffs/current_vs_latest/opentelemetry-context.txt index 6e6c4fc3830..235a52aabe8 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-context.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-context.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-context-1.48.0-SNAPSHOT.jar against opentelemetry-context-1.46.0.jar +Comparing source compatibility of opentelemetry-context-1.48.0-SNAPSHOT.jar against opentelemetry-context-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt index 50a2a0a3027..aec4d1f1e22 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-common.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-common-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-common-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-common-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-common-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging-otlp.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging-otlp.txt index 8541b62f197..9d2c3d079cc 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging-otlp.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging-otlp.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-logging-otlp-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-logging-otlp-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-logging-otlp-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-logging-otlp-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging.txt index a79bc534a95..043fcef4f5a 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-logging.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-logging-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-logging-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-logging-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-logging-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp-common.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp-common.txt index 9aab0c36358..a7a3f42c060 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp-common.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp-common.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-otlp-common-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-common-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-otlp-common-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-common-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt index 508188f526d..27040235c7a 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-otlp.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-otlp-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-otlp-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-otlp-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt index 2ea23299c17..f00bcb039d8 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-grpc-managed-channel.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-sender-grpc-managed-channel-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-sender-grpc-managed-channel-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt index b3752adeb25..eed06090d2e 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-jdk.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-sender-jdk-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-sender-jdk-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-sender-jdk-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt index c9622b4f843..bc70f8e0ea5 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-sender-okhttp.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-sender-okhttp-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-sender-okhttp-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-sender-okhttp-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-zipkin.txt b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-zipkin.txt index 3e644092e42..1e8e580b7ad 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-exporter-zipkin.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-exporter-zipkin.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-exporter-zipkin-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-zipkin-1.46.0.jar +Comparing source compatibility of opentelemetry-exporter-zipkin-1.48.0-SNAPSHOT.jar against opentelemetry-exporter-zipkin-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-extension-kotlin.txt b/docs/apidiffs/current_vs_latest/opentelemetry-extension-kotlin.txt index 32b211eeca2..849d729b4a4 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-extension-kotlin.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-extension-kotlin.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-extension-kotlin-1.48.0-SNAPSHOT.jar against opentelemetry-extension-kotlin-1.46.0.jar +Comparing source compatibility of opentelemetry-extension-kotlin-1.48.0-SNAPSHOT.jar against opentelemetry-extension-kotlin-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-extension-trace-propagators.txt b/docs/apidiffs/current_vs_latest/opentelemetry-extension-trace-propagators.txt index 1344ad422ae..9fb65a14f73 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-extension-trace-propagators.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-extension-trace-propagators.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-extension-trace-propagators-1.48.0-SNAPSHOT.jar against opentelemetry-extension-trace-propagators-1.46.0.jar +Comparing source compatibility of opentelemetry-extension-trace-propagators-1.48.0-SNAPSHOT.jar against opentelemetry-extension-trace-propagators-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt b/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt index a3f7d238e17..a6f559812df 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-opentracing-shim.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-opentracing-shim-1.48.0-SNAPSHOT.jar against opentelemetry-opentracing-shim-1.46.0.jar +Comparing source compatibility of opentelemetry-opentracing-shim-1.48.0-SNAPSHOT.jar against opentelemetry-opentracing-shim-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt index ec4e5a7f049..7c0297328f7 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-common.txt @@ -1,8 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-common-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-common-1.46.0.jar -**** MODIFIED CLASS: PUBLIC ABSTRACT io.opentelemetry.sdk.common.export.RetryPolicy (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) java.util.function.Predicate getRetryExceptionPredicate() - +++ NEW ANNOTATION: javax.annotation.Nullable -**** MODIFIED CLASS: PUBLIC ABSTRACT STATIC io.opentelemetry.sdk.common.export.RetryPolicy$RetryPolicyBuilder (not serializable) - === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 - +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.common.export.RetryPolicy$RetryPolicyBuilder setRetryExceptionPredicate(java.util.function.Predicate) +Comparing source compatibility of opentelemetry-sdk-common-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-common-1.47.0.jar +No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt index 87ca631eefc..57915cb9be6 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure-spi.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-spi-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-spi-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-spi-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-spi-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure.txt index b7475a9996e..9cba7e68928 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-autoconfigure.txt @@ -1,7 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-1.46.0.jar -+++ NEW CLASS: PUBLIC(+) FINAL(+) io.opentelemetry.sdk.autoconfigure.EnvironmentResourceProvider (not serializable) - +++ CLASS FILE FORMAT VERSION: 52.0 <- n.a. - +++ NEW SUPERCLASS: java.lang.Object - +++ NEW CONSTRUCTOR: PUBLIC(+) EnvironmentResourceProvider() - +++ NEW METHOD: PUBLIC(+) io.opentelemetry.sdk.resources.Resource createResource(io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties) - +++ NEW METHOD: PUBLIC(+) int order() +Comparing source compatibility of opentelemetry-sdk-extension-autoconfigure-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-extension-autoconfigure-1.47.0.jar +No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-jaeger-remote-sampler.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-jaeger-remote-sampler.txt index a1c735c7b0e..2f6326485f7 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-jaeger-remote-sampler.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-extension-jaeger-remote-sampler.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-extension-jaeger-remote-sampler-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-extension-jaeger-remote-sampler-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-extension-jaeger-remote-sampler-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-extension-jaeger-remote-sampler-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt index c3ba7418617..1fc34295832 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-logs.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-logs-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-logs-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-logs-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-logs-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt index 2758928a18a..3cfe387fe8f 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-metrics.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-metrics-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-metrics-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-metrics-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt index 1b5723b4379..d0bdcc79192 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-testing-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-testing-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-testing-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt index e4072089f70..48f428554cc 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-trace-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-trace-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-trace-1.47.0.jar No changes. \ No newline at end of file diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt index e99648d6ed2..42ee3328a83 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk.txt @@ -1,2 +1,2 @@ -Comparing source compatibility of opentelemetry-sdk-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-1.46.0.jar +Comparing source compatibility of opentelemetry-sdk-1.48.0-SNAPSHOT.jar against opentelemetry-sdk-1.47.0.jar No changes. \ No newline at end of file From 5844a5515ff935b7e5c392e7836d95d6a9169b2f Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Mon, 24 Feb 2025 10:19:46 -0600 Subject: [PATCH 5/7] PR feedback --- api/all/src/main/java/io/opentelemetry/api/common/Value.java | 2 +- api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/common/Value.java b/api/all/src/main/java/io/opentelemetry/api/common/Value.java index 30199973970..963efa60ab4 100644 --- a/api/all/src/main/java/io/opentelemetry/api/common/Value.java +++ b/api/all/src/main/java/io/opentelemetry/api/common/Value.java @@ -108,7 +108,7 @@ static Value> of(Map> value) { * @return the equivalent {@link Value} * @throws IllegalArgumentException if not able to convert the object to {@link Value} */ - static Value convert(Object object) { + static Value convert(Object object) throws IllegalArgumentException { if (object instanceof Integer) { return Value.of((Integer) object); } diff --git a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java index ea2e680fe88..4f3d370df89 100644 --- a/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/logs/ValueTest.java @@ -236,7 +236,6 @@ private static Stream convertArgs() { return Stream.of( Arguments.of((int) 1, Value.of(1)), Arguments.of(1L, Value.of(1L)), - Arguments.of(1L, Value.of(1L)), Arguments.of(Long.valueOf(1L), Value.of(1L)), Arguments.of((float) 1.1, Value.of(1.1)), Arguments.of(1.1D, Value.of(1.1)), From dc2c09369ad58f8a2bae60a76b26268613969f0d Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Tue, 2 Dec 2025 16:31:17 -0600 Subject: [PATCH 6/7] PR feedback --- api/all/src/main/java/io/opentelemetry/api/common/Value.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/common/Value.java b/api/all/src/main/java/io/opentelemetry/api/common/Value.java index ee5aa6a68a7..8a02bfb046c 100644 --- a/api/all/src/main/java/io/opentelemetry/api/common/Value.java +++ b/api/all/src/main/java/io/opentelemetry/api/common/Value.java @@ -7,7 +7,6 @@ import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -137,7 +136,7 @@ static Value convert(Object object) throws IllegalArgumentException { for (Object entry : list) { valueList.add(Value.convert(entry)); } - return Value.of(Collections.unmodifiableList(valueList)); + return Value.of(valueList); } if (object instanceof Map) { Map map = (Map) object; @@ -152,7 +151,7 @@ static Value convert(Object object) throws IllegalArgumentException { } valueMap.put((String) key, Value.convert(value)); }); - return Value.of(Collections.unmodifiableMap(valueMap)); + return Value.of(valueMap); } throw new IllegalArgumentException( "Cannot convert object of type " + object.getClass().getSimpleName() + " to value"); From 15426579d8e7df2b74bc89784ab16b9407a3ebbc Mon Sep 17 00:00:00 2001 From: Jack Berg Date: Wed, 10 Dec 2025 12:44:54 -0600 Subject: [PATCH 7/7] PR feedback --- .../src/main/java/io/opentelemetry/api/common/Value.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/common/Value.java b/api/all/src/main/java/io/opentelemetry/api/common/Value.java index 8a02bfb046c..5de28596408 100644 --- a/api/all/src/main/java/io/opentelemetry/api/common/Value.java +++ b/api/all/src/main/java/io/opentelemetry/api/common/Value.java @@ -87,10 +87,10 @@ static Value> of(Map> value) { } /** - * Convert a generic object to {@link Value}. + * Convert an object of primitives, Lists, and Maps (nested in any manner) to {@link Value}. * - *

The following types are supported. If the {@code object} (or any nested data structures) - * contains an unsupported type, an {@link IllegalArgumentException} is thrown. + *

Specifically, the following types are supported. If the {@code object} (or any nested data + * structures) contains an unsupported type, an {@link IllegalArgumentException} is thrown. * *

    *
  • {@link Long}