diff --git a/api/all/src/main/java/io/opentelemetry/api/internal/ReadOnlyArrayMap.java b/api/all/src/main/java/io/opentelemetry/api/internal/ReadOnlyArrayMap.java index 0d178e212b0..a1befa5a5e4 100644 --- a/api/all/src/main/java/io/opentelemetry/api/internal/ReadOnlyArrayMap.java +++ b/api/all/src/main/java/io/opentelemetry/api/internal/ReadOnlyArrayMap.java @@ -72,7 +72,8 @@ public boolean containsKey(Object o) { @Override public boolean containsValue(Object o) { for (int i = 0; i < array.size(); i += 2) { - if (value(i + 1).equals(o)) { + V value = value(i + 1); + if (o == null ? value == null : o.equals(value)) { return true; } } diff --git a/api/all/src/test/java/io/opentelemetry/api/internal/ReadOnlyArrayMapTest.java b/api/all/src/test/java/io/opentelemetry/api/internal/ReadOnlyArrayMapTest.java index 54313d24bf5..4a6117f7188 100644 --- a/api/all/src/test/java/io/opentelemetry/api/internal/ReadOnlyArrayMapTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/internal/ReadOnlyArrayMapTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.api.internal; +import static org.assertj.core.api.Assertions.assertThat; + import com.google.common.testing.EqualsTester; import java.util.Arrays; import java.util.Collections; @@ -25,4 +27,14 @@ void equalsHashCode() { .addEqualityGroup(empty, empty) .testEquals(); } + + @Test + void containsValueNull() { + Map map = ReadOnlyArrayMap.wrap(Arrays.asList("a", null)); + Map mapWithoutNull = ReadOnlyArrayMap.wrap(Arrays.asList("a", "b")); + + assertThat(map.containsValue(null)).isTrue(); + assertThat(map.containsValue("b")).isFalse(); + assertThat(mapWithoutNull.containsValue(null)).isFalse(); + } }