From e1c4cd21500b79b192b4489339be39a63606a92e Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Fri, 30 Oct 2020 15:14:16 +0900 Subject: [PATCH] Replace AutoValue usage in baggage with final concrete classes. --- .../io/opentelemetry/api/baggage/Entry.java | 68 ++++++++++++++++--- .../api/baggage/EntryMetadata.java | 55 +++++++++++---- .../api/baggage/ImmutableBaggage.java | 2 +- .../api/baggage/EntryMetadataTest.java | 5 ++ .../propagation/W3CBaggagePropagatorTest.java | 2 +- .../opentracingshim/SpanContextShim.java | 2 +- 6 files changed, 108 insertions(+), 26 deletions(-) diff --git a/api/src/main/java/io/opentelemetry/api/baggage/Entry.java b/api/src/main/java/io/opentelemetry/api/baggage/Entry.java index b0d337506c4..04de9b18f2d 100644 --- a/api/src/main/java/io/opentelemetry/api/baggage/Entry.java +++ b/api/src/main/java/io/opentelemetry/api/baggage/Entry.java @@ -5,17 +5,13 @@ package io.opentelemetry.api.baggage; -import com.google.auto.value.AutoValue; import io.opentelemetry.api.internal.StringUtils; import io.opentelemetry.api.internal.Utils; import javax.annotation.concurrent.Immutable; /** String-String key-value pair, along with {@link EntryMetadata}. */ @Immutable -@AutoValue -public abstract class Entry { - - Entry() {} +public final class Entry { /** * Creates an {@code Entry} from the given key, value and metadata. @@ -28,7 +24,7 @@ public abstract class Entry { public static Entry create(String key, String value, EntryMetadata entryMetadata) { Utils.checkArgument(keyIsValid(key), "Invalid entry key name: %s", key); Utils.checkArgument(isValueValid(value), "Invalid entry value: %s", value); - return new AutoValue_Entry(key, value, entryMetadata); + return new Entry(key, value, entryMetadata); } /** @@ -39,7 +35,17 @@ public static Entry create(String key, String value, EntryMetadata entryMetadata * @return a {@code Entry}. */ public static Entry create(String key, String value) { - return create(key, value, EntryMetadata.EMPTY); + return create(key, value, EntryMetadata.empty()); + } + + private final String key; + private final String value; + private final EntryMetadata entryMetadata; + + private Entry(String key, String value, EntryMetadata entryMetadata) { + this.key = key; + this.value = value; + this.entryMetadata = entryMetadata; } /** @@ -47,21 +53,63 @@ public static Entry create(String key, String value) { * * @return the entry's key. */ - public abstract String getKey(); + public String getKey() { + return key; + } /** * Returns the entry's value. * * @return the entry's value. */ - public abstract String getValue(); + public String getValue() { + return value; + } /** * Returns the (optional) {@link EntryMetadata} associated with this {@link Entry}. * * @return the {@code EntryMetadata}. */ - public abstract EntryMetadata getEntryMetadata(); + public EntryMetadata getEntryMetadata() { + return entryMetadata; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Entry)) { + return false; + } + Entry entry = (Entry) o; + return key.equals(entry.key) + && value.equals(entry.value) + && entryMetadata.equals(entry.entryMetadata); + } + + @Override + public int hashCode() { + int result = key.hashCode(); + result = 31 * result + value.hashCode(); + result = 31 * result + entryMetadata.hashCode(); + return result; + } + + @Override + public String toString() { + return "Entry{" + + "key='" + + key + + '\'' + + ", value='" + + value + + '\'' + + ", entryMetadata=" + + entryMetadata + + '}'; + } /** * Determines whether the given {@code String} is a valid entry key. diff --git a/api/src/main/java/io/opentelemetry/api/baggage/EntryMetadata.java b/api/src/main/java/io/opentelemetry/api/baggage/EntryMetadata.java index a17e02faed1..caf14106229 100644 --- a/api/src/main/java/io/opentelemetry/api/baggage/EntryMetadata.java +++ b/api/src/main/java/io/opentelemetry/api/baggage/EntryMetadata.java @@ -5,7 +5,6 @@ package io.opentelemetry.api.baggage; -import com.google.auto.value.AutoValue; import javax.annotation.concurrent.Immutable; /** @@ -13,20 +12,26 @@ * wrapper for a String metadata value. */ @Immutable -@AutoValue -public abstract class EntryMetadata { - public static final EntryMetadata EMPTY = create(""); +public final class EntryMetadata { + private static final EntryMetadata EMPTY = create(""); - EntryMetadata() {} + /** Returns an {@link EntryMetadata} with no value. */ + public static EntryMetadata empty() { + return EMPTY; + } - /** - * Creates an {@link EntryMetadata} with the given value. - * - * @param metadata TTL of an {@code Entry}. - * @return an {@code EntryMetadata}. - */ + /** Returns an {@link EntryMetadata} with the given value. */ public static EntryMetadata create(String metadata) { - return new AutoValue_EntryMetadata(metadata); + if (metadata == null) { + return empty(); + } + return new EntryMetadata(metadata); + } + + private final String metadata; + + private EntryMetadata(String metadata) { + this.metadata = metadata; } /** @@ -34,5 +39,29 @@ public static EntryMetadata create(String metadata) { * * @return the raw metadata value. */ - public abstract String getValue(); + public String getValue() { + return metadata; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof EntryMetadata)) { + return false; + } + EntryMetadata that = (EntryMetadata) o; + return metadata.equals(that.metadata); + } + + @Override + public int hashCode() { + return metadata.hashCode(); + } + + @Override + public String toString() { + return "'" + metadata + "'"; + } } diff --git a/api/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java b/api/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java index 8809ec17f96..f7feecd43fb 100644 --- a/api/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java +++ b/api/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java @@ -148,7 +148,7 @@ public Baggage.Builder put(String key, String value, EntryMetadata entryMetadata public Baggage.Builder put(String key, String value) { entries.put( Objects.requireNonNull(key, "key"), - Entry.create(key, Objects.requireNonNull(value, "value"), EntryMetadata.EMPTY)); + Entry.create(key, Objects.requireNonNull(value, "value"), EntryMetadata.empty())); return this; } diff --git a/api/src/test/java/io/opentelemetry/api/baggage/EntryMetadataTest.java b/api/src/test/java/io/opentelemetry/api/baggage/EntryMetadataTest.java index 90e979bbdf6..b8316a5292b 100644 --- a/api/src/test/java/io/opentelemetry/api/baggage/EntryMetadataTest.java +++ b/api/src/test/java/io/opentelemetry/api/baggage/EntryMetadataTest.java @@ -25,4 +25,9 @@ void testEquals() { .addEqualityGroup(EntryMetadata.create("other value")) .testEquals(); } + + @Test + void nullValue() { + assertThat(EntryMetadata.create(null)).isEqualTo(EntryMetadata.empty()); + } } diff --git a/api/src/test/java/io/opentelemetry/api/baggage/propagation/W3CBaggagePropagatorTest.java b/api/src/test/java/io/opentelemetry/api/baggage/propagation/W3CBaggagePropagatorTest.java index 04412689fec..c352e417692 100644 --- a/api/src/test/java/io/opentelemetry/api/baggage/propagation/W3CBaggagePropagatorTest.java +++ b/api/src/test/java/io/opentelemetry/api/baggage/propagation/W3CBaggagePropagatorTest.java @@ -114,7 +114,7 @@ void extract_fullComplexities() { Baggage expectedBaggage = Baggage.builder() .put("key1", "value1", EntryMetadata.create("metadata-key = value; othermetadata")) - .put("key2", "value2", EntryMetadata.EMPTY) + .put("key2", "value2", EntryMetadata.empty()) .put("key3", "value3") .build(); assertThat(Baggage.fromContext(result)).isEqualTo(expectedBaggage); diff --git a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanContextShim.java b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanContextShim.java index f00bd4b021e..bb5b28aaaad 100644 --- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanContextShim.java +++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanContextShim.java @@ -43,7 +43,7 @@ SpanContextShim newWithKeyValue(String key, String value) { Context parentContext = Context.current().with(baggage); Baggage.Builder builder = Baggage.builder().setParent(parentContext); - builder.put(key, value, EntryMetadata.EMPTY); + builder.put(key, value, EntryMetadata.empty()); return new SpanContextShim(telemetryInfo(), context, builder.build()); }