Skip to content

Commit bfda970

Browse files
authored
Clarify that SpanBuilder.setAttribute allows nulls (#8072)
1 parent 7ce6c5c commit bfda970

File tree

6 files changed

+17
-15
lines changed

6 files changed

+17
-15
lines changed

api/all/src/main/java/io/opentelemetry/api/trace/DefaultTracer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public NoopSpanBuilder addLink(SpanContext spanContext, Attributes attributes) {
7474
}
7575

7676
@Override
77-
public NoopSpanBuilder setAttribute(String key, String value) {
77+
public NoopSpanBuilder setAttribute(String key, @Nullable String value) {
7878
return this;
7979
}
8080

@@ -94,7 +94,7 @@ public NoopSpanBuilder setAttribute(String key, boolean value) {
9494
}
9595

9696
@Override
97-
public <T> NoopSpanBuilder setAttribute(AttributeKey<T> key, T value) {
97+
public <T> NoopSpanBuilder setAttribute(AttributeKey<T> key, @Nullable T value) {
9898
return this;
9999
}
100100

api/all/src/main/java/io/opentelemetry/api/trace/SpanBuilder.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.opentelemetry.context.Context;
1414
import java.time.Instant;
1515
import java.util.concurrent.TimeUnit;
16+
import javax.annotation.Nullable;
1617

1718
/**
1819
* {@link SpanBuilder} is used to construct {@link Span} instances which define arbitrary scopes of
@@ -175,8 +176,7 @@ public interface SpanBuilder {
175176
* Sets an attribute to the newly created {@code Span}. If {@code SpanBuilder} previously
176177
* contained a mapping for the key, the old value is replaced by the specified value.
177178
*
178-
* <p>If a null or empty String {@code value} is passed in, the behavior is undefined, and hence
179-
* strongly discouraged.
179+
* <p>Note: Providing a null value is a no-op and will not remove previously set values.
180180
*
181181
* <p>Note: It is strongly recommended to use {@link #setAttribute(AttributeKey, Object)}, and
182182
* pre-allocate your keys, if possible.
@@ -185,7 +185,7 @@ public interface SpanBuilder {
185185
* @param value the value for this attribute.
186186
* @return this.
187187
*/
188-
SpanBuilder setAttribute(String key, String value);
188+
SpanBuilder setAttribute(String key, @Nullable String value);
189189

190190
/**
191191
* Sets an attribute to the newly created {@code Span}. If {@code SpanBuilder} previously
@@ -230,13 +230,13 @@ public interface SpanBuilder {
230230
* Sets an attribute to the newly created {@code Span}. If {@code SpanBuilder} previously
231231
* contained a mapping for the key, the old value is replaced by the specified value.
232232
*
233-
* <p>Note: the behavior of null values is undefined, and hence strongly discouraged.
233+
* <p>Note: Providing a null value is a no-op.
234234
*
235235
* @param key the key for this attribute.
236236
* @param value the value for this attribute.
237237
* @return this.
238238
*/
239-
<T> SpanBuilder setAttribute(AttributeKey<T> key, T value);
239+
<T> SpanBuilder setAttribute(AttributeKey<T> key, @Nullable T value);
240240

241241
/**
242242
* Sets an attribute to the newly created {@code Span}. If {@code SpanBuilder} previously

api/incubator/src/main/java/io/opentelemetry/api/incubator/trace/ExtendedDefaultTracer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public NoopSpanBuilder addLink(SpanContext spanContext, Attributes attributes) {
9494
}
9595

9696
@Override
97-
public NoopSpanBuilder setAttribute(String key, String value) {
97+
public NoopSpanBuilder setAttribute(String key, @Nullable String value) {
9898
return this;
9999
}
100100

@@ -114,7 +114,7 @@ public NoopSpanBuilder setAttribute(String key, boolean value) {
114114
}
115115

116116
@Override
117-
public <T> NoopSpanBuilder setAttribute(AttributeKey<T> key, T value) {
117+
public <T> NoopSpanBuilder setAttribute(AttributeKey<T> key, @Nullable T value) {
118118
return this;
119119
}
120120

api/incubator/src/main/java/io/opentelemetry/api/incubator/trace/ExtendedSpanBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Map;
1919
import java.util.concurrent.TimeUnit;
2020
import java.util.function.BiConsumer;
21+
import javax.annotation.Nullable;
2122

2223
/** Extended {@link SpanBuilder} with experimental APIs. */
2324
public interface ExtendedSpanBuilder extends SpanBuilder {
@@ -109,7 +110,7 @@ <E extends Throwable> void startAndRun(
109110

110111
/** {@inheritDoc} */
111112
@Override
112-
ExtendedSpanBuilder setAttribute(String key, String value);
113+
ExtendedSpanBuilder setAttribute(String key, @Nullable String value);
113114

114115
/** {@inheritDoc} */
115116
@Override
@@ -125,7 +126,7 @@ <E extends Throwable> void startAndRun(
125126

126127
/** {@inheritDoc} */
127128
@Override
128-
<T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, T value);
129+
<T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, @Nullable T value);
129130

130131
/** {@inheritDoc} */
131132
@Override

sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ExtendedSdkSpanBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Map;
2323
import java.util.concurrent.TimeUnit;
2424
import java.util.function.BiConsumer;
25+
import javax.annotation.Nullable;
2526

2627
/** {@link ExtendedSdkSpanBuilder} is SDK implementation of {@link ExtendedSpanBuilder}. */
2728
final class ExtendedSdkSpanBuilder extends SdkSpanBuilder implements ExtendedSpanBuilder {
@@ -65,7 +66,7 @@ public ExtendedSpanBuilder addLink(SpanContext spanContext, Attributes attribute
6566
}
6667

6768
@Override
68-
public ExtendedSpanBuilder setAttribute(String key, String value) {
69+
public ExtendedSpanBuilder setAttribute(String key, @Nullable String value) {
6970
super.setAttribute(key, value);
7071
return this;
7172
}
@@ -89,7 +90,7 @@ public ExtendedSpanBuilder setAttribute(String key, boolean value) {
8990
}
9091

9192
@Override
92-
public <T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, T value) {
93+
public <T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, @Nullable T value) {
9394
super.setAttribute(key, value);
9495
return this;
9596
}

sdk/trace/src/main/java/io/opentelemetry/sdk/trace/SdkSpanBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private void addLink(LinkData link) {
126126
}
127127

128128
@Override
129-
public SpanBuilder setAttribute(String key, String value) {
129+
public SpanBuilder setAttribute(String key, @Nullable String value) {
130130
return setAttribute(stringKey(key), value);
131131
}
132132

@@ -146,7 +146,7 @@ public SpanBuilder setAttribute(String key, boolean value) {
146146
}
147147

148148
@Override
149-
public <T> SpanBuilder setAttribute(AttributeKey<T> key, T value) {
149+
public <T> SpanBuilder setAttribute(AttributeKey<T> key, @Nullable T value) {
150150
if (key == null || key.getKey().isEmpty() || value == null) {
151151
return this;
152152
}

0 commit comments

Comments
 (0)