Skip to content

Commit 9d33ce3

Browse files
traskotelbot[bot]laurit
authored
Use UnaryOperator<X> instead of Function<X, X> where it simplifies things (#15101)
Co-authored-by: otelbot <[email protected]> Co-authored-by: Lauri Tulmin <[email protected]>
1 parent 6c52b84 commit 9d33ce3

File tree

31 files changed

+489
-80
lines changed

31 files changed

+489
-80
lines changed

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.function.Consumer;
3939
import java.util.function.Function;
4040
import java.util.function.Supplier;
41+
import java.util.function.UnaryOperator;
4142
import javax.annotation.Nullable;
4243

4344
/**
@@ -54,16 +55,16 @@ public final class DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> {
5455

5556
private final List<AttributesExtractor<? super REQUEST, ? super RESPONSE>> additionalExtractors =
5657
new ArrayList<>();
57-
private Function<SpanStatusExtractor<REQUEST, RESPONSE>, SpanStatusExtractor<REQUEST, RESPONSE>>
58-
statusExtractorTransformer = Function.identity();
58+
private UnaryOperator<SpanStatusExtractor<REQUEST, RESPONSE>> statusExtractorTransformer =
59+
UnaryOperator.identity();
5960
private final HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE>
6061
httpAttributesExtractorBuilder;
6162
private final HttpClientAttributesGetter<REQUEST, RESPONSE> attributesGetter;
6263
private final HttpSpanNameExtractorBuilder<REQUEST> httpSpanNameExtractorBuilder;
6364

6465
@Nullable private final TextMapSetter<REQUEST> headerSetter;
65-
private Function<SpanNameExtractor<REQUEST>, ? extends SpanNameExtractor<REQUEST>>
66-
spanNameExtractorTransformer = Function.identity();
66+
private UnaryOperator<SpanNameExtractor<REQUEST>> spanNameExtractorTransformer =
67+
UnaryOperator.identity();
6768
private boolean emitExperimentalHttpClientTelemetry = false;
6869
private Consumer<InstrumenterBuilder<REQUEST, RESPONSE>> builderCustomizer = b -> {};
6970

@@ -113,8 +114,7 @@ public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> addAttributesExtr
113114

114115
@CanIgnoreReturnValue
115116
public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> setStatusExtractor(
116-
Function<SpanStatusExtractor<REQUEST, RESPONSE>, SpanStatusExtractor<REQUEST, RESPONSE>>
117-
statusExtractor) {
117+
UnaryOperator<SpanStatusExtractor<REQUEST, RESPONSE>> statusExtractor) {
118118
this.statusExtractorTransformer = statusExtractor;
119119
return this;
120120
}
@@ -192,9 +192,8 @@ public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> setRedactQueryPar
192192
/** Sets custom {@link SpanNameExtractor} via transform function. */
193193
@CanIgnoreReturnValue
194194
public DefaultHttpClientInstrumenterBuilder<REQUEST, RESPONSE> setSpanNameExtractor(
195-
Function<SpanNameExtractor<REQUEST>, SpanNameExtractor<REQUEST>>
196-
spanNameExtractorTransformer) {
197-
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
195+
UnaryOperator<SpanNameExtractor<REQUEST>> spanNameExtractor) {
196+
this.spanNameExtractorTransformer = spanNameExtractor;
198197
return this;
199198
}
200199

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
import java.util.List;
3232
import java.util.Objects;
3333
import java.util.function.Consumer;
34-
import java.util.function.Function;
3534
import java.util.function.Supplier;
35+
import java.util.function.UnaryOperator;
3636
import javax.annotation.Nullable;
3737

3838
/**
@@ -46,15 +46,15 @@ public final class DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> {
4646

4747
private final List<AttributesExtractor<? super REQUEST, ? super RESPONSE>> additionalExtractors =
4848
new ArrayList<>();
49-
private Function<SpanStatusExtractor<REQUEST, RESPONSE>, SpanStatusExtractor<REQUEST, RESPONSE>>
50-
statusExtractorTransformer = Function.identity();
49+
private UnaryOperator<SpanStatusExtractor<REQUEST, RESPONSE>> statusExtractorTransformer =
50+
UnaryOperator.identity();
5151
private final HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE>
5252
httpAttributesExtractorBuilder;
5353
private final HttpSpanNameExtractorBuilder<REQUEST> httpSpanNameExtractorBuilder;
5454

5555
@Nullable private final TextMapGetter<REQUEST> headerGetter;
56-
private Function<SpanNameExtractor<REQUEST>, SpanNameExtractor<REQUEST>>
57-
spanNameExtractorTransformer = Function.identity();
56+
private UnaryOperator<SpanNameExtractor<REQUEST>> spanNameExtractorTransformer =
57+
UnaryOperator.identity();
5858
private final HttpServerRouteBuilder<REQUEST> httpServerRouteBuilder;
5959
private final HttpServerAttributesGetter<REQUEST, RESPONSE> attributesGetter;
6060
private boolean emitExperimentalHttpServerTelemetry = false;
@@ -107,8 +107,7 @@ public DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> addAttributesExtr
107107

108108
@CanIgnoreReturnValue
109109
public DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> setStatusExtractor(
110-
Function<SpanStatusExtractor<REQUEST, RESPONSE>, SpanStatusExtractor<REQUEST, RESPONSE>>
111-
statusExtractor) {
110+
UnaryOperator<SpanStatusExtractor<REQUEST, RESPONSE>> statusExtractor) {
112111
this.statusExtractorTransformer = statusExtractor;
113112
return this;
114113
}
@@ -175,9 +174,8 @@ public DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> setKnownMethods(
175174
/** Sets custom {@link SpanNameExtractor} via transform function. */
176175
@CanIgnoreReturnValue
177176
public DefaultHttpServerInstrumenterBuilder<REQUEST, RESPONSE> setSpanNameExtractor(
178-
Function<SpanNameExtractor<REQUEST>, SpanNameExtractor<REQUEST>>
179-
spanNameExtractorTransformer) {
180-
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
177+
UnaryOperator<SpanNameExtractor<REQUEST>> spanNameExtractor) {
178+
this.spanNameExtractorTransformer = spanNameExtractor;
181179
return this;
182180
}
183181

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/instrumenter/InstrumenterCustomizer.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1313
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
1414
import java.util.function.Function;
15+
import java.util.function.UnaryOperator;
1516

1617
/**
1718
* Provides customizations for instrumentation, including operation metrics, attributes extraction,
@@ -75,7 +76,22 @@ InstrumenterCustomizer addAttributesExtractors(
7576
*
7677
* @param spanNameExtractorTransformer function that transforms the original span name extractor
7778
* @return this InstrumenterCustomizer for method chaining
79+
* @deprecated Use {@link #setSpanNameExtractor(UnaryOperator)} instead.
80+
*/
81+
@Deprecated
82+
@SuppressWarnings("FunctionalInterfaceClash")
83+
default InstrumenterCustomizer setSpanNameExtractor(
84+
Function<SpanNameExtractor<?>, SpanNameExtractor<?>> spanNameExtractorTransformer) {
85+
return setSpanNameExtractor(spanNameExtractorTransformer::apply);
86+
}
87+
88+
/**
89+
* Sets a transformer function that will modify the {@link SpanNameExtractor}. This allows
90+
* customizing how span names are generated for the instrumented operations.
91+
*
92+
* @param spanNameExtractor function that transforms the original span name extractor
93+
* @return this InstrumenterCustomizer for method chaining
7894
*/
7995
InstrumenterCustomizer setSpanNameExtractor(
80-
Function<SpanNameExtractor<?>, SpanNameExtractor<?>> spanNameExtractorTransformer);
96+
UnaryOperator<SpanNameExtractor<?>> spanNameExtractor);
8197
}

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/instrumenter/internal/InstrumenterCustomizerImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1212
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
1313
import io.opentelemetry.instrumentation.api.internal.InternalInstrumenterCustomizer;
14-
import java.util.function.Function;
14+
import java.util.function.UnaryOperator;
1515

1616
/**
1717
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
@@ -56,9 +56,10 @@ public InstrumenterCustomizer addContextCustomizer(ContextCustomizer<?> customiz
5656
}
5757

5858
@Override
59+
@SuppressWarnings("FunctionalInterfaceClash") // interface has deprecated overload
5960
public InstrumenterCustomizer setSpanNameExtractor(
60-
Function<SpanNameExtractor<?>, SpanNameExtractor<?>> spanNameExtractorTransformer) {
61-
customizer.setSpanNameExtractor(spanNameExtractorTransformer);
61+
UnaryOperator<SpanNameExtractor<?>> spanNameExtractor) {
62+
customizer.setSpanNameExtractor(spanNameExtractor);
6263
return this;
6364
}
6465
}

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import java.util.ArrayList;
3434
import java.util.List;
3535
import java.util.Set;
36-
import java.util.function.Function;
36+
import java.util.function.UnaryOperator;
3737
import java.util.logging.Logger;
3838
import java.util.stream.Collectors;
3939
import java.util.stream.Stream;
@@ -427,8 +427,7 @@ public void addContextCustomizer(ContextCustomizer<REQUEST> customizer) {
427427

428428
@Override
429429
public void setSpanNameExtractor(
430-
Function<SpanNameExtractor<? super REQUEST>, SpanNameExtractor<? super REQUEST>>
431-
spanNameExtractorTransformer) {
430+
UnaryOperator<SpanNameExtractor<? super REQUEST>> spanNameExtractorTransformer) {
432431
builder.spanNameExtractor =
433432
spanNameExtractorTransformer.apply(builder.spanNameExtractor);
434433
}

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/InternalInstrumenterCustomizer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
1010
import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
1111
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
12-
import java.util.function.Function;
12+
import java.util.function.UnaryOperator;
1313

1414
/**
1515
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
@@ -29,6 +29,5 @@ void addAttributesExtractors(
2929
void addContextCustomizer(ContextCustomizer<REQUEST> customizer);
3030

3131
void setSpanNameExtractor(
32-
Function<SpanNameExtractor<? super REQUEST>, SpanNameExtractor<? super REQUEST>>
33-
spanNameExtractorTransformer);
32+
UnaryOperator<SpanNameExtractor<? super REQUEST>> spanNameExtractorTransformer);
3433
}

instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetryBuilder.java

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.ArrayList;
2424
import java.util.List;
2525
import java.util.function.Function;
26+
import java.util.function.UnaryOperator;
2627
import javax.annotation.Nullable;
2728
import org.apache.dubbo.rpc.Result;
2829

@@ -38,12 +39,10 @@ public final class DubboTelemetryBuilder {
3839
@Nullable private String peerService;
3940
private final List<AttributesExtractor<DubboRequest, Result>> attributesExtractors =
4041
new ArrayList<>();
41-
private Function<
42-
SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
43-
clientSpanNameExtractorTransformer = Function.identity();
44-
private Function<
45-
SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
46-
serverSpanNameExtractorTransformer = Function.identity();
42+
private UnaryOperator<SpanNameExtractor<DubboRequest>> clientSpanNameExtractorTransformer =
43+
UnaryOperator.identity();
44+
private UnaryOperator<SpanNameExtractor<DubboRequest>> serverSpanNameExtractorTransformer =
45+
UnaryOperator.identity();
4746

4847
DubboTelemetryBuilder(OpenTelemetry openTelemetry) {
4948
this.openTelemetry = openTelemetry;
@@ -65,20 +64,50 @@ public DubboTelemetryBuilder addAttributesExtractor(
6564
return this;
6665
}
6766

68-
/** Sets custom client {@link SpanNameExtractor} via transform function. */
67+
/**
68+
* Sets custom client {@link SpanNameExtractor} via transform function.
69+
*
70+
* @deprecated Use {@link #setClientSpanNameExtractor(UnaryOperator)} instead.
71+
*/
72+
@Deprecated
6973
@CanIgnoreReturnValue
74+
@SuppressWarnings("unchecked") // cast result to SpanNameExtractor<DubboRequest>
7075
public DubboTelemetryBuilder setClientSpanNameExtractor(
7176
Function<SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
7277
clientSpanNameExtractor) {
78+
return setClientSpanNameExtractor(
79+
(UnaryOperator<SpanNameExtractor<DubboRequest>>)
80+
input -> (SpanNameExtractor<DubboRequest>) clientSpanNameExtractor.apply(input));
81+
}
82+
83+
/** Sets custom client {@link SpanNameExtractor} via transform function. */
84+
@CanIgnoreReturnValue
85+
public DubboTelemetryBuilder setClientSpanNameExtractor(
86+
UnaryOperator<SpanNameExtractor<DubboRequest>> clientSpanNameExtractor) {
7387
this.clientSpanNameExtractorTransformer = clientSpanNameExtractor;
7488
return this;
7589
}
7690

77-
/** Sets custom server {@link SpanNameExtractor} via transform function. */
91+
/**
92+
* Sets custom server {@link SpanNameExtractor} via transform function.
93+
*
94+
* @deprecated Use {@link #setServerSpanNameExtractor(UnaryOperator)} instead.
95+
*/
96+
@Deprecated
7897
@CanIgnoreReturnValue
98+
@SuppressWarnings("unchecked") // cast result to SpanNameExtractor<DubboRequest>
7999
public DubboTelemetryBuilder setServerSpanNameExtractor(
80100
Function<SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
81101
serverSpanNameExtractor) {
102+
return setServerSpanNameExtractor(
103+
(UnaryOperator<SpanNameExtractor<DubboRequest>>)
104+
input -> (SpanNameExtractor<DubboRequest>) serverSpanNameExtractor.apply(input));
105+
}
106+
107+
/** Sets custom server {@link SpanNameExtractor} via transform function. */
108+
@CanIgnoreReturnValue
109+
public DubboTelemetryBuilder setServerSpanNameExtractor(
110+
UnaryOperator<SpanNameExtractor<DubboRequest>> serverSpanNameExtractor) {
82111
this.serverSpanNameExtractorTransformer = serverSpanNameExtractor;
83112
return this;
84113
}
@@ -90,9 +119,9 @@ public DubboTelemetry build() {
90119
DubboRpcAttributesGetter rpcAttributesGetter = DubboRpcAttributesGetter.INSTANCE;
91120
SpanNameExtractor<DubboRequest> spanNameExtractor =
92121
RpcSpanNameExtractor.create(rpcAttributesGetter);
93-
SpanNameExtractor<? super DubboRequest> clientSpanNameExtractor =
122+
SpanNameExtractor<DubboRequest> clientSpanNameExtractor =
94123
clientSpanNameExtractorTransformer.apply(spanNameExtractor);
95-
SpanNameExtractor<? super DubboRequest> serverSpanNameExtractor =
124+
SpanNameExtractor<DubboRequest> serverSpanNameExtractor =
96125
serverSpanNameExtractorTransformer.apply(spanNameExtractor);
97126
DubboClientNetworkAttributesGetter netClientAttributesGetter =
98127
new DubboClientNetworkAttributesGetter();

instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTelemetryBuilder.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
1515
import java.util.Collection;
1616
import java.util.function.Function;
17+
import java.util.function.UnaryOperator;
1718
import org.apache.http.HttpResponse;
1819

1920
/** A builder for {@link ApacheHttpClientTelemetry}. */
@@ -89,13 +90,27 @@ public ApacheHttpClientTelemetryBuilder setKnownMethods(Collection<String> known
8990
return this;
9091
}
9192

92-
/** Sets custom {@link SpanNameExtractor} via transform function. */
93+
/**
94+
* Sets custom {@link SpanNameExtractor} via transform function.
95+
*
96+
* @deprecated Use {@link #setSpanNameExtractor(UnaryOperator)} instead.
97+
*/
98+
@Deprecated
9399
@CanIgnoreReturnValue
94100
public ApacheHttpClientTelemetryBuilder setSpanNameExtractor(
95101
Function<
96102
SpanNameExtractor<ApacheHttpClientRequest>,
97103
SpanNameExtractor<ApacheHttpClientRequest>>
98104
spanNameExtractorTransformer) {
105+
return setSpanNameExtractor(
106+
(UnaryOperator<SpanNameExtractor<ApacheHttpClientRequest>>)
107+
spanNameExtractorTransformer::apply);
108+
}
109+
110+
/** Sets custom {@link SpanNameExtractor} via transform function. */
111+
@CanIgnoreReturnValue
112+
public ApacheHttpClientTelemetryBuilder setSpanNameExtractor(
113+
UnaryOperator<SpanNameExtractor<ApacheHttpClientRequest>> spanNameExtractorTransformer) {
99114
builder.setSpanNameExtractor(spanNameExtractorTransformer);
100115
return this;
101116
}

instrumentation/apache-httpclient/apache-httpclient-5.2/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v5_2/ApacheHttpClientTelemetryBuilder.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
1515
import java.util.Collection;
1616
import java.util.function.Function;
17+
import java.util.function.UnaryOperator;
1718
import org.apache.hc.core5.http.HttpResponse;
1819

1920
/** A builder for {@link ApacheHttpClientTelemetry}. */
@@ -89,13 +90,27 @@ public ApacheHttpClientTelemetryBuilder setKnownMethods(Collection<String> known
8990
return this;
9091
}
9192

92-
/** Sets custom {@link SpanNameExtractor} via transform function. */
93+
/**
94+
* Sets custom {@link SpanNameExtractor} via transform function.
95+
*
96+
* @deprecated Use {@link #setSpanNameExtractor(UnaryOperator)} instead.
97+
*/
98+
@Deprecated
9399
@CanIgnoreReturnValue
94100
public ApacheHttpClientTelemetryBuilder setSpanNameExtractor(
95101
Function<
96102
SpanNameExtractor<ApacheHttpClientRequest>,
97103
SpanNameExtractor<ApacheHttpClientRequest>>
98104
spanNameExtractorTransformer) {
105+
return setSpanNameExtractor(
106+
(UnaryOperator<SpanNameExtractor<ApacheHttpClientRequest>>)
107+
spanNameExtractorTransformer::apply);
108+
}
109+
110+
/** Sets custom {@link SpanNameExtractor} via transform function. */
111+
@CanIgnoreReturnValue
112+
public ApacheHttpClientTelemetryBuilder setSpanNameExtractor(
113+
UnaryOperator<SpanNameExtractor<ApacheHttpClientRequest>> spanNameExtractorTransformer) {
99114
builder.setSpanNameExtractor(spanNameExtractorTransformer);
100115
return this;
101116
}

0 commit comments

Comments
 (0)