Skip to content

Commit 0aacc55

Browse files
authored
Narrow ExtendedSpanBuilder return types for chaining (#6514)
1 parent a09eff6 commit 0aacc55

File tree

3 files changed

+75
-11
lines changed

3 files changed

+75
-11
lines changed

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,17 @@
66
package io.opentelemetry.api.incubator.trace;
77

88
import io.opentelemetry.api.OpenTelemetry;
9+
import io.opentelemetry.api.common.AttributeKey;
10+
import io.opentelemetry.api.common.Attributes;
911
import io.opentelemetry.api.trace.Span;
1012
import io.opentelemetry.api.trace.SpanBuilder;
13+
import io.opentelemetry.api.trace.SpanContext;
14+
import io.opentelemetry.api.trace.SpanKind;
15+
import io.opentelemetry.context.Context;
1116
import io.opentelemetry.context.propagation.ContextPropagators;
17+
import java.time.Instant;
1218
import java.util.Map;
19+
import java.util.concurrent.TimeUnit;
1320
import java.util.function.BiConsumer;
1421

1522
/** Extended {@link SpanBuilder} with experimental APIs. */
@@ -90,4 +97,60 @@ <T, E extends Throwable> T startAndCall(
9097
*/
9198
<E extends Throwable> void startAndRun(
9299
SpanRunnable<E> runnable, BiConsumer<Span, Throwable> handleException) throws E;
100+
101+
/** {@inheritDoc} */
102+
@Override
103+
ExtendedSpanBuilder setParent(Context context);
104+
105+
/** {@inheritDoc} */
106+
@Override
107+
ExtendedSpanBuilder setNoParent();
108+
109+
/** {@inheritDoc} */
110+
@Override
111+
ExtendedSpanBuilder addLink(SpanContext spanContext);
112+
113+
/** {@inheritDoc} */
114+
@Override
115+
ExtendedSpanBuilder addLink(SpanContext spanContext, Attributes attributes);
116+
117+
/** {@inheritDoc} */
118+
@Override
119+
ExtendedSpanBuilder setAttribute(String key, String value);
120+
121+
/** {@inheritDoc} */
122+
@Override
123+
ExtendedSpanBuilder setAttribute(String key, long value);
124+
125+
/** {@inheritDoc} */
126+
@Override
127+
ExtendedSpanBuilder setAttribute(String key, double value);
128+
129+
/** {@inheritDoc} */
130+
@Override
131+
ExtendedSpanBuilder setAttribute(String key, boolean value);
132+
133+
/** {@inheritDoc} */
134+
@Override
135+
<T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, T value);
136+
137+
/** {@inheritDoc} */
138+
@Override
139+
default ExtendedSpanBuilder setAllAttributes(Attributes attributes) {
140+
return (ExtendedSpanBuilder) SpanBuilder.super.setAllAttributes(attributes);
141+
}
142+
143+
/** {@inheritDoc} */
144+
@Override
145+
ExtendedSpanBuilder setSpanKind(SpanKind spanKind);
146+
147+
/** {@inheritDoc} */
148+
@Override
149+
ExtendedSpanBuilder setStartTimestamp(long startTimestamp, TimeUnit unit);
150+
151+
/** {@inheritDoc} */
152+
@Override
153+
default ExtendedSpanBuilder setStartTimestamp(Instant startTimestamp) {
154+
return (ExtendedSpanBuilder) SpanBuilder.super.setStartTimestamp(startTimestamp);
155+
}
93156
}

api/incubator/src/test/java/io/opentelemetry/api/incubator/trace/ExtendedTraceApiUsageTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ void startAndCallOrRun() {
110110
// Wrap the resetCheckout method in a span
111111
String cartId =
112112
((ExtendedSpanBuilder) tracer.spanBuilder("reset_checkout_and_return"))
113+
.setAttribute("key123", "val456")
113114
.startAndCall(() -> resetCheckoutAndReturn("abc123", /* throwException= */ false));
114115
assertThat(cartId).isEqualTo("abc123");
115116
// ...or runnable variation

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ final class SdkSpanBuilder implements ExtendedSpanBuilder {
6868
}
6969

7070
@Override
71-
public SpanBuilder setParent(Context context) {
71+
public ExtendedSpanBuilder setParent(Context context) {
7272
if (context == null) {
7373
return this;
7474
}
@@ -77,13 +77,13 @@ public SpanBuilder setParent(Context context) {
7777
}
7878

7979
@Override
80-
public SpanBuilder setNoParent() {
80+
public ExtendedSpanBuilder setNoParent() {
8181
this.parent = Context.root();
8282
return this;
8383
}
8484

8585
@Override
86-
public SpanBuilder setSpanKind(SpanKind spanKind) {
86+
public ExtendedSpanBuilder setSpanKind(SpanKind spanKind) {
8787
if (spanKind == null) {
8888
return this;
8989
}
@@ -92,7 +92,7 @@ public SpanBuilder setSpanKind(SpanKind spanKind) {
9292
}
9393

9494
@Override
95-
public SpanBuilder addLink(SpanContext spanContext) {
95+
public ExtendedSpanBuilder addLink(SpanContext spanContext) {
9696
if (spanContext == null || !spanContext.isValid()) {
9797
return this;
9898
}
@@ -101,7 +101,7 @@ public SpanBuilder addLink(SpanContext spanContext) {
101101
}
102102

103103
@Override
104-
public SpanBuilder addLink(SpanContext spanContext, Attributes attributes) {
104+
public ExtendedSpanBuilder addLink(SpanContext spanContext, Attributes attributes) {
105105
if (spanContext == null || !spanContext.isValid()) {
106106
return this;
107107
}
@@ -135,27 +135,27 @@ private void addLink(LinkData link) {
135135
}
136136

137137
@Override
138-
public SpanBuilder setAttribute(String key, String value) {
138+
public ExtendedSpanBuilder setAttribute(String key, String value) {
139139
return setAttribute(stringKey(key), value);
140140
}
141141

142142
@Override
143-
public SpanBuilder setAttribute(String key, long value) {
143+
public ExtendedSpanBuilder setAttribute(String key, long value) {
144144
return setAttribute(longKey(key), value);
145145
}
146146

147147
@Override
148-
public SpanBuilder setAttribute(String key, double value) {
148+
public ExtendedSpanBuilder setAttribute(String key, double value) {
149149
return setAttribute(doubleKey(key), value);
150150
}
151151

152152
@Override
153-
public SpanBuilder setAttribute(String key, boolean value) {
153+
public ExtendedSpanBuilder setAttribute(String key, boolean value) {
154154
return setAttribute(booleanKey(key), value);
155155
}
156156

157157
@Override
158-
public <T> SpanBuilder setAttribute(AttributeKey<T> key, T value) {
158+
public <T> ExtendedSpanBuilder setAttribute(AttributeKey<T> key, T value) {
159159
if (key == null || key.getKey().isEmpty() || value == null) {
160160
return this;
161161
}
@@ -164,7 +164,7 @@ public <T> SpanBuilder setAttribute(AttributeKey<T> key, T value) {
164164
}
165165

166166
@Override
167-
public SpanBuilder setStartTimestamp(long startTimestamp, TimeUnit unit) {
167+
public ExtendedSpanBuilder setStartTimestamp(long startTimestamp, TimeUnit unit) {
168168
if (startTimestamp < 0 || unit == null) {
169169
return this;
170170
}

0 commit comments

Comments
 (0)