From facbf4fb9ecd5eb34c22946a9022d7d00a49b656 Mon Sep 17 00:00:00 2001 From: jack-berg <34418638+jack-berg@users.noreply.github.com> Date: Wed, 27 Jul 2022 17:54:29 -0500 Subject: [PATCH] Add default implementations for getInstrumentationScopeInfo methods (#4640) --- .../src/main/kotlin/otel.japicmp-conventions.gradle.kts | 8 +++++++- .../current_vs_latest/opentelemetry-sdk-testing.txt | 4 +++- .../current_vs_latest/opentelemetry-sdk-trace.txt | 7 ++++++- .../io/opentelemetry/sdk/testing/trace/TestSpanData.java | 3 +++ .../java/io/opentelemetry/sdk/trace/ReadableSpan.java | 5 ++++- .../java/io/opentelemetry/sdk/trace/data/SpanData.java | 5 ++++- 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts b/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts index 764273adf6..a75510d89f 100644 --- a/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/otel.japicmp-conventions.gradle.kts @@ -39,6 +39,11 @@ class AllowDefaultMethodRule : AbstractRecordingSeenMembers() { // semver. continue } + if (change == JApiCompatibilityChange.METHOD_ABSTRACT_NOW_DEFAULT) { + // Adding default implementations to interface methods previously abstract is not a breaking + // change. + continue + } if (!change.isBinaryCompatible) { return Violation.notBinaryCompatible(member, Severity.error) } @@ -101,7 +106,8 @@ if (!project.hasProperty("otel.release") && !project.name.startsWith("bom")) { // Reproduce defaults from https://github.com/melix/japicmp-gradle-plugin/blob/09f52739ef1fccda6b4310cf3f4b19dc97377024/src/main/java/me/champeau/gradle/japicmp/report/ViolationsGenerator.java#L130 // only changing the BinaryIncompatibleRule to our custom one that allows new default methods - // on interfaces. + // on interfaces, and adding default implementations to interface methods previously + // abstract. richReport { addSetupRule(RecordSeenMembersSetup::class.java) addRule(JApiChangeStatus.NEW, SourceCompatibleRule::class.java) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt index df26146497..70a89f7e64 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-testing.txt @@ -1,2 +1,4 @@ Comparing source compatibility of against -No changes. \ No newline at end of file +**** MODIFIED CLASS: PUBLIC ABSTRACT io.opentelemetry.sdk.testing.trace.TestSpanData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.sdk.common.InstrumentationScopeInfo getInstrumentationScopeInfo() diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt index df26146497..59e8eb9954 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt @@ -1,2 +1,7 @@ Comparing source compatibility of against -No changes. \ No newline at end of file +***! MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.trace.data.SpanData (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + ***! MODIFIED METHOD: PUBLIC NON_ABSTRACT (<- ABSTRACT) io.opentelemetry.sdk.common.InstrumentationScopeInfo getInstrumentationScopeInfo() +***! MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.trace.ReadableSpan (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + ***! MODIFIED METHOD: PUBLIC NON_ABSTRACT (<- ABSTRACT) io.opentelemetry.sdk.common.InstrumentationScopeInfo getInstrumentationScopeInfo() diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/trace/TestSpanData.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/trace/TestSpanData.java index 1f1b577fd0..f628b3c935 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/trace/TestSpanData.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/trace/TestSpanData.java @@ -63,6 +63,9 @@ public abstract class TestSpanData implements SpanData { return InstrumentationScopeUtil.toInstrumentationLibraryInfo(getInstrumentationScopeInfo()); } + @Override + public abstract InstrumentationScopeInfo getInstrumentationScopeInfo(); + /** A {@code Builder} class for {@link TestSpanData}. */ @AutoValue.Builder public abstract static class Builder { diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java index 9645ab1cab..f367aa67b2 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.internal.InstrumentationScopeUtil; import io.opentelemetry.sdk.trace.data.SpanData; import javax.annotation.Nullable; @@ -68,7 +69,9 @@ public interface ReadableSpan { * * @return an instance of {@link InstrumentationScopeInfo} describing the instrumentation scope */ - InstrumentationScopeInfo getInstrumentationScopeInfo(); + default InstrumentationScopeInfo getInstrumentationScopeInfo() { + return InstrumentationScopeUtil.toInstrumentationScopeInfo(getInstrumentationLibraryInfo()); + } /** * Returns whether this Span has already been ended. diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/data/SpanData.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/data/SpanData.java index ae1de5255c..f66c5627c5 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/data/SpanData.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/data/SpanData.java @@ -9,6 +9,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.internal.InstrumentationScopeUtil; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.SpanLimits; import java.util.List; @@ -165,7 +166,9 @@ public interface SpanData { * * @return an instance of {@link InstrumentationScopeInfo} */ - InstrumentationScopeInfo getInstrumentationScopeInfo(); + default InstrumentationScopeInfo getInstrumentationScopeInfo() { + return InstrumentationScopeUtil.toInstrumentationScopeInfo(getInstrumentationLibraryInfo()); + } /** * Returns the resource of this {@code Span}.