Add ParametersAreNonnullByDefault and safety null checks in builder methods (#6364)

This commit is contained in:
Mateusz Rzeszutek 2022-08-02 07:29:34 +02:00 committed by GitHub
parent c3c4fb7101
commit 06dfd59fcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 21 deletions

View File

@ -5,6 +5,8 @@
package io.opentelemetry.instrumentation.api.instrumenter; package io.opentelemetry.instrumentation.api.instrumenter;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.common.AttributesBuilder;
@ -44,6 +46,8 @@ public interface AttributesExtractor<REQUEST, RESPONSE> {
*/ */
static <REQUEST, RESPONSE, T> AttributesExtractor<REQUEST, RESPONSE> constant( static <REQUEST, RESPONSE, T> AttributesExtractor<REQUEST, RESPONSE> constant(
AttributeKey<T> attributeKey, T attributeValue) { AttributeKey<T> attributeKey, T attributeValue) {
return new ConstantAttributesExtractor<>(attributeKey, attributeValue); return new ConstantAttributesExtractor<>(
requireNonNull(attributeKey, "attributeKey"),
requireNonNull(attributeValue, "attributeValue"));
} }
} }

View File

@ -5,6 +5,8 @@
package io.opentelemetry.instrumentation.api.instrumenter; package io.opentelemetry.instrumentation.api.instrumenter;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.metrics.MeterBuilder; import io.opentelemetry.api.metrics.MeterBuilder;
@ -79,7 +81,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> setInstrumentationVersion( public InstrumenterBuilder<REQUEST, RESPONSE> setInstrumentationVersion(
String instrumentationVersion) { String instrumentationVersion) {
this.instrumentationVersion = instrumentationVersion; this.instrumentationVersion = requireNonNull(instrumentationVersion, "instrumentationVersion");
return this; return this;
} }
@ -88,7 +90,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
* {@link Instrumenter}. * {@link Instrumenter}.
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> setSchemaUrl(String schemaUrl) { public InstrumenterBuilder<REQUEST, RESPONSE> setSchemaUrl(String schemaUrl) {
this.schemaUrl = schemaUrl; this.schemaUrl = requireNonNull(schemaUrl, "schemaUrl");
return this; return this;
} }
@ -97,7 +99,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> setSpanStatusExtractor( public InstrumenterBuilder<REQUEST, RESPONSE> setSpanStatusExtractor(
SpanStatusExtractor<? super REQUEST, ? super RESPONSE> spanStatusExtractor) { SpanStatusExtractor<? super REQUEST, ? super RESPONSE> spanStatusExtractor) {
this.spanStatusExtractor = spanStatusExtractor; this.spanStatusExtractor = requireNonNull(spanStatusExtractor, "spanStatusExtractor");
return this; return this;
} }
@ -106,7 +108,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> addAttributesExtractor( public InstrumenterBuilder<REQUEST, RESPONSE> addAttributesExtractor(
AttributesExtractor<? super REQUEST, ? super RESPONSE> attributesExtractor) { AttributesExtractor<? super REQUEST, ? super RESPONSE> attributesExtractor) {
this.attributesExtractors.add(attributesExtractor); this.attributesExtractors.add(requireNonNull(attributesExtractor, "attributesExtractor"));
return this; return this;
} }
@ -114,7 +116,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
public InstrumenterBuilder<REQUEST, RESPONSE> addAttributesExtractors( public InstrumenterBuilder<REQUEST, RESPONSE> addAttributesExtractors(
Iterable<? extends AttributesExtractor<? super REQUEST, ? super RESPONSE>> Iterable<? extends AttributesExtractor<? super REQUEST, ? super RESPONSE>>
attributesExtractors) { attributesExtractors) {
attributesExtractors.forEach(this.attributesExtractors::add); attributesExtractors.forEach(this::addAttributesExtractor);
return this; return this;
} }
@ -129,7 +131,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
/** Adds a {@link SpanLinksExtractor} that will extract span links from requests. */ /** Adds a {@link SpanLinksExtractor} that will extract span links from requests. */
public InstrumenterBuilder<REQUEST, RESPONSE> addSpanLinksExtractor( public InstrumenterBuilder<REQUEST, RESPONSE> addSpanLinksExtractor(
SpanLinksExtractor<REQUEST> spanLinksExtractor) { SpanLinksExtractor<REQUEST> spanLinksExtractor) {
spanLinksExtractors.add(spanLinksExtractor); spanLinksExtractors.add(requireNonNull(spanLinksExtractor, "spanLinksExtractor"));
return this; return this;
} }
@ -139,7 +141,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> addContextCustomizer( public InstrumenterBuilder<REQUEST, RESPONSE> addContextCustomizer(
ContextCustomizer<? super REQUEST> contextCustomizer) { ContextCustomizer<? super REQUEST> contextCustomizer) {
contextCustomizers.add(contextCustomizer); contextCustomizers.add(requireNonNull(contextCustomizer, "contextCustomizer"));
return this; return this;
} }
@ -148,7 +150,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
* ends. * ends.
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> addOperationListener(OperationListener listener) { public InstrumenterBuilder<REQUEST, RESPONSE> addOperationListener(OperationListener listener) {
operationListeners.add(listener); operationListeners.add(requireNonNull(listener, "operationListener"));
return this; return this;
} }
@ -157,7 +159,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
* requests processing metrics. * requests processing metrics.
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> addOperationMetrics(OperationMetrics factory) { public InstrumenterBuilder<REQUEST, RESPONSE> addOperationMetrics(OperationMetrics factory) {
operationMetrics.add(factory); operationMetrics.add(requireNonNull(factory, "operationMetrics"));
return this; return this;
} }
@ -167,7 +169,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public InstrumenterBuilder<REQUEST, RESPONSE> setErrorCauseExtractor( public InstrumenterBuilder<REQUEST, RESPONSE> setErrorCauseExtractor(
ErrorCauseExtractor errorCauseExtractor) { ErrorCauseExtractor errorCauseExtractor) {
this.errorCauseExtractor = errorCauseExtractor; this.errorCauseExtractor = requireNonNull(errorCauseExtractor, "errorCauseExtractor");
return this; return this;
} }
@ -189,7 +191,8 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
@Deprecated @Deprecated
public Instrumenter<REQUEST, RESPONSE> newClientInstrumenter(TextMapSetter<REQUEST> setter) { public Instrumenter<REQUEST, RESPONSE> newClientInstrumenter(TextMapSetter<REQUEST> setter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingToDownstream(setter), SpanKindExtractor.alwaysClient()); InstrumenterConstructor.propagatingToDownstream(requireNonNull(setter, "setter")),
SpanKindExtractor.alwaysClient());
} }
/** /**
@ -201,7 +204,8 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
@Deprecated @Deprecated
public Instrumenter<REQUEST, RESPONSE> newServerInstrumenter(TextMapGetter<REQUEST> getter) { public Instrumenter<REQUEST, RESPONSE> newServerInstrumenter(TextMapGetter<REQUEST> getter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingFromUpstream(getter), SpanKindExtractor.alwaysServer()); InstrumenterConstructor.propagatingFromUpstream(requireNonNull(getter, "getter")),
SpanKindExtractor.alwaysServer());
} }
/** /**
@ -213,7 +217,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
@Deprecated @Deprecated
public Instrumenter<REQUEST, RESPONSE> newProducerInstrumenter(TextMapSetter<REQUEST> setter) { public Instrumenter<REQUEST, RESPONSE> newProducerInstrumenter(TextMapSetter<REQUEST> setter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingToDownstream(setter), InstrumenterConstructor.propagatingToDownstream(requireNonNull(setter, "setter")),
SpanKindExtractor.alwaysProducer()); SpanKindExtractor.alwaysProducer());
} }
@ -226,7 +230,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
@Deprecated @Deprecated
public Instrumenter<REQUEST, RESPONSE> newConsumerInstrumenter(TextMapGetter<REQUEST> getter) { public Instrumenter<REQUEST, RESPONSE> newConsumerInstrumenter(TextMapGetter<REQUEST> getter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingFromUpstream(getter), InstrumenterConstructor.propagatingFromUpstream(requireNonNull(getter, "getter")),
SpanKindExtractor.alwaysConsumer()); SpanKindExtractor.alwaysConsumer());
} }
@ -251,7 +255,8 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
@Deprecated @Deprecated
public Instrumenter<REQUEST, RESPONSE> newInstrumenter( public Instrumenter<REQUEST, RESPONSE> newInstrumenter(
SpanKindExtractor<? super REQUEST> spanKindExtractor) { SpanKindExtractor<? super REQUEST> spanKindExtractor) {
return buildInstrumenter(InstrumenterConstructor.internal(), spanKindExtractor); return buildInstrumenter(
InstrumenterConstructor.internal(), requireNonNull(spanKindExtractor, "spanKindExtractor"));
} }
/** /**
@ -260,7 +265,8 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public Instrumenter<REQUEST, RESPONSE> buildClientInstrumenter(TextMapSetter<REQUEST> setter) { public Instrumenter<REQUEST, RESPONSE> buildClientInstrumenter(TextMapSetter<REQUEST> setter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingToDownstream(setter), SpanKindExtractor.alwaysClient()); InstrumenterConstructor.propagatingToDownstream(requireNonNull(setter, "setter")),
SpanKindExtractor.alwaysClient());
} }
/** /**
@ -269,7 +275,8 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public Instrumenter<REQUEST, RESPONSE> buildServerInstrumenter(TextMapGetter<REQUEST> getter) { public Instrumenter<REQUEST, RESPONSE> buildServerInstrumenter(TextMapGetter<REQUEST> getter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingFromUpstream(getter), SpanKindExtractor.alwaysServer()); InstrumenterConstructor.propagatingFromUpstream(requireNonNull(getter, "getter")),
SpanKindExtractor.alwaysServer());
} }
/** /**
@ -278,7 +285,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public Instrumenter<REQUEST, RESPONSE> buildProducerInstrumenter(TextMapSetter<REQUEST> setter) { public Instrumenter<REQUEST, RESPONSE> buildProducerInstrumenter(TextMapSetter<REQUEST> setter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingToDownstream(setter), InstrumenterConstructor.propagatingToDownstream(requireNonNull(setter, "setter")),
SpanKindExtractor.alwaysProducer()); SpanKindExtractor.alwaysProducer());
} }
@ -288,7 +295,7 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public Instrumenter<REQUEST, RESPONSE> buildConsumerInstrumenter(TextMapGetter<REQUEST> getter) { public Instrumenter<REQUEST, RESPONSE> buildConsumerInstrumenter(TextMapGetter<REQUEST> getter) {
return buildInstrumenter( return buildInstrumenter(
InstrumenterConstructor.propagatingFromUpstream(getter), InstrumenterConstructor.propagatingFromUpstream(requireNonNull(getter, "getter")),
SpanKindExtractor.alwaysConsumer()); SpanKindExtractor.alwaysConsumer());
} }
@ -307,7 +314,8 @@ public final class InstrumenterBuilder<REQUEST, RESPONSE> {
*/ */
public Instrumenter<REQUEST, RESPONSE> buildInstrumenter( public Instrumenter<REQUEST, RESPONSE> buildInstrumenter(
SpanKindExtractor<? super REQUEST> spanKindExtractor) { SpanKindExtractor<? super REQUEST> spanKindExtractor) {
return buildInstrumenter(InstrumenterConstructor.internal(), spanKindExtractor); return buildInstrumenter(
InstrumenterConstructor.internal(), requireNonNull(spanKindExtractor, "spanKindExtractor"));
} }
private Instrumenter<REQUEST, RESPONSE> buildInstrumenter( private Instrumenter<REQUEST, RESPONSE> buildInstrumenter(

View File

@ -0,0 +1,4 @@
@ParametersAreNonnullByDefault
package io.opentelemetry.instrumentation.api.instrumenter;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@ -0,0 +1,4 @@
@ParametersAreNonnullByDefault
package io.opentelemetry.instrumentation.api.internal;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@ -0,0 +1,4 @@
@ParametersAreNonnullByDefault
package io.opentelemetry.instrumentation.api.util;
import javax.annotation.ParametersAreNonnullByDefault;