Browse Source

Update the OpenTelemetry SDK version to 1.37.0 (#11066)

Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
Co-authored-by: Lauri Tulmin <ltulmin@splunk.com>
Gregor Zeitlinger 11 months ago
parent
commit
96c4922753
61 changed files with 1398 additions and 157 deletions
  1. 1 1
      dependencyManagement/build.gradle.kts
  2. 2 3
      examples/distro/agent/build.gradle
  3. 1 1
      examples/distro/build.gradle
  4. 2 3
      examples/distro/testing/agent-for-testing/build.gradle
  5. 1 1
      examples/extension/build.gradle
  6. 1 1
      instrumentation-api-incubator/build.gradle.kts
  7. 2 2
      instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpExperimentalMetricsAdvice.java
  8. 1 1
      instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcMetricsAdvice.java
  9. 1 1
      instrumentation-api/build.gradle.kts
  10. 1 1
      instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/OperationMetricsUtil.java
  11. 1 1
      instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpMetricsAdvice.java
  12. 1 1
      instrumentation/micrometer/micrometer-1.5/library/build.gradle.kts
  13. 1 1
      instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/HistogramAdviceUtil.java
  14. 14 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/trace/ApplicationSpan.java
  15. 8 2
      instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java
  16. 2 3
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/build.gradle.kts
  17. 8 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/OpenTelemetryApiInstrumentationModule.java
  18. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleCounterBuilder131.java
  19. 3 4
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleGaugeBuilder131.java
  20. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleHistogramBuilder131.java
  21. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleUpDownCounterBuilder131.java
  22. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongCounterBuilder131.java
  23. 3 4
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongGaugeBuilder131.java
  24. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongHistogramBuilder131.java
  25. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongUpDownCounterBuilder131.java
  26. 2 2
      instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/build.gradle.kts
  27. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationDoubleHistogramBuilder132Incubator.java
  28. 1 1
      instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationLongHistogramBuilder132Incubator.java
  29. 32 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/build.gradle.kts
  30. 468 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java
  31. 40 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/OpenTelemetryApiIncubatorInstrumentationModule.java
  32. 40 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/OpenTelemetryIncubatorInstrumentation.java
  33. 44 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationDoubleHistogramBuilder137Incubator.java
  34. 38 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationLongHistogramBuilder137Incubator.java
  35. 24 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137Incubator.java
  36. 18 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeterFactory137Incubator.java
  37. 31 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleCounterBuilder137.java
  38. 56 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleGaugeBuilder137.java
  39. 44 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleHistogramBuilder137.java
  40. 31 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleUpDownCounterBuilder137.java
  41. 36 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongCounterBuilder137.java
  42. 49 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongGaugeBuilder137.java
  43. 38 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongHistogramBuilder137.java
  44. 37 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongUpDownCounterBuilder137.java
  45. 42 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationMeter137.java
  46. 18 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationMeterFactory137.java
  47. 116 0
      instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java
  48. 1 1
      instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/build.gradle.kts
  49. 15 17
      instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzer.java
  50. 10 18
      instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/test/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzerInstallerTest.java
  51. 0 1
      instrumentation/runtime-telemetry/runtime-telemetry-java8/library/build.gradle.kts
  52. 1 1
      instrumentation/runtime-telemetry/runtime-telemetry-java8/testing/build.gradle.kts
  53. 11 4
      instrumentation/runtime-telemetry/runtime-telemetry-java8/testing/src/test/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzerTest.java
  54. 1 1
      javaagent-tooling/build.gradle.kts
  55. 3 3
      javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.groovy
  56. 2 2
      javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java
  57. 2 2
      javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java
  58. 4 5
      javaagent/build.gradle.kts
  59. 57 61
      licenses/licenses.md
  60. 24 0
      opentelemetry-api-shaded-for-instrumenting/build.gradle.kts
  61. 1 0
      settings.gradle.kts

+ 1 - 1
dependencyManagement/build.gradle.kts

@@ -8,7 +8,7 @@ val dependencyVersions = hashMapOf<String, String>()
 rootProject.extra["versions"] = dependencyVersions
 
 // this line is managed by .github/scripts/update-sdk-version.sh
-val otelSdkVersion = "1.36.0"
+val otelSdkVersion = "1.37.0"
 val otelContribVersion = "1.34.0-alpha"
 val otelSdkAlphaVersion = otelSdkVersion.replaceFirst("(-SNAPSHOT)?$".toRegex(), "-alpha$1")
 

+ 2 - 3
examples/distro/agent/build.gradle

@@ -73,10 +73,9 @@ tasks {
     // exclude known bootstrap dependencies - they can't appear in the inst/ directory
     dependencies {
       exclude("io.opentelemetry:opentelemetry-api")
-      exclude("io.opentelemetry:opentelemetry-api-events")
       exclude("io.opentelemetry:opentelemetry-context")
-      // metrics advice API
-      exclude("io.opentelemetry:opentelemetry-extension-incubator")
+      // events API and metrics advice API
+      exclude("io.opentelemetry:opentelemetry-api-incubator")
     }
   }
 

+ 1 - 1
examples/distro/build.gradle

@@ -27,7 +27,7 @@ subprojects {
   ext {
     versions = [
       // this line is managed by .github/scripts/update-sdk-version.sh
-      opentelemetrySdk           : "1.36.0",
+      opentelemetrySdk           : "1.37.0",
 
       // these lines are managed by .github/scripts/update-version.sh
       opentelemetryJavaagent     : "2.3.0-SNAPSHOT",

+ 2 - 3
examples/distro/testing/agent-for-testing/build.gradle

@@ -70,10 +70,9 @@ tasks {
     // exclude known bootstrap dependencies - they can't appear in the inst/ directory
     dependencies {
       exclude("io.opentelemetry:opentelemetry-api")
-      exclude("io.opentelemetry:opentelemetry-api-events")
       exclude("io.opentelemetry:opentelemetry-context")
-      // metrics advice API
-      exclude("io.opentelemetry:opentelemetry-extension-incubator")
+      // events API and metrics advice API
+      exclude("io.opentelemetry:opentelemetry-api-incubator")
     }
   }
 

+ 1 - 1
examples/extension/build.gradle

@@ -23,7 +23,7 @@ version '1.0'
 ext {
   versions = [
     // this line is managed by .github/scripts/update-sdk-version.sh
-    opentelemetrySdk           : "1.36.0",
+    opentelemetrySdk           : "1.37.0",
 
     // these lines are managed by .github/scripts/update-version.sh
     opentelemetryJavaagent     : "2.3.0-SNAPSHOT",

+ 1 - 1
instrumentation-api-incubator/build.gradle.kts

@@ -14,7 +14,7 @@ dependencies {
   api("io.opentelemetry.semconv:opentelemetry-semconv")
   api("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
   api(project(":instrumentation-api"))
-  implementation("io.opentelemetry:opentelemetry-extension-incubator")
+  implementation("io.opentelemetry:opentelemetry-api-incubator")
 
   compileOnly("com.google.auto.value:auto-value-annotations")
   annotationProcessor("com.google.auto.value:auto-value")

+ 2 - 2
instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpExperimentalMetricsAdvice.java

@@ -7,10 +7,10 @@ package io.opentelemetry.instrumentation.api.incubator.semconv.http;
 
 import static java.util.Arrays.asList;
 
+import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder;
 import io.opentelemetry.api.metrics.LongHistogramBuilder;
 import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
-import io.opentelemetry.extension.incubator.metrics.ExtendedLongHistogramBuilder;
-import io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder;
 import io.opentelemetry.semconv.ErrorAttributes;
 import io.opentelemetry.semconv.HttpAttributes;
 import io.opentelemetry.semconv.NetworkAttributes;

+ 1 - 1
instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/rpc/RpcMetricsAdvice.java

@@ -5,8 +5,8 @@
 
 package io.opentelemetry.instrumentation.api.incubator.semconv.rpc;
 
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
-import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.semconv.NetworkAttributes;
 import io.opentelemetry.semconv.ServerAttributes;
 import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes;

+ 1 - 1
instrumentation-api/build.gradle.kts

@@ -13,7 +13,7 @@ group = "io.opentelemetry.instrumentation"
 
 dependencies {
   api("io.opentelemetry:opentelemetry-api")
-  implementation("io.opentelemetry:opentelemetry-extension-incubator")
+  implementation("io.opentelemetry:opentelemetry-api-incubator")
   implementation("io.opentelemetry.semconv:opentelemetry-semconv")
   implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
 

+ 1 - 1
instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/OperationMetricsUtil.java

@@ -6,10 +6,10 @@
 package io.opentelemetry.instrumentation.api.internal;
 
 import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
 import io.opentelemetry.api.metrics.Meter;
 import io.opentelemetry.context.Context;
-import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.instrumentation.api.instrumenter.OperationListener;
 import io.opentelemetry.instrumentation.api.instrumenter.OperationMetrics;
 import java.util.function.BiConsumer;

+ 1 - 1
instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpMetricsAdvice.java

@@ -8,8 +8,8 @@ package io.opentelemetry.instrumentation.api.semconv.http;
 import static java.util.Arrays.asList;
 import static java.util.Collections.unmodifiableList;
 
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
-import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.semconv.ErrorAttributes;
 import io.opentelemetry.semconv.HttpAttributes;
 import io.opentelemetry.semconv.NetworkAttributes;

+ 1 - 1
instrumentation/micrometer/micrometer-1.5/library/build.gradle.kts

@@ -3,7 +3,7 @@ plugins {
 }
 
 dependencies {
-  compileOnly("io.opentelemetry:opentelemetry-extension-incubator")
+  compileOnly("io.opentelemetry:opentelemetry-api-incubator")
 
   library("io.micrometer:micrometer-core:1.5.0")
 

+ 1 - 1
instrumentation/micrometer/micrometer-1.5/library/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/HistogramAdviceUtil.java

@@ -9,8 +9,8 @@ import static java.util.Collections.emptyList;
 
 import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
 import io.micrometer.core.instrument.util.TimeUtils;
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
-import io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.NavigableSet;

+ 14 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/trace/ApplicationSpan.java

@@ -100,6 +100,20 @@ class ApplicationSpan implements Span {
     return this;
   }
 
+  @Override
+  @CanIgnoreReturnValue
+  public Span addLink(SpanContext spanContext) {
+    agentSpan.addLink(Bridging.toAgent(spanContext));
+    return this;
+  }
+
+  @Override
+  @CanIgnoreReturnValue
+  public Span addLink(SpanContext spanContext, Attributes attributes) {
+    agentSpan.addLink(Bridging.toAgent(spanContext), Bridging.toAgent(attributes));
+    return this;
+  }
+
   @Override
   @CanIgnoreReturnValue
   public Span setStatus(StatusCode status) {

+ 8 - 2
instrumentation/opentelemetry-api/opentelemetry-api-1.27/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_27/ApplicationOpenTelemetry127.java

@@ -63,10 +63,16 @@ public final class ApplicationOpenTelemetry127 implements OpenTelemetry {
   }
 
   private static ApplicationMeterFactory getMeterFactory() {
-    // this class is defined in opentelemetry-api-1.32
+    // this class is defined in opentelemetry-api-1.37
     ApplicationMeterFactory meterFactory =
         getMeterFactory(
-            "io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics.ApplicationMeterFactory132Incubator");
+            "io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationMeterFactory137Incubator");
+    if (meterFactory == null) {
+      // this class is defined in opentelemetry-api-1.32
+      meterFactory =
+          getMeterFactory(
+              "io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics.ApplicationMeterFactory132Incubator");
+    }
     if (meterFactory == null) {
       // this class is defined in opentelemetry-api-1.32
       meterFactory =

+ 2 - 3
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/build.gradle.kts

@@ -4,7 +4,7 @@ plugins {
 
 dependencies {
   compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_31"))
-  compileOnly("io.opentelemetry:opentelemetry-extension-incubator")
+  compileOnly("io.opentelemetry:opentelemetry-api-incubator")
 
   implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
   implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
@@ -12,14 +12,13 @@ dependencies {
   implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.15:javaagent"))
   implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent"))
 
-  testImplementation("io.opentelemetry:opentelemetry-extension-incubator")
+  testImplementation("io.opentelemetry:opentelemetry-extension-incubator:1.31.0-alpha")
 }
 
 configurations.configureEach {
   if (name == "testRuntimeClasspath" || name == "testCompileClasspath") {
     resolutionStrategy {
       force("io.opentelemetry:opentelemetry-api:1.31.0")
-      force("io.opentelemetry:opentelemetry-extension-incubator:1.31.0-alpha")
     }
   }
 }

+ 8 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/OpenTelemetryApiInstrumentationModule.java

@@ -5,12 +5,14 @@
 
 package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31;
 
+import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
 import static java.util.Collections.singletonList;
 
 import com.google.auto.service.AutoService;
 import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
 import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
 import java.util.List;
+import net.bytebuddy.matcher.ElementMatcher;
 
 @AutoService(InstrumentationModule.class)
 public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule {
@@ -27,4 +29,10 @@ public class OpenTelemetryApiInstrumentationModule extends InstrumentationModule
   public List<TypeInstrumentation> typeInstrumentations() {
     return singletonList(new OpenTelemetryInstrumentation());
   }
+
+  @Override
+  public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
+    return hasClassesNamed(
+        "application.io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder");
+  }
 }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleCounterBuilder131.java

@@ -24,7 +24,7 @@ final class ApplicationDoubleCounterBuilder131 extends ApplicationDoubleCounterB
 
   @Override
   public ExtendedDoubleCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleCounterBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 3 - 4
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleGaugeBuilder131.java

@@ -31,9 +31,8 @@ final class ApplicationDoubleGaugeBuilder131 extends ApplicationDoubleGaugeBuild
 
   @Override
   public DoubleGauge build() {
-    io.opentelemetry.extension.incubator.metrics.DoubleGauge agentDoubleGauge =
-        ((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder)
-            .build();
+    io.opentelemetry.api.incubator.metrics.DoubleGauge agentDoubleGauge =
+        ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder).build();
     return new DoubleGauge() {
 
       @Override
@@ -50,7 +49,7 @@ final class ApplicationDoubleGaugeBuilder131 extends ApplicationDoubleGaugeBuild
 
   @Override
   public ExtendedDoubleGaugeBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleHistogramBuilder131.java

@@ -37,7 +37,7 @@ final class ApplicationDoubleHistogramBuilder131 extends ApplicationDoubleHistog
 
   @Override
   public ExtendedDoubleHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationDoubleUpDownCounterBuilder131.java

@@ -24,7 +24,7 @@ final class ApplicationDoubleUpDownCounterBuilder131 extends ApplicationDoubleUp
 
   @Override
   public ExtendedDoubleUpDownCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleUpDownCounterBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongCounterBuilder131.java

@@ -29,7 +29,7 @@ final class ApplicationLongCounterBuilder131 extends ApplicationLongCounterBuild
 
   @Override
   public ExtendedLongCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedLongCounterBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 3 - 4
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongGaugeBuilder131.java

@@ -25,9 +25,8 @@ final class ApplicationLongGaugeBuilder131 extends ApplicationLongGaugeBuilder
 
   @Override
   public LongGauge build() {
-    io.opentelemetry.extension.incubator.metrics.LongGauge agentLongGauge =
-        ((io.opentelemetry.extension.incubator.metrics.ExtendedLongGaugeBuilder) agentBuilder)
-            .build();
+    io.opentelemetry.api.incubator.metrics.LongGauge agentLongGauge =
+        ((io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder) agentBuilder).build();
     return new LongGauge() {
       @Override
       public void set(long value) {
@@ -43,7 +42,7 @@ final class ApplicationLongGaugeBuilder131 extends ApplicationLongGaugeBuilder
 
   @Override
   public ExtendedLongGaugeBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedLongGaugeBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongHistogramBuilder131.java

@@ -31,7 +31,7 @@ final class ApplicationLongHistogramBuilder131 extends ApplicationLongHistogramB
 
   @Override
   public ExtendedLongHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedLongHistogramBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/ApplicationLongUpDownCounterBuilder131.java

@@ -30,7 +30,7 @@ final class ApplicationLongUpDownCounterBuilder131 extends ApplicationLongUpDown
 
   @Override
   public ExtendedLongUpDownCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedLongUpDownCounterBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 2 - 2
instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/build.gradle.kts

@@ -4,7 +4,7 @@ plugins {
 
 dependencies {
   compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_32"))
-  compileOnly("io.opentelemetry:opentelemetry-extension-incubator")
+  compileOnly("io.opentelemetry:opentelemetry-api-incubator")
 
   implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
   implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
@@ -18,7 +18,7 @@ testing {
   suites {
     val incubatorTest by registering(JvmTestSuite::class) {
       dependencies {
-        implementation("io.opentelemetry:opentelemetry-extension-incubator")
+        implementation("io.opentelemetry:opentelemetry-extension-incubator:1.32.0-alpha")
       }
     }
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationDoubleHistogramBuilder132Incubator.java

@@ -37,7 +37,7 @@ class ApplicationDoubleHistogramBuilder132Incubator extends ApplicationDoubleHis
 
   @Override
   public ExtendedDoubleHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedDoubleHistogramBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 1 - 1
instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/ApplicationLongHistogramBuilder132Incubator.java

@@ -31,7 +31,7 @@ class ApplicationLongHistogramBuilder132Incubator extends ApplicationLongHistogr
 
   @Override
   public ExtendedLongHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
-    ((io.opentelemetry.extension.incubator.metrics.ExtendedLongHistogramBuilder) agentBuilder)
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder) agentBuilder)
         .setAttributesAdvice(Bridging.toAgent(attributes));
     return this;
   }

+ 32 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/build.gradle.kts

@@ -0,0 +1,32 @@
+plugins {
+  id("otel.javaagent-instrumentation")
+}
+
+dependencies {
+  compileOnly(project(":opentelemetry-api-shaded-for-instrumenting", configuration = "v1_37"))
+  compileOnly("io.opentelemetry:opentelemetry-api-incubator")
+
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.0:javaagent"))
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.4:javaagent"))
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.10:javaagent"))
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.15:javaagent"))
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent"))
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent"))
+  implementation(project(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent"))
+}
+
+testing {
+  suites {
+    val incubatorTest by registering(JvmTestSuite::class) {
+      dependencies {
+        implementation("io.opentelemetry:opentelemetry-api-incubator:1.37.0-alpha")
+      }
+    }
+  }
+}
+
+tasks {
+  check {
+    dependsOn(testing.suites)
+  }
+}

+ 468 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java

@@ -0,0 +1,468 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;
+
+import static io.opentelemetry.api.common.AttributeKey.stringKey;
+import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
+import static java.util.Collections.singletonList;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.incubator.metrics.DoubleGauge;
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
+import io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder;
+import io.opentelemetry.api.incubator.metrics.LongGauge;
+import io.opentelemetry.api.metrics.DoubleCounter;
+import io.opentelemetry.api.metrics.DoubleCounterBuilder;
+import io.opentelemetry.api.metrics.DoubleGaugeBuilder;
+import io.opentelemetry.api.metrics.DoubleHistogram;
+import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
+import io.opentelemetry.api.metrics.DoubleUpDownCounter;
+import io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
+import io.opentelemetry.api.metrics.LongCounter;
+import io.opentelemetry.api.metrics.LongCounterBuilder;
+import io.opentelemetry.api.metrics.LongGaugeBuilder;
+import io.opentelemetry.api.metrics.LongHistogram;
+import io.opentelemetry.api.metrics.LongHistogramBuilder;
+import io.opentelemetry.api.metrics.LongUpDownCounter;
+import io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
+import io.opentelemetry.api.metrics.Meter;
+import io.opentelemetry.api.metrics.ObservableDoubleGauge;
+import io.opentelemetry.api.metrics.ObservableLongGauge;
+import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
+import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
+import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions;
+import org.assertj.core.api.AbstractIterableAssert;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class MeterTest {
+
+  @RegisterExtension
+  static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
+
+  private String instrumentationName;
+  private Meter meter;
+
+  @BeforeEach
+  void setupMeter(TestInfo test) {
+    instrumentationName = "test-" + test.getDisplayName();
+    meter =
+        testing
+            .getOpenTelemetry()
+            .getMeterProvider()
+            .meterBuilder(instrumentationName)
+            .setInstrumentationVersion("1.2.3")
+            .setSchemaUrl("http://schema.org")
+            .build();
+  }
+
+  @Test
+  void longCounter() {
+    LongCounterBuilder builder = meter.counterBuilder("test").setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedLongCounterBuilder.class);
+    ExtendedLongCounterBuilder extendedBuilder = (ExtendedLongCounterBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    LongCounter instrument = builder.build();
+
+    instrument.add(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+    instrument.add(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasLongSumSatisfying(
+                            sum ->
+                                sum.isMonotonic()
+                                    .hasPointsSatisfying(
+                                        point ->
+                                            point
+                                                .hasValue(11)
+                                                .hasAttributesSatisfying(
+                                                    equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void doubleCounter() {
+    DoubleCounterBuilder builder =
+        meter.counterBuilder("test").ofDoubles().setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedDoubleCounterBuilder.class);
+    ExtendedDoubleCounterBuilder extendedBuilder = (ExtendedDoubleCounterBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    DoubleCounter instrument = builder.build();
+
+    instrument.add(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+    instrument.add(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasDoubleSumSatisfying(
+                            sum ->
+                                sum.isMonotonic()
+                                    .hasPointsSatisfying(
+                                        point ->
+                                            point
+                                                .hasValue(12.1)
+                                                .hasAttributesSatisfying(
+                                                    equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void longUpDownCounter() {
+    LongUpDownCounterBuilder builder =
+        meter.upDownCounterBuilder("test").setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedLongUpDownCounterBuilder.class);
+    ExtendedLongUpDownCounterBuilder extendedBuilder = (ExtendedLongUpDownCounterBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    LongUpDownCounter instrument = builder.build();
+
+    instrument.add(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+    instrument.add(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasLongSumSatisfying(
+                            sum ->
+                                sum.isNotMonotonic()
+                                    .hasPointsSatisfying(
+                                        point ->
+                                            point
+                                                .hasValue(11)
+                                                .hasAttributesSatisfying(
+                                                    equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void doubleUpDownCounter() {
+    DoubleUpDownCounterBuilder builder =
+        meter.upDownCounterBuilder("test").ofDoubles().setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedDoubleUpDownCounterBuilder.class);
+    ExtendedDoubleUpDownCounterBuilder extendedBuilder =
+        (ExtendedDoubleUpDownCounterBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    DoubleUpDownCounter instrument = builder.build();
+
+    instrument.add(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+    instrument.add(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasDoubleSumSatisfying(
+                            sum ->
+                                sum.isNotMonotonic()
+                                    .hasPointsSatisfying(
+                                        point ->
+                                            point
+                                                .hasValue(12.1)
+                                                .hasAttributesSatisfying(
+                                                    equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void longHistogram() {
+    LongHistogramBuilder builder =
+        meter.histogramBuilder("test").ofLongs().setDescription("d").setUnit("u");
+    builder.setExplicitBucketBoundariesAdvice(singletonList(10L));
+    assertThat(builder).isInstanceOf(ExtendedLongHistogramBuilder.class);
+    ExtendedLongHistogramBuilder extendedBuilder = (ExtendedLongHistogramBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    LongHistogram instrument = builder.build();
+
+    instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+    instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasHistogramSatisfying(
+                            histogram ->
+                                histogram.hasPointsSatisfying(
+                                    point ->
+                                        point
+                                            .hasSum(11.0)
+                                            .hasBucketBoundaries(10.0)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void doubleHistogram() {
+    DoubleHistogramBuilder builder =
+        meter.histogramBuilder("test").setDescription("d").setUnit("u");
+    builder.setExplicitBucketBoundariesAdvice(singletonList(10.0));
+    assertThat(builder).isInstanceOf(ExtendedDoubleHistogramBuilder.class);
+    ExtendedDoubleHistogramBuilder extendedBuilder = (ExtendedDoubleHistogramBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    DoubleHistogram instrument = builder.build();
+
+    instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+    instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasHistogramSatisfying(
+                            histogram ->
+                                histogram.hasPointsSatisfying(
+                                    point ->
+                                        point
+                                            .hasSum(12.1)
+                                            .hasBucketBoundaries(10.0)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void longGauge() throws InterruptedException {
+    LongGaugeBuilder builder =
+        meter.gaugeBuilder("test").ofLongs().setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedLongGaugeBuilder.class);
+    ExtendedLongGaugeBuilder extendedBuilder = (ExtendedLongGaugeBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    ObservableLongGauge observableGauge =
+        builder.buildWithCallback(
+            result ->
+                result.record(123, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasLongGaugeSatisfying(
+                            gauge ->
+                                gauge.hasPointsSatisfying(
+                                    point ->
+                                        point
+                                            .hasValue(123)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+
+    observableGauge.close();
+
+    // sleep exporter interval
+    Thread.sleep(100);
+    testing.clearData();
+    Thread.sleep(100);
+
+    testing.waitAndAssertMetrics(instrumentationName, "test", AbstractIterableAssert::isEmpty);
+  }
+
+  @Test
+  void syncLongGauge() throws InterruptedException {
+    LongGaugeBuilder builder =
+        meter.gaugeBuilder("test").ofLongs().setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedLongGaugeBuilder.class);
+    ExtendedLongGaugeBuilder extendedBuilder = (ExtendedLongGaugeBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    LongGauge longGauge = extendedBuilder.build();
+    longGauge.set(321);
+    longGauge.set(123, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasLongGaugeSatisfying(
+                            gauge ->
+                                gauge.hasPointsSatisfying(
+                                    point -> point.hasValue(321).hasAttributes(Attributes.empty()),
+                                    point ->
+                                        point
+                                            .hasValue(123)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+
+    // sleep exporter interval
+    Thread.sleep(100);
+    testing.clearData();
+    Thread.sleep(100);
+
+    testing.waitAndAssertMetrics(instrumentationName, "test", AbstractIterableAssert::isEmpty);
+  }
+
+  @Test
+  void doubleGauge() throws InterruptedException {
+    DoubleGaugeBuilder builder = meter.gaugeBuilder("test").setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedDoubleGaugeBuilder.class);
+    ExtendedDoubleGaugeBuilder extendedBuilder = (ExtendedDoubleGaugeBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    ObservableDoubleGauge observableGauge =
+        builder.buildWithCallback(
+            result ->
+                result.record(1.23, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasDoubleGaugeSatisfying(
+                            gauge ->
+                                gauge.hasPointsSatisfying(
+                                    point ->
+                                        point
+                                            .hasValue(1.23)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+
+    observableGauge.close();
+
+    // sleep exporter interval
+    Thread.sleep(100);
+    testing.clearData();
+    Thread.sleep(100);
+
+    testing.waitAndAssertMetrics(instrumentationName, "test", AbstractIterableAssert::isEmpty);
+  }
+
+  @Test
+  void syncDoubleGauge() throws InterruptedException {
+    DoubleGaugeBuilder builder = meter.gaugeBuilder("test").setDescription("d").setUnit("u");
+    assertThat(builder).isInstanceOf(ExtendedDoubleGaugeBuilder.class);
+    ExtendedDoubleGaugeBuilder extendedBuilder = (ExtendedDoubleGaugeBuilder) builder;
+    extendedBuilder.setAttributesAdvice(singletonList(stringKey("test")));
+
+    DoubleGauge doubleGauge = extendedBuilder.build();
+    doubleGauge.set(3.21);
+    doubleGauge.set(1.23, Attributes.of(stringKey("test"), "test", stringKey("q"), "r"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasDoubleGaugeSatisfying(
+                            gauge ->
+                                gauge.hasPointsSatisfying(
+                                    point -> point.hasValue(3.21).hasAttributes(Attributes.empty()),
+                                    point ->
+                                        point
+                                            .hasValue(1.23)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+
+    // sleep exporter interval
+    Thread.sleep(100);
+    testing.clearData();
+    Thread.sleep(100);
+
+    testing.waitAndAssertMetrics(instrumentationName, "test", AbstractIterableAssert::isEmpty);
+  }
+}

+ 40 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/OpenTelemetryApiIncubatorInstrumentationModule.java

@@ -0,0 +1,40 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator;
+
+import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
+import static java.util.Collections.singletonList;
+
+import com.google.auto.service.AutoService;
+import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
+import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
+import java.util.List;
+import net.bytebuddy.matcher.ElementMatcher;
+
+@AutoService(InstrumentationModule.class)
+public class OpenTelemetryApiIncubatorInstrumentationModule extends InstrumentationModule {
+  public OpenTelemetryApiIncubatorInstrumentationModule() {
+    super("opentelemetry-api", "opentelemetry-api-1.37", "opentelemetry-api-incubator-1.37");
+  }
+
+  @Override
+  public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
+    // skip instrumentation when opentelemetry-api-incubator is not present, instrumentation
+    // is handled by OpenTelemetryApiInstrumentationModule
+    return hasClassesNamed(
+        "application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder");
+  }
+
+  @Override
+  public boolean isIndyModule() {
+    return false;
+  }
+
+  @Override
+  public List<TypeInstrumentation> typeInstrumentations() {
+    return singletonList(new OpenTelemetryIncubatorInstrumentation());
+  }
+}

+ 40 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/OpenTelemetryIncubatorInstrumentation.java

@@ -0,0 +1,40 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator;
+
+import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.none;
+
+import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
+import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics.ApplicationMeterFactory137Incubator;
+import net.bytebuddy.asm.Advice;
+import net.bytebuddy.description.type.TypeDescription;
+import net.bytebuddy.matcher.ElementMatcher;
+
+public class OpenTelemetryIncubatorInstrumentation implements TypeInstrumentation {
+
+  @Override
+  public ElementMatcher<TypeDescription> typeMatcher() {
+    return named("application.io.opentelemetry.api.GlobalOpenTelemetry");
+  }
+
+  @Override
+  public void transform(TypeTransformer transformer) {
+    transformer.applyAdviceToMethod(
+        none(), OpenTelemetryIncubatorInstrumentation.class.getName() + "$InitAdvice");
+  }
+
+  @SuppressWarnings({"ReturnValueIgnored", "unused"})
+  public static class InitAdvice {
+    @Advice.OnMethodEnter
+    public static void init() {
+      // the sole purpose of this advice is to ensure that ApplicationMeterFactory137Incubator
+      // is recognized as helper class and injected into class loader
+      ApplicationMeterFactory137Incubator.class.getName();
+    }
+  }
+}

+ 44 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationDoubleHistogramBuilder137Incubator.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
+import application.io.opentelemetry.api.metrics.LongHistogramBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
+import java.util.List;
+
+class ApplicationDoubleHistogramBuilder137Incubator extends ApplicationDoubleHistogramBuilder
+    implements ExtendedDoubleHistogramBuilder {
+
+  private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder;
+
+  ApplicationDoubleHistogramBuilder137Incubator(
+      io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public LongHistogramBuilder ofLongs() {
+    return new ApplicationLongHistogramBuilder137Incubator(agentBuilder.ofLongs());
+  }
+
+  @Override
+  public ExtendedDoubleHistogramBuilder setExplicitBucketBoundariesAdvice(
+      List<Double> bucketBoundaries) {
+    agentBuilder.setExplicitBucketBoundariesAdvice(bucketBoundaries);
+    return this;
+  }
+
+  @Override
+  public ExtendedDoubleHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 38 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationLongHistogramBuilder137Incubator.java

@@ -0,0 +1,38 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongHistogramBuilder;
+import java.util.List;
+
+class ApplicationLongHistogramBuilder137Incubator extends ApplicationLongHistogramBuilder
+    implements ExtendedLongHistogramBuilder {
+
+  private final io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder;
+
+  ApplicationLongHistogramBuilder137Incubator(
+      io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public ExtendedLongHistogramBuilder setExplicitBucketBoundariesAdvice(
+      List<Long> bucketBoundaries) {
+    agentBuilder.setExplicitBucketBoundariesAdvice(bucketBoundaries);
+    return this;
+  }
+
+  @Override
+  public ExtendedLongHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 24 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeter137Incubator.java

@@ -0,0 +1,24 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;
+
+import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics.ApplicationMeter137;
+
+class ApplicationMeter137Incubator extends ApplicationMeter137 {
+
+  private final io.opentelemetry.api.metrics.Meter agentMeter;
+
+  ApplicationMeter137Incubator(io.opentelemetry.api.metrics.Meter agentMeter) {
+    super(agentMeter);
+    this.agentMeter = agentMeter;
+  }
+
+  @Override
+  public DoubleHistogramBuilder histogramBuilder(String name) {
+    return new ApplicationDoubleHistogramBuilder137Incubator(agentMeter.histogramBuilder(name));
+  }
+}

+ 18 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/ApplicationMeterFactory137Incubator.java

@@ -0,0 +1,18 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics;
+
+import io.opentelemetry.api.metrics.Meter;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeter;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory;
+
+// this class is used from opentelemetry-api-1.27 via reflection
+public final class ApplicationMeterFactory137Incubator implements ApplicationMeterFactory {
+  @Override
+  public ApplicationMeter newMeter(Meter agentMeter) {
+    return new ApplicationMeter137Incubator(agentMeter);
+  }
+}

+ 31 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleCounterBuilder137.java

@@ -0,0 +1,31 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleCounterBuilder;
+import java.util.List;
+
+final class ApplicationDoubleCounterBuilder137 extends ApplicationDoubleCounterBuilder
+    implements ExtendedDoubleCounterBuilder {
+
+  private final io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder;
+
+  ApplicationDoubleCounterBuilder137(
+      io.opentelemetry.api.metrics.DoubleCounterBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public ExtendedDoubleCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleCounterBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 56 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleGaugeBuilder137.java

@@ -0,0 +1,56 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.common.Attributes;
+import application.io.opentelemetry.api.incubator.metrics.DoubleGauge;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder;
+import application.io.opentelemetry.api.metrics.LongGaugeBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleGaugeBuilder;
+import java.util.List;
+
+final class ApplicationDoubleGaugeBuilder137 extends ApplicationDoubleGaugeBuilder
+    implements ExtendedDoubleGaugeBuilder {
+
+  private final io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder;
+
+  ApplicationDoubleGaugeBuilder137(io.opentelemetry.api.metrics.DoubleGaugeBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public LongGaugeBuilder ofLongs() {
+    return new ApplicationLongGaugeBuilder137(agentBuilder.ofLongs());
+  }
+
+  @Override
+  public DoubleGauge build() {
+    io.opentelemetry.api.incubator.metrics.DoubleGauge agentDoubleGauge =
+        ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder).build();
+    return new DoubleGauge() {
+
+      @Override
+      public void set(double value) {
+        agentDoubleGauge.set(value);
+      }
+
+      @Override
+      public void set(double value, Attributes attributes) {
+        agentDoubleGauge.set(value, Bridging.toAgent(attributes));
+      }
+    };
+  }
+
+  @Override
+  public ExtendedDoubleGaugeBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleGaugeBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 44 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleHistogramBuilder137.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder;
+import application.io.opentelemetry.api.metrics.LongHistogramBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleHistogramBuilder;
+import java.util.List;
+
+final class ApplicationDoubleHistogramBuilder137 extends ApplicationDoubleHistogramBuilder
+    implements ExtendedDoubleHistogramBuilder {
+
+  private final io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder;
+
+  ApplicationDoubleHistogramBuilder137(
+      io.opentelemetry.api.metrics.DoubleHistogramBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public LongHistogramBuilder ofLongs() {
+    return new ApplicationLongHistogramBuilder137(agentBuilder.ofLongs());
+  }
+
+  @Override
+  public ExtendedDoubleHistogramBuilder setExplicitBucketBoundariesAdvice(
+      List<Double> bucketBoundaries) {
+    agentBuilder.setExplicitBucketBoundariesAdvice(bucketBoundaries);
+    return this;
+  }
+
+  @Override
+  public ExtendedDoubleHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleHistogramBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 31 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationDoubleUpDownCounterBuilder137.java

@@ -0,0 +1,31 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationDoubleUpDownCounterBuilder;
+import java.util.List;
+
+final class ApplicationDoubleUpDownCounterBuilder137 extends ApplicationDoubleUpDownCounterBuilder
+    implements ExtendedDoubleUpDownCounterBuilder {
+
+  private final io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder;
+
+  ApplicationDoubleUpDownCounterBuilder137(
+      io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public ExtendedDoubleUpDownCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedDoubleUpDownCounterBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 36 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongCounterBuilder137.java

@@ -0,0 +1,36 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder;
+import application.io.opentelemetry.api.metrics.DoubleCounterBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongCounterBuilder;
+import java.util.List;
+
+final class ApplicationLongCounterBuilder137 extends ApplicationLongCounterBuilder
+    implements ExtendedLongCounterBuilder {
+
+  private final io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder;
+
+  ApplicationLongCounterBuilder137(io.opentelemetry.api.metrics.LongCounterBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public DoubleCounterBuilder ofDoubles() {
+    return new ApplicationDoubleCounterBuilder137(agentBuilder.ofDoubles());
+  }
+
+  @Override
+  public ExtendedLongCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongCounterBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 49 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongGaugeBuilder137.java

@@ -0,0 +1,49 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.common.Attributes;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder;
+import application.io.opentelemetry.api.incubator.metrics.LongGauge;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongGaugeBuilder;
+import java.util.List;
+
+final class ApplicationLongGaugeBuilder137 extends ApplicationLongGaugeBuilder
+    implements ExtendedLongGaugeBuilder {
+
+  private final io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder;
+
+  ApplicationLongGaugeBuilder137(io.opentelemetry.api.metrics.LongGaugeBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public LongGauge build() {
+    io.opentelemetry.api.incubator.metrics.LongGauge agentLongGauge =
+        ((io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder) agentBuilder).build();
+    return new LongGauge() {
+      @Override
+      public void set(long value) {
+        agentLongGauge.set(value);
+      }
+
+      @Override
+      public void set(long value, Attributes attributes) {
+        agentLongGauge.set(value, Bridging.toAgent(attributes));
+      }
+    };
+  }
+
+  @Override
+  public ExtendedLongGaugeBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongGaugeBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 38 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongHistogramBuilder137.java

@@ -0,0 +1,38 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongHistogramBuilder;
+import java.util.List;
+
+final class ApplicationLongHistogramBuilder137 extends ApplicationLongHistogramBuilder
+    implements ExtendedLongHistogramBuilder {
+
+  private final io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder;
+
+  ApplicationLongHistogramBuilder137(
+      io.opentelemetry.api.metrics.LongHistogramBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public ExtendedLongHistogramBuilder setExplicitBucketBoundariesAdvice(
+      List<Long> bucketBoundaries) {
+    agentBuilder.setExplicitBucketBoundariesAdvice(bucketBoundaries);
+    return this;
+  }
+
+  @Override
+  public ExtendedLongHistogramBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongHistogramBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 37 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationLongUpDownCounterBuilder137.java

@@ -0,0 +1,37 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.common.AttributeKey;
+import application.io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder;
+import application.io.opentelemetry.api.metrics.DoubleUpDownCounterBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.trace.Bridging;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationLongUpDownCounterBuilder;
+import java.util.List;
+
+final class ApplicationLongUpDownCounterBuilder137 extends ApplicationLongUpDownCounterBuilder
+    implements ExtendedLongUpDownCounterBuilder {
+
+  private final io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder;
+
+  ApplicationLongUpDownCounterBuilder137(
+      io.opentelemetry.api.metrics.LongUpDownCounterBuilder agentBuilder) {
+    super(agentBuilder);
+    this.agentBuilder = agentBuilder;
+  }
+
+  @Override
+  public DoubleUpDownCounterBuilder ofDoubles() {
+    return new ApplicationDoubleUpDownCounterBuilder137(agentBuilder.ofDoubles());
+  }
+
+  @Override
+  public ExtendedLongUpDownCounterBuilder setAttributesAdvice(List<AttributeKey<?>> attributes) {
+    ((io.opentelemetry.api.incubator.metrics.ExtendedLongUpDownCounterBuilder) agentBuilder)
+        .setAttributesAdvice(Bridging.toAgent(attributes));
+    return this;
+  }
+}

+ 42 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationMeter137.java

@@ -0,0 +1,42 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import application.io.opentelemetry.api.metrics.DoubleGaugeBuilder;
+import application.io.opentelemetry.api.metrics.DoubleHistogramBuilder;
+import application.io.opentelemetry.api.metrics.LongCounterBuilder;
+import application.io.opentelemetry.api.metrics.LongUpDownCounterBuilder;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_15.metrics.ApplicationMeter115;
+
+public class ApplicationMeter137 extends ApplicationMeter115 {
+
+  private final io.opentelemetry.api.metrics.Meter agentMeter;
+
+  protected ApplicationMeter137(io.opentelemetry.api.metrics.Meter agentMeter) {
+    super(agentMeter);
+    this.agentMeter = agentMeter;
+  }
+
+  @Override
+  public LongCounterBuilder counterBuilder(String name) {
+    return new ApplicationLongCounterBuilder137(agentMeter.counterBuilder(name));
+  }
+
+  @Override
+  public LongUpDownCounterBuilder upDownCounterBuilder(String name) {
+    return new ApplicationLongUpDownCounterBuilder137(agentMeter.upDownCounterBuilder(name));
+  }
+
+  @Override
+  public DoubleHistogramBuilder histogramBuilder(String name) {
+    return new ApplicationDoubleHistogramBuilder137(agentMeter.histogramBuilder(name));
+  }
+
+  @Override
+  public DoubleGaugeBuilder gaugeBuilder(String name) {
+    return new ApplicationDoubleGaugeBuilder137(agentMeter.gaugeBuilder(name));
+  }
+}

+ 18 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/ApplicationMeterFactory137.java

@@ -0,0 +1,18 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import io.opentelemetry.api.metrics.Meter;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeter;
+import io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics.ApplicationMeterFactory;
+
+// this class is used from opentelemetry-api-1.27 via reflection
+public final class ApplicationMeterFactory137 implements ApplicationMeterFactory {
+  @Override
+  public ApplicationMeter newMeter(Meter agentMeter) {
+    return new ApplicationMeter137(agentMeter);
+  }
+}

+ 116 - 0
instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java

@@ -0,0 +1,116 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics;
+
+import static io.opentelemetry.api.common.AttributeKey.stringKey;
+import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
+import static java.util.Collections.singletonList;
+
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.metrics.DoubleHistogram;
+import io.opentelemetry.api.metrics.DoubleHistogramBuilder;
+import io.opentelemetry.api.metrics.LongHistogram;
+import io.opentelemetry.api.metrics.LongHistogramBuilder;
+import io.opentelemetry.api.metrics.Meter;
+import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
+import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
+import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+class MeterTest {
+
+  @RegisterExtension
+  static final AgentInstrumentationExtension testing = AgentInstrumentationExtension.create();
+
+  private String instrumentationName;
+  private Meter meter;
+
+  @BeforeEach
+  void setupMeter(TestInfo test) {
+    instrumentationName = "test-" + test.getDisplayName();
+    meter =
+        testing
+            .getOpenTelemetry()
+            .getMeterProvider()
+            .meterBuilder(instrumentationName)
+            .setInstrumentationVersion("1.2.3")
+            .setSchemaUrl("http://schema.org")
+            .build();
+  }
+
+  @Test
+  void longHistogram() {
+    LongHistogramBuilder builder =
+        meter.histogramBuilder("test").ofLongs().setDescription("d").setUnit("u");
+    builder.setExplicitBucketBoundariesAdvice(singletonList(10L));
+
+    LongHistogram instrument = builder.build();
+
+    instrument.record(5, Attributes.of(stringKey("test"), "test"));
+    instrument.record(6, Attributes.of(stringKey("test"), "test"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasHistogramSatisfying(
+                            histogram ->
+                                histogram.hasPointsSatisfying(
+                                    point ->
+                                        point
+                                            .hasSum(11.0)
+                                            .hasBucketBoundaries(10.0)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+  }
+
+  @Test
+  void doubleHistogram() {
+    DoubleHistogramBuilder builder =
+        meter.histogramBuilder("test").setDescription("d").setUnit("u");
+    builder.setExplicitBucketBoundariesAdvice(singletonList(10.0));
+
+    DoubleHistogram instrument = builder.build();
+
+    instrument.record(5.5, Attributes.of(stringKey("test"), "test"));
+    instrument.record(6.6, Attributes.of(stringKey("test"), "test"));
+
+    testing.waitAndAssertMetrics(
+        instrumentationName,
+        "test",
+        metrics ->
+            metrics.anySatisfy(
+                metric ->
+                    OpenTelemetryAssertions.assertThat(metric)
+                        .hasDescription("d")
+                        .hasUnit("u")
+                        .hasInstrumentationScope(
+                            InstrumentationScopeInfo.builder(instrumentationName)
+                                .setVersion("1.2.3")
+                                .build())
+                        .hasHistogramSatisfying(
+                            histogram ->
+                                histogram.hasPointsSatisfying(
+                                    point ->
+                                        point
+                                            .hasSum(12.1)
+                                            .hasBucketBoundaries(10.0)
+                                            .hasAttributesSatisfying(
+                                                equalTo(stringKey("test"), "test"))))));
+  }
+}

+ 1 - 1
instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/build.gradle.kts

@@ -4,9 +4,9 @@ plugins {
 
 dependencies {
   implementation(project(":instrumentation:runtime-telemetry:runtime-telemetry-java8:library"))
-  implementation("io.opentelemetry:opentelemetry-api-events")
 
   compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
+  compileOnly("io.opentelemetry:opentelemetry-api-incubator")
 }
 
 tasks {

+ 15 - 17
instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzer.java

@@ -13,8 +13,8 @@ import io.opentelemetry.api.OpenTelemetry;
 import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.api.common.AttributesBuilder;
-import io.opentelemetry.api.events.EventEmitter;
-import io.opentelemetry.api.events.GlobalEventEmitterProvider;
+import io.opentelemetry.api.incubator.events.EventLogger;
+import io.opentelemetry.api.incubator.events.GlobalEventLoggerProvider;
 import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.JmxRuntimeMetricsUtil;
 import io.opentelemetry.sdk.common.Clock;
 import io.opentelemetry.sdk.internal.DaemonThreadFactory;
@@ -43,8 +43,7 @@ final class JarAnalyzer implements ClassFileTransformer {
 
   private static final Logger logger = Logger.getLogger(JarAnalyzer.class.getName());
 
-  private static final String EVENT_DOMAIN_PACKAGE = "package";
-  private static final String EVENT_NAME_INFO = "info";
+  private static final String EVENT_NAME_INFO = "package.info";
   static final AttributeKey<String> PACKAGE_NAME = AttributeKey.stringKey("package.name");
   static final AttributeKey<String> PACKAGE_VERSION = AttributeKey.stringKey("package.version");
   static final AttributeKey<String> PACKAGE_TYPE = AttributeKey.stringKey("package.type");
@@ -59,14 +58,13 @@ final class JarAnalyzer implements ClassFileTransformer {
   private final BlockingQueue<URL> toProcess = new LinkedBlockingDeque<>();
 
   private JarAnalyzer(OpenTelemetry unused, int jarsPerSecond) {
-    // TODO(jack-berg): Use OpenTelemetry to obtain EventEmitter when event API is stable
-    EventEmitter eventEmitter =
-        GlobalEventEmitterProvider.get()
-            .eventEmitterBuilder(JmxRuntimeMetricsUtil.getInstrumentationName())
+    // TODO(jack-berg): Use OpenTelemetry to obtain EventLogger when event API is stable
+    EventLogger eventLogger =
+        GlobalEventLoggerProvider.get()
+            .eventLoggerBuilder(JmxRuntimeMetricsUtil.getInstrumentationName())
             .setInstrumentationVersion(JmxRuntimeMetricsUtil.getInstrumentationVersion())
-            .setEventDomain(EVENT_DOMAIN_PACKAGE)
             .build();
-    Worker worker = new Worker(eventEmitter, toProcess, jarsPerSecond);
+    Worker worker = new Worker(eventLogger, toProcess, jarsPerSecond);
     Thread workerThread =
         new DaemonThreadFactory(JarAnalyzer.class.getSimpleName() + "_WorkerThread")
             .newThread(worker);
@@ -154,12 +152,12 @@ final class JarAnalyzer implements ClassFileTransformer {
 
   private static final class Worker implements Runnable {
 
-    private final EventEmitter eventEmitter;
+    private final EventLogger eventLogger;
     private final BlockingQueue<URL> toProcess;
     private final io.opentelemetry.sdk.internal.RateLimiter rateLimiter;
 
-    private Worker(EventEmitter eventEmitter, BlockingQueue<URL> toProcess, int jarsPerSecond) {
-      this.eventEmitter = eventEmitter;
+    private Worker(EventLogger eventLogger, BlockingQueue<URL> toProcess, int jarsPerSecond) {
+      this.eventLogger = eventLogger;
       this.toProcess = toProcess;
       this.rateLimiter =
           new io.opentelemetry.sdk.internal.RateLimiter(
@@ -168,7 +166,7 @@ final class JarAnalyzer implements ClassFileTransformer {
 
     /**
      * Continuously poll the {@link #toProcess} for archive {@link URL}s, and process each wit
-     * {@link #processUrl(EventEmitter, URL)}.
+     * {@link #processUrl(EventLogger, URL)}.
      */
     @Override
     public void run() {
@@ -189,7 +187,7 @@ final class JarAnalyzer implements ClassFileTransformer {
         try {
           // TODO(jack-berg): add ability to optionally re-process urls periodically to re-emit
           // events
-          processUrl(eventEmitter, archiveUrl);
+          processUrl(eventLogger, archiveUrl);
         } catch (Throwable e) {
           logger.log(Level.WARNING, "Unexpected error processing archive URL: " + archiveUrl, e);
         }
@@ -202,7 +200,7 @@ final class JarAnalyzer implements ClassFileTransformer {
    * Process the {@code archiveUrl}, extracting metadata from it and emitting an event with the
    * content.
    */
-  static void processUrl(EventEmitter eventEmitter, URL archiveUrl) {
+  static void processUrl(EventLogger eventLogger, URL archiveUrl) {
     JarDetails jarDetails;
     try {
       jarDetails = JarDetails.forUrl(archiveUrl);
@@ -241,6 +239,6 @@ final class JarAnalyzer implements ClassFileTransformer {
     builder.put(PACKAGE_CHECKSUM, packageChecksum);
     builder.put(PACKAGE_CHECKSUM_ALGORITHM, "SHA1");
 
-    eventEmitter.emit(EVENT_NAME_INFO, builder.build());
+    eventLogger.builder(EVENT_NAME_INFO).setAttributes(builder.build()).emit();
   }
 }

+ 10 - 18
instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/test/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzerInstallerTest.java

@@ -9,7 +9,6 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.asser
 import static java.util.stream.Collectors.toList;
 
 import io.opentelemetry.api.common.AttributeKey;
-import io.opentelemetry.api.common.Attributes;
 import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
 import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
 import io.opentelemetry.sdk.logs.data.LogRecordData;
@@ -35,23 +34,16 @@ class JarAnalyzerInstallerTest {
     List<LogRecordData> events =
         Awaitility.await()
             .until(
-                () -> {
-                  List<LogRecordData> logRecordData = testing.logRecords();
-                  List<LogRecordData> eventList =
-                      logRecordData.stream()
-                          .filter(
-                              record -> {
-                                Attributes attributes = record.getAttributes();
-                                return "package"
-                                        .equals(
-                                            attributes.get(AttributeKey.stringKey("event.domain")))
-                                    && "info"
-                                        .equals(
-                                            attributes.get(AttributeKey.stringKey("event.name")));
-                              })
-                          .collect(toList());
-                  return eventList;
-                },
+                () ->
+                    testing.logRecords().stream()
+                        .filter(
+                            record ->
+                                "package.info"
+                                    .equals(
+                                        record
+                                            .getAttributes()
+                                            .get(AttributeKey.stringKey("event.name"))))
+                        .collect(toList()),
                 (eventList) -> !eventList.isEmpty());
 
     assertThat(events)

+ 0 - 1
instrumentation/runtime-telemetry/runtime-telemetry-java8/library/build.gradle.kts

@@ -4,7 +4,6 @@ plugins {
 
 dependencies {
   implementation(project(":instrumentation-api"))
-  implementation("io.opentelemetry:opentelemetry-extension-incubator")
 
   testImplementation(project(":testing-common"))
 }

+ 1 - 1
instrumentation/runtime-telemetry/runtime-telemetry-java8/testing/build.gradle.kts

@@ -7,11 +7,11 @@ plugins {
 dependencies {
   testImplementation(project(":instrumentation:runtime-telemetry:runtime-telemetry-java8:javaagent"))
 
-  testImplementation("io.opentelemetry:opentelemetry-api-events")
   testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
 
   // Bring in various archives to test introspection logic
   testImplementation("io.opentelemetry:opentelemetry-api")
+  testImplementation("io.opentelemetry:opentelemetry-api-incubator")
   testImplementation("org.springframework:spring-webmvc:3.1.0.RELEASE")
   testImplementation("com.google.guava:guava")
 }

+ 11 - 4
instrumentation/runtime-telemetry/runtime-telemetry-java8/testing/src/test/java/io/opentelemetry/instrumentation/javaagent/runtimemetrics/java8/JarAnalyzerTest.java

@@ -13,13 +13,16 @@ import static io.opentelemetry.instrumentation.javaagent.runtimemetrics.java8.Ja
 import static io.opentelemetry.instrumentation.javaagent.runtimemetrics.java8.JarAnalyzer.PACKAGE_TYPE;
 import static io.opentelemetry.instrumentation.javaagent.runtimemetrics.java8.JarAnalyzer.PACKAGE_VERSION;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import com.google.common.collect.ImmutableMap;
 import io.opentelemetry.api.common.Attributes;
-import io.opentelemetry.api.events.EventEmitter;
+import io.opentelemetry.api.incubator.events.EventBuilder;
+import io.opentelemetry.api.incubator.events.EventLogger;
 import io.opentelemetry.api.trace.Tracer;
 import io.opentelemetry.sdk.testing.assertj.AttributesAssert;
 import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions;
@@ -39,11 +42,15 @@ class JarAnalyzerTest {
   @ParameterizedTest
   @MethodSource("processUrlArguments")
   void processUrl_EmitsEvents(URL archiveUrl, Consumer<AttributesAssert> attributesConsumer) {
-    EventEmitter eventEmitter = mock(EventEmitter.class);
-    JarAnalyzer.processUrl(eventEmitter, archiveUrl);
+    EventLogger eventLogger = mock(EventLogger.class);
+    EventBuilder builder = mock(EventBuilder.class);
+    when(eventLogger.builder(eq("package.info"))).thenReturn(builder);
+    when(builder.setAttributes(any())).thenReturn(builder);
+
+    JarAnalyzer.processUrl(eventLogger, archiveUrl);
 
     ArgumentCaptor<Attributes> attributesArgumentCaptor = ArgumentCaptor.forClass(Attributes.class);
-    verify(eventEmitter).emit(eq("info"), attributesArgumentCaptor.capture());
+    verify(builder).setAttributes(attributesArgumentCaptor.capture());
 
     attributesConsumer.accept(
         OpenTelemetryAssertions.assertThat(attributesArgumentCaptor.getValue()));

+ 1 - 1
javaagent-tooling/build.gradle.kts

@@ -17,7 +17,7 @@ dependencies {
   implementation(project(":muzzle"))
 
   implementation("io.opentelemetry:opentelemetry-api")
-  testImplementation("io.opentelemetry:opentelemetry-api-events")
+  testImplementation("io.opentelemetry:opentelemetry-api-incubator")
   implementation("io.opentelemetry:opentelemetry-sdk")
   implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
   implementation("io.opentelemetry:opentelemetry-extension-kotlin")

+ 3 - 3
javaagent-tooling/src/test/groovy/io/opentelemetry/javaagent/tooling/OpenTelemetryInstallerTest.groovy

@@ -7,19 +7,19 @@ package io.opentelemetry.javaagent.tooling
 
 import io.opentelemetry.api.GlobalOpenTelemetry
 import io.opentelemetry.api.OpenTelemetry
-import io.opentelemetry.api.events.GlobalEventEmitterProvider
+import io.opentelemetry.api.incubator.events.GlobalEventLoggerProvider
 import spock.lang.Specification
 
 class OpenTelemetryInstallerTest extends Specification {
 
   void setup() {
     GlobalOpenTelemetry.resetForTest()
-    GlobalEventEmitterProvider.resetForTest()
+    GlobalEventLoggerProvider.resetForTest()
   }
 
   void cleanup() {
     GlobalOpenTelemetry.resetForTest()
-    GlobalEventEmitterProvider.resetForTest()
+    GlobalEventLoggerProvider.resetForTest()
   }
 
   def "should initialize GlobalOpenTelemetry"() {

+ 2 - 2
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java

@@ -10,7 +10,7 @@ import static java.util.Collections.singletonMap;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import io.opentelemetry.api.GlobalOpenTelemetry;
-import io.opentelemetry.api.events.GlobalEventEmitterProvider;
+import io.opentelemetry.api.incubator.events.GlobalEventLoggerProvider;
 import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller;
 import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
 import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
@@ -33,7 +33,7 @@ class ConfigurationPropertiesSupplierTest {
   @AfterAll
   static void cleanUp() {
     GlobalOpenTelemetry.resetForTest();
-    GlobalEventEmitterProvider.resetForTest();
+    GlobalEventLoggerProvider.resetForTest();
   }
 
   // regression for https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/6696

+ 2 - 2
javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java

@@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.tooling.config;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import io.opentelemetry.api.GlobalOpenTelemetry;
-import io.opentelemetry.api.events.GlobalEventEmitterProvider;
+import io.opentelemetry.api.incubator.events.GlobalEventLoggerProvider;
 import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller;
 import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
 import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
@@ -21,7 +21,7 @@ class OtlpProtocolPropertiesSupplierTest {
   @AfterEach
   void cleanUp() {
     GlobalOpenTelemetry.resetForTest();
-    GlobalEventEmitterProvider.resetForTest();
+    GlobalEventLoggerProvider.resetForTest();
   }
 
   @SetSystemProperty(

+ 4 - 5
javaagent/build.gradle.kts

@@ -34,11 +34,10 @@ val javaagentLibs by configurations.creating {
 listOf(baseJavaagentLibs, javaagentLibs).forEach {
   it.run {
     exclude("io.opentelemetry", "opentelemetry-api")
-    exclude("io.opentelemetry", "opentelemetry-api-events")
     exclude("io.opentelemetry.semconv", "opentelemetry-semconv")
     exclude("io.opentelemetry.semconv", "opentelemetry-semconv-incubating")
-    // metrics advice API
-    exclude("io.opentelemetry", "opentelemetry-extension-incubator")
+    // events API and metrics advice API
+    exclude("io.opentelemetry", "opentelemetry-api-incubator")
   }
 }
 
@@ -49,8 +48,8 @@ val licenseReportDependencies by configurations.creating {
 
 dependencies {
   bootstrapLibs(project(":instrumentation-api"))
-  // opentelemetry-api is an api dependency of :instrumentation-api, but opentelemetry-api-events is not
-  bootstrapLibs("io.opentelemetry:opentelemetry-api-events")
+  // opentelemetry-api is an api dependency of :instrumentation-api, but opentelemetry-api-incubator is not
+  bootstrapLibs("io.opentelemetry:opentelemetry-api-incubator")
   bootstrapLibs(project(":instrumentation-api-incubator"))
   bootstrapLibs(project(":instrumentation-annotations-support"))
   bootstrapLibs(project(":javaagent-bootstrap"))

+ 57 - 61
licenses/licenses.md

@@ -1,7 +1,7 @@
 
 # javaagent
 ## Dependency License Report
-_2024-04-09 11:58:09 CEST_
+_2024-04-09 22:23:38 EEST_
 ## Apache License, Version 2.0
 
 **1** **Group:** `com.blogspot.mydailyjava` **Name:** `weak-lock-free` **Version:** `0.18`
@@ -55,268 +55,264 @@ _2024-04-09 11:58:09 CEST_
 > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**10** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.36.0`
+**10** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
 
-**11** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.36.0-alpha`
+**11** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-incubator` **Version:** `1.37.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
 
-**12** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.36.0`
+**12** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
 
-**13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.36.0`
+**13** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**14** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging` **Version:** `1.36.0`
+**14** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**15** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging-otlp` **Version:** `1.36.0`
+**15** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-logging-otlp` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**16** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.36.0`
+**16** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**17** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.36.0`
+**17** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**18** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-prometheus` **Version:** `1.36.0-alpha`
+**18** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-prometheus` **Version:** `1.37.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**19** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.36.0`
+**19** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**20** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-zipkin` **Version:** `1.36.0`
+**20** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-zipkin` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**21** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.36.0-alpha`
-> - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
-> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
-
-**22** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-kotlin` **Version:** `1.36.0`
+**21** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-kotlin` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**23** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.36.0`
+**22** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**24** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.36.0`
+**23** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**25** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.36.0`
+**24** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**26** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.36.0`
+**25** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**27** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.36.0`
+**26** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**28** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-incubator` **Version:** `1.36.0-alpha`
+**27** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-incubator` **Version:** `1.37.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**29** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-jaeger-remote-sampler` **Version:** `1.36.0`
+**28** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-jaeger-remote-sampler` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**30** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.36.0`
+**29** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**31** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.36.0`
+**30** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**32** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.36.0`
+**31** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.37.0`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**33** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.34.0-alpha`
+**32** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.34.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**34** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray-propagator` **Version:** `1.34.0-alpha`
+**33** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray-propagator` **Version:** `1.34.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**35** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-gcp-resources` **Version:** `1.34.0-alpha`
+**34** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-gcp-resources` **Version:** `1.34.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**36** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.25.0-alpha`
+**35** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.25.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/semantic-conventions-java](https://github.com/open-telemetry/semantic-conventions-java)
 > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
 
-**37** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv-incubating` **Version:** `1.25.0-alpha`
+**36** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv-incubating` **Version:** `1.25.0-alpha`
 > - **POM Project URL**: [https://github.com/open-telemetry/semantic-conventions-java](https://github.com/open-telemetry/semantic-conventions-java)
 > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
 
-**38** **Group:** `io.prometheus` **Name:** `prometheus-metrics-config` **Version:** `1.1.0`
+**37** **Group:** `io.prometheus` **Name:** `prometheus-metrics-config` **Version:** `1.2.1`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**39** **Group:** `io.prometheus` **Name:** `prometheus-metrics-exporter-common` **Version:** `1.1.0`
+**38** **Group:** `io.prometheus` **Name:** `prometheus-metrics-exporter-common` **Version:** `1.2.1`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**40** **Group:** `io.prometheus` **Name:** `prometheus-metrics-exporter-httpserver` **Version:** `1.1.0`
+**39** **Group:** `io.prometheus` **Name:** `prometheus-metrics-exporter-httpserver` **Version:** `1.2.1`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**41** **Group:** `io.prometheus` **Name:** `prometheus-metrics-exposition-formats` **Version:** `1.1.0`
+**40** **Group:** `io.prometheus` **Name:** `prometheus-metrics-exposition-formats` **Version:** `1.2.1`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**42** **Group:** `io.prometheus` **Name:** `prometheus-metrics-model` **Version:** `1.1.0`
+**41** **Group:** `io.prometheus` **Name:** `prometheus-metrics-model` **Version:** `1.2.1`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**43** **Group:** `io.prometheus` **Name:** `prometheus-metrics-shaded-protobuf` **Version:** `1.1.0`
+**42** **Group:** `io.prometheus` **Name:** `prometheus-metrics-shaded-protobuf` **Version:** `1.2.1`
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**44** **Group:** `io.zipkin.reporter2` **Name:** `zipkin-reporter` **Version:** `3.3.0`
+**43** **Group:** `io.zipkin.reporter2` **Name:** `zipkin-reporter` **Version:** `3.3.0`
 > - **Manifest Project URL**: [https://zipkin.io/](https://zipkin.io/)
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **Embedded license files**: [zipkin-reporter-3.3.0.jar/META-INF/LICENSE](zipkin-reporter-3.3.0.jar/META-INF/LICENSE)
 
-**45** **Group:** `io.zipkin.reporter2` **Name:** `zipkin-sender-okhttp3` **Version:** `3.3.0`
+**44** **Group:** `io.zipkin.reporter2` **Name:** `zipkin-sender-okhttp3` **Version:** `3.3.0`
 > - **Manifest Project URL**: [https://zipkin.io/](https://zipkin.io/)
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **Embedded license files**: [zipkin-sender-okhttp3-3.3.0.jar/META-INF/LICENSE](zipkin-sender-okhttp3-3.3.0.jar/META-INF/LICENSE)
 
-**46** **Group:** `io.zipkin.zipkin2` **Name:** `zipkin` **Version:** `2.27.1`
+**45** **Group:** `io.zipkin.zipkin2` **Name:** `zipkin` **Version:** `2.27.1`
 > - **Manifest Project URL**: [http://zipkin.io/](http://zipkin.io/)
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **Embedded license files**: [zipkin-2.27.1.jar/META-INF/LICENSE](zipkin-2.27.1.jar/META-INF/LICENSE)
 
-**47** **Group:** `net.bytebuddy` **Name:** `byte-buddy-dep` **Version:** `1.14.13`
+**46** **Group:** `net.bytebuddy` **Name:** `byte-buddy-dep` **Version:** `1.14.13`
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **Embedded license files**: [byte-buddy-dep-1.14.13.jar/META-INF/LICENSE](byte-buddy-dep-1.14.13.jar/META-INF/LICENSE)
     - [byte-buddy-dep-1.14.13.jar/META-INF/NOTICE](byte-buddy-dep-1.14.13.jar/META-INF/NOTICE)
 
-**48** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0`
+**47** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0`
 > - **POM Project URL**: [http://www.jetbrains.org](http://www.jetbrains.org)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**49** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.23`
+**48** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.23`
 > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**50** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.23`
+**49** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.23`
 > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**51** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.23`
+**50** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.23`
 > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**52** **Group:** `org.ow2.asm` **Name:** `asm` **Version:** `9.7`
+**51** **Group:** `org.ow2.asm` **Name:** `asm` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**53** **Group:** `org.ow2.asm` **Name:** `asm-analysis` **Version:** `9.7`
+**52** **Group:** `org.ow2.asm` **Name:** `asm-analysis` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**54** **Group:** `org.ow2.asm` **Name:** `asm-commons` **Version:** `9.6`
+**53** **Group:** `org.ow2.asm` **Name:** `asm-commons` **Version:** `9.6`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**55** **Group:** `org.ow2.asm` **Name:** `asm-tree` **Version:** `9.7`
+**54** **Group:** `org.ow2.asm` **Name:** `asm-tree` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**56** **Group:** `org.ow2.asm` **Name:** `asm-util` **Version:** `9.7`
+**55** **Group:** `org.ow2.asm` **Name:** `asm-util` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**57** **Group:** `org.snakeyaml` **Name:** `snakeyaml-engine` **Version:** `2.7`
+**56** **Group:** `org.snakeyaml` **Name:** `snakeyaml-engine` **Version:** `2.7`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml-engine](https://bitbucket.org/snakeyaml/snakeyaml-engine)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
-**58** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `2.2`
+**57** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `2.2`
 > - **Manifest License**: Apache License, Version 2.0 (Not Packaged)
 > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 
 ## MIT License
 
-**59** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.12`
+**58** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.12`
 > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org)
 > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT)
 > - **Embedded license files**: [slf4j-api-2.0.12.jar/META-INF/LICENSE.txt](slf4j-api-2.0.12.jar/META-INF/LICENSE.txt)
 
-**60** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `2.0.12`
+**59** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `2.0.12`
 > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org)
 > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT)
 > - **Embedded license files**: [slf4j-simple-2.0.12.jar/META-INF/LICENSE.txt](slf4j-simple-2.0.12.jar/META-INF/LICENSE.txt)
 
 ## The 3-Clause BSD License
 
-**61** **Group:** `org.ow2.asm` **Name:** `asm` **Version:** `9.7`
+**60** **Group:** `org.ow2.asm` **Name:** `asm` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**62** **Group:** `org.ow2.asm` **Name:** `asm-analysis` **Version:** `9.7`
+**61** **Group:** `org.ow2.asm` **Name:** `asm-analysis` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**63** **Group:** `org.ow2.asm` **Name:** `asm-commons` **Version:** `9.6`
+**62** **Group:** `org.ow2.asm` **Name:** `asm-commons` **Version:** `9.6`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**64** **Group:** `org.ow2.asm` **Name:** `asm-tree` **Version:** `9.7`
+**63** **Group:** `org.ow2.asm` **Name:** `asm-tree` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
 > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
 > - **POM License**: The 3-Clause BSD License - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
 
-**65** **Group:** `org.ow2.asm` **Name:** `asm-util` **Version:** `9.7`
+**64** **Group:** `org.ow2.asm` **Name:** `asm-util` **Version:** `9.7`
 > - **Manifest Project URL**: [http://asm.ow2.org](http://asm.ow2.org)
 > - **Manifest License**: The 3-Clause BSD License (Not Packaged)
 > - **POM Project URL**: [http://asm.ow2.io/](http://asm.ow2.io/)
@@ -325,4 +321,4 @@ _2024-04-09 11:58:09 CEST_
 
 ## Unknown
 
-**66** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.9.0`
+**65** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.9.0`

+ 24 - 0
opentelemetry-api-shaded-for-instrumenting/build.gradle.kts

@@ -45,6 +45,13 @@ val v1_32Deps by configurations.creating {
   exclude("io.opentelemetry", "opentelemetry-bom")
   exclude("io.opentelemetry", "opentelemetry-bom-alpha")
 }
+val v1_37Deps by configurations.creating {
+  isCanBeResolved = true
+  isCanBeConsumed = false
+  // exclude the bom added by dependencyManagement
+  exclude("io.opentelemetry", "opentelemetry-bom")
+  exclude("io.opentelemetry", "opentelemetry-bom-alpha")
+}
 
 // configuration for publishing the shadowed artifact
 val v1_10 by configurations.creating {
@@ -67,6 +74,10 @@ val v1_32 by configurations.creating {
   isCanBeConsumed = true
   isCanBeResolved = false
 }
+val v1_37 by configurations.creating {
+  isCanBeConsumed = true
+  isCanBeResolved = false
+}
 
 dependencies {
   latestDeps("io.opentelemetry:opentelemetry-api")
@@ -111,6 +122,14 @@ dependencies {
       }
     }
   }
+
+  listOf("opentelemetry-api-incubator").forEach {
+    v1_37Deps("io.opentelemetry:$it") {
+      version {
+        strictly("1.37.0-alpha")
+      }
+    }
+  }
 }
 
 // OpenTelemetry API shaded so that it can be used in instrumentation of OpenTelemetry API itself,
@@ -145,6 +164,10 @@ tasks {
     configurations = listOf(v1_32Deps)
     archiveClassifier.set("v1_32")
   }
+  val v1_37Shadow by registering(ShadowJar::class) {
+    configurations = listOf(v1_37Deps)
+    archiveClassifier.set("v1_37")
+  }
 
   artifacts {
     add(v1_10.name, v1_10Shadow)
@@ -152,5 +175,6 @@ tasks {
     add(v1_27.name, v1_27Shadow)
     add(v1_31.name, v1_31Shadow)
     add(v1_32.name, v1_32Shadow)
+    add(v1_37.name, v1_37Shadow)
   }
 }

+ 1 - 0
settings.gradle.kts

@@ -404,6 +404,7 @@ include(":instrumentation:opentelemetry-api:opentelemetry-api-1.15:javaagent")
 include(":instrumentation:opentelemetry-api:opentelemetry-api-1.27:javaagent")
 include(":instrumentation:opentelemetry-api:opentelemetry-api-1.31:javaagent")
 include(":instrumentation:opentelemetry-api:opentelemetry-api-1.32:javaagent")
+include(":instrumentation:opentelemetry-api:opentelemetry-api-1.37:javaagent")
 include(":instrumentation:opentelemetry-extension-annotations-1.0:javaagent")
 include(":instrumentation:opentelemetry-extension-kotlin-1.0:javaagent")
 include(":instrumentation:opentelemetry-instrumentation-annotations-1.16:javaagent")