From 352c7f040413bc96129847d52eb3cebf71a07429 Mon Sep 17 00:00:00 2001 From: aviralgarg05 Date: Mon, 12 Jan 2026 02:02:59 +0530 Subject: [PATCH 1/5] feat: Replace DeclarativeConfigPropertiesBridge with ConfigPropertiesBackedConfigProvider options - Enhance ConfigPropertiesBackedConfigProvider with Builder for custom mappings - Refactor ConfigPropertiesBackedDeclarativeConfigProperties to support mappings - Deprecate DeclarativeConfigPropertiesBridge - Addresses issue #15811 --- .../ConfigPropertiesBackedConfigProvider.java | 35 ++++++++-- ...tiesBackedDeclarativeConfigProperties.java | 37 +++++++---- .../DeclarativeConfigPropertiesBridge.java | 49 ++++++++------ ...larativeConfigPropertiesBridgeBuilder.java | 41 ++++++++---- ...figPropertiesBackedConfigProviderTest.java | 66 +++++++++++++++++++ 5 files changed, 175 insertions(+), 53 deletions(-) create mode 100644 declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java index b35136987745..7a57853d2806 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java @@ -8,12 +8,16 @@ import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import java.util.HashMap; +import java.util.Map; import javax.annotation.Nullable; /** * A {@link ConfigProvider} implementation backed by {@link ConfigProperties}. * - *

This allows instrumentations to always use {@code ExtendedOpenTelemetry.getConfigProvider()} + *

+ * This allows instrumentations to always use + * {@code ExtendedOpenTelemetry.getConfigProvider()} * regardless of whether the user started with system properties or YAML. */ public final class ConfigPropertiesBackedConfigProvider implements ConfigProvider { @@ -21,13 +25,32 @@ public final class ConfigPropertiesBackedConfigProvider implements ConfigProvide private final DeclarativeConfigProperties instrumentationConfig; public static ConfigProvider create(ConfigProperties configProperties) { - return new ConfigPropertiesBackedConfigProvider(configProperties); + return new ConfigPropertiesBackedConfigProvider( + ConfigPropertiesBackedDeclarativeConfigProperties.createInstrumentationConfig( + configProperties)); } - private ConfigPropertiesBackedConfigProvider(ConfigProperties configProperties) { - this.instrumentationConfig = - ConfigPropertiesBackedDeclarativeConfigProperties.createInstrumentationConfig( - configProperties); + public static Builder builder() { + return new Builder(); + } + + private ConfigPropertiesBackedConfigProvider(DeclarativeConfigProperties instrumentationConfig) { + this.instrumentationConfig = instrumentationConfig; + } + + public static final class Builder { + private final Map mappings = new HashMap<>(); + + public Builder addMapping(String declarativeProperty, String configProperty) { + mappings.put(declarativeProperty, configProperty); + return this; + } + + public ConfigProvider build(ConfigProperties configProperties) { + return new ConfigPropertiesBackedConfigProvider( + ConfigPropertiesBackedDeclarativeConfigProperties.createInstrumentationConfig( + configProperties, mappings)); + } } @Nullable diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 778704a02f03..294207fb62f9 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -20,9 +20,12 @@ import javax.annotation.Nullable; /** - * Implementation of {@link DeclarativeConfigProperties} backed by {@link ConfigProperties}. + * Implementation of {@link DeclarativeConfigProperties} backed by + * {@link ConfigProperties}. * - *

It tracks the navigation path and only resolves to system properties at the leaf node when a + *

+ * It tracks the navigation path and only resolves to system properties at the + * leaf node when a * value is actually requested. */ public final class ConfigPropertiesBackedDeclarativeConfigProperties @@ -31,10 +34,8 @@ public final class ConfigPropertiesBackedDeclarativeConfigProperties private static final String GENERAL_PEER_SERVICE_MAPPING = "general.peer.service_mapping"; private static final String AGENT_INSTRUMENTATION_MODE = "java.agent.instrumentation_mode"; - private static final String SPRING_STARTER_INSTRUMENTATION_MODE = - "java.spring_starter.instrumentation_mode"; - private static final String COMMON_DEFAULT_ENABLED = - "otel.instrumentation.common.default-enabled"; + private static final String SPRING_STARTER_INSTRUMENTATION_MODE = "java.spring_starter.instrumentation_mode"; + private static final String COMMON_DEFAULT_ENABLED = "otel.instrumentation.common.default-enabled"; private static final Map SPECIAL_MAPPINGS; @@ -99,17 +100,24 @@ public final class ConfigPropertiesBackedDeclarativeConfigProperties private final ConfigProperties configProperties; private final List path; + private final Map mappings; public static DeclarativeConfigProperties createInstrumentationConfig( ConfigProperties configProperties) { + return createInstrumentationConfig(configProperties, SPECIAL_MAPPINGS); + } + + public static DeclarativeConfigProperties createInstrumentationConfig( + ConfigProperties configProperties, Map mappings) { return new ConfigPropertiesBackedDeclarativeConfigProperties( - configProperties, Collections.emptyList()); + configProperties, Collections.emptyList(), mappings); } private ConfigPropertiesBackedDeclarativeConfigProperties( - ConfigProperties configProperties, List path) { + ConfigProperties configProperties, List path, Map mappings) { this.configProperties = configProperties; this.path = path; + this.mappings = mappings; } @Nullable @@ -151,7 +159,8 @@ public Long getLong(String name) { if (duration != null) { return duration.toMillis(); } - // If discovery delay has not been configured, have a peek at the metric export interval. + // If discovery delay has not been configured, have a peek at the metric export + // interval. // It makes sense for both of these values to be similar. Duration fallback = configProperties.getDuration("otel.metric.export.interval"); if (fallback != null) { @@ -170,16 +179,18 @@ public Double getDouble(String name) { } /** - * Important: this method should return null if there is no structured child with the given name, + * Important: this method should return null if there is no structured child + * with the given name, * but unfortunately that is not implementable on top of ConfigProperties. * - *

This will be misleading if anyone is comparing the return value to null. + *

+ * This will be misleading if anyone is comparing the return value to null. */ @Override public DeclarativeConfigProperties getStructured(String name) { List newPath = new ArrayList<>(path); newPath.add(name); - return new ConfigPropertiesBackedDeclarativeConfigProperties(configProperties, newPath); + return new ConfigPropertiesBackedDeclarativeConfigProperties(configProperties, newPath, mappings); } @Nullable @@ -221,7 +232,7 @@ private String resolvePropertyKey(String name) { String fullPath = pathWithName(name); // Check explicit property mappings first - String mappedKey = SPECIAL_MAPPINGS.get(fullPath); + String mappedKey = mappings.get(fullPath); if (mappedKey != null) { return mappedKey; } diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java index 0421148323e6..839ce7db1775 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java @@ -23,23 +23,31 @@ * A {@link ConfigProperties} which resolves properties based on {@link * DeclarativeConfigProperties}. * - *

Only properties starting with "otel.instrumentation." are resolved. Others return null (or + *

+ * Only properties starting with "otel.instrumentation." are resolved. Others + * return null (or * default value if provided). * - *

To resolve: + *

+ * To resolve: * *

* - *

For example, given the following YAML, asking for {@code - * ConfigProperties#getString("otel.instrumentation.common.string_key")} yields "value": + *

+ * For example, given the following YAML, asking for {@code + * ConfigProperties#getString("otel.instrumentation.common.string_key")} yields + * "value": * *

  *   instrumentation:
@@ -48,6 +56,7 @@
  *         string_key: value
  * 
*/ +@Deprecated final class DeclarativeConfigPropertiesBridge implements ConfigProperties { private static final String OTEL_INSTRUMENTATION_PREFIX = "otel.instrumentation."; @@ -110,21 +119,19 @@ public Duration getDuration(String propertyName) { @SuppressWarnings("unchecked") // we expect to have only lists of strings in override values @Override public List getList(String propertyName) { - List propertyValue = - getPropertyValue( - propertyName, - o -> (List) o, - (properties, lastPart) -> properties.getScalarList(lastPart, String.class)); + List propertyValue = getPropertyValue( + propertyName, + o -> (List) o, + (properties, lastPart) -> properties.getScalarList(lastPart, String.class)); return propertyValue == null ? Collections.emptyList() : propertyValue; } @Override public Map getMap(String propertyName) { - DeclarativeConfigProperties propertyValue = - getPropertyValue( - propertyName, - DeclarativeConfigProperties.class, - DeclarativeConfigProperties::getStructured); + DeclarativeConfigProperties propertyValue = getPropertyValue( + propertyName, + DeclarativeConfigProperties.class, + DeclarativeConfigProperties::getStructured); if (propertyValue == null) { return Collections.emptyMap(); } diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java index 0841b2690f5e..b2d9ff56a2d6 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java @@ -20,29 +20,39 @@ import javax.annotation.Nullable; /** - * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding translations and fixed + * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding + * translations and fixed * values for properties. + * + * @deprecated Use {@link ConfigPropertiesBackedConfigProvider#builder()} + * instead. */ +@Deprecated public class DeclarativeConfigPropertiesBridgeBuilder { /** - * order is important here, so we use LinkedHashMap - see {@link #addMapping(String, String)} for + * order is important here, so we use LinkedHashMap - see + * {@link #addMapping(String, String)} for * more details */ private final Map mappings = new LinkedHashMap<>(); private final Map overrideValues = new HashMap<>(); - public DeclarativeConfigPropertiesBridgeBuilder() {} + public DeclarativeConfigPropertiesBridgeBuilder() { + } /** * Adds a mapping from a property prefix to a YAML path. * - *

For example, if the property prefix is "otel.javaagent" and the YAML path is "agent", then - * any property starting with "otel.javaagent." will be resolved against the "agent" node in the + *

+ * For example, if the property prefix is "otel.javaagent" and the YAML path is + * "agent", then + * any property starting with "otel.javaagent." will be resolved against the + * "agent" node in the * instrumentation/java section of the YAML configuration. * * @param propertyPrefix the prefix of the property to translate - * @param yamlPath the YAML path to resolve the property against + * @param yamlPath the YAML path to resolve the property against */ @CanIgnoreReturnValue public DeclarativeConfigPropertiesBridgeBuilder addMapping( @@ -55,7 +65,7 @@ public DeclarativeConfigPropertiesBridgeBuilder addMapping( * Adds a fixed override value for a property. * * @param propertyName the name of the property to override - * @param value the value to return when the property is requested + * @param value the value to return when the property is requested */ @CanIgnoreReturnValue public DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, Object value) { @@ -63,7 +73,10 @@ public DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, return this; } - /** Build {@link ConfigProperties} from the {@code autoConfiguredOpenTelemetrySdk}. */ + /** + * Build {@link ConfigProperties} from the + * {@code autoConfiguredOpenTelemetrySdk}. + */ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { OpenTelemetry openTelemetry = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); if (openTelemetry instanceof ExtendedOpenTelemetry) { @@ -71,8 +84,7 @@ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenT ((ExtendedOpenTelemetry) openTelemetry).getConfigProvider().getInstrumentationConfig()); } - ConfigProperties sdkConfigProperties = - AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); + ConfigProperties sdkConfigProperties = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); if (sdkConfigProperties != null) { return sdkConfigProperties; } @@ -83,7 +95,8 @@ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenT } /** - * Build {@link ConfigProperties} from the provided {@link DeclarativeConfigProperties} node. + * Build {@link ConfigProperties} from the provided + * {@link DeclarativeConfigProperties} node. * * @param node the declarative config properties to build from * @return a new instance of {@link ConfigProperties} @@ -94,10 +107,12 @@ public ConfigProperties build(@Nullable DeclarativeConfigProperties node) { } /** - * Build {@link ConfigProperties} from the {@link DeclarativeConfigProperties} provided by the + * Build {@link ConfigProperties} from the {@link DeclarativeConfigProperties} + * provided by the * instrumentation configuration. * - *

If the provided {@code instrumentationConfig} is null, an empty {@link + *

+ * If the provided {@code instrumentationConfig} is null, an empty {@link * DeclarativeConfigProperties} will be used. * * @param instrumentationConfig the instrumentation configuration to build from diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java new file mode 100644 index 000000000000..dba4084b629f --- /dev/null +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java @@ -0,0 +1,66 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.config.bridge; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ConfigPropertiesBackedConfigProviderTest { + + @Test + void testBuilderWithMappings() { + Map properties = new HashMap<>(); + properties.put("my.custom.property", "custom-value"); + + // ConfigProperties has "my.custom.property" + // We want to map declarative "my.declarative.prop" to "my.custom.property" + + ConfigProvider provider = ConfigPropertiesBackedConfigProvider.builder() + .addMapping("my.declarative.prop", "my.custom.property") + .build(DefaultConfigProperties.createFromMap(properties)); + + DeclarativeConfigProperties config = provider.getInstrumentationConfig(); + + // DeclarativeConfigProperties structure lookup + // pathWithName("my.declarative.prop") should map to "my.custom.property" + // However, structure is hierarchical. + // getStructured("my").getStructured("declarative").getString("prop") -> + // "my.declarative.prop" + + assertThat(config.getStructured("my").getStructured("declarative").getString("prop")) + .isEqualTo("custom-value"); + } + + @Test + void testCreateUsesDefaults() { + // Verify that create() still supports the default mappings (e.g. + // otel.instrumentation...) + // e.g. "java.common.http.known_methods" -> + // "otel.instrumentation.http.known-methods" + + Map properties = new HashMap<>(); + properties.put("otel.instrumentation.http.known-methods", "GET,POST"); + + ConfigProvider provider = ConfigPropertiesBackedConfigProvider.create( + DefaultConfigProperties.createFromMap(properties)); + + DeclarativeConfigProperties config = provider.getInstrumentationConfig(); + + assertThat( + config + .getStructured("java") + .getStructured("common") + .getStructured("http") + .getString("known_methods")) + .isEqualTo("GET,POST"); + } +} From 44553758278f6a4879e02c4238a0b80ebcc2bc22 Mon Sep 17 00:00:00 2001 From: aviralgarg05 Date: Mon, 12 Jan 2026 02:41:50 +0530 Subject: [PATCH 2/5] fix: Resolve build and formatting issues - Fix ConfigPropertiesBackedConfigProvider compilation warnings - Fix Spotless formatting violations in all bridge files - Suppress deprecation warnings in backward compatibility tests --- .../ConfigPropertiesBackedConfigProvider.java | 5 +- ...tiesBackedDeclarativeConfigProperties.java | 22 +++--- .../DeclarativeConfigPropertiesBridge.java | 48 +++++------- ...larativeConfigPropertiesBridgeBuilder.java | 40 ++++------ ...figPropertiesBackedConfigProviderTest.java | 77 ++++++++++--------- ...tiveConfigPropertiesBridgeBuilderTest.java | 2 +- ...DeclarativeConfigPropertiesBridgeTest.java | 1 + 7 files changed, 88 insertions(+), 107 deletions(-) diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java index 7a57853d2806..5f88dedadf9d 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java @@ -15,9 +15,7 @@ /** * A {@link ConfigProvider} implementation backed by {@link ConfigProperties}. * - *

- * This allows instrumentations to always use - * {@code ExtendedOpenTelemetry.getConfigProvider()} + *

This allows instrumentations to always use {@code ExtendedOpenTelemetry.getConfigProvider()} * regardless of whether the user started with system properties or YAML. */ public final class ConfigPropertiesBackedConfigProvider implements ConfigProvider { @@ -41,6 +39,7 @@ private ConfigPropertiesBackedConfigProvider(DeclarativeConfigProperties instrum public static final class Builder { private final Map mappings = new HashMap<>(); + @com.google.errorprone.annotations.CanIgnoreReturnValue public Builder addMapping(String declarativeProperty, String configProperty) { mappings.put(declarativeProperty, configProperty); return this; diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 294207fb62f9..3510fc83c758 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -20,12 +20,9 @@ import javax.annotation.Nullable; /** - * Implementation of {@link DeclarativeConfigProperties} backed by - * {@link ConfigProperties}. + * Implementation of {@link DeclarativeConfigProperties} backed by {@link ConfigProperties}. * - *

- * It tracks the navigation path and only resolves to system properties at the - * leaf node when a + *

It tracks the navigation path and only resolves to system properties at the leaf node when a * value is actually requested. */ public final class ConfigPropertiesBackedDeclarativeConfigProperties @@ -34,8 +31,10 @@ public final class ConfigPropertiesBackedDeclarativeConfigProperties private static final String GENERAL_PEER_SERVICE_MAPPING = "general.peer.service_mapping"; private static final String AGENT_INSTRUMENTATION_MODE = "java.agent.instrumentation_mode"; - private static final String SPRING_STARTER_INSTRUMENTATION_MODE = "java.spring_starter.instrumentation_mode"; - private static final String COMMON_DEFAULT_ENABLED = "otel.instrumentation.common.default-enabled"; + private static final String SPRING_STARTER_INSTRUMENTATION_MODE = + "java.spring_starter.instrumentation_mode"; + private static final String COMMON_DEFAULT_ENABLED = + "otel.instrumentation.common.default-enabled"; private static final Map SPECIAL_MAPPINGS; @@ -179,18 +178,17 @@ public Double getDouble(String name) { } /** - * Important: this method should return null if there is no structured child - * with the given name, + * Important: this method should return null if there is no structured child with the given name, * but unfortunately that is not implementable on top of ConfigProperties. * - *

- * This will be misleading if anyone is comparing the return value to null. + *

This will be misleading if anyone is comparing the return value to null. */ @Override public DeclarativeConfigProperties getStructured(String name) { List newPath = new ArrayList<>(path); newPath.add(name); - return new ConfigPropertiesBackedDeclarativeConfigProperties(configProperties, newPath, mappings); + return new ConfigPropertiesBackedDeclarativeConfigProperties( + configProperties, newPath, mappings); } @Nullable diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java index 839ce7db1775..17f88831ec3d 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java @@ -23,31 +23,23 @@ * A {@link ConfigProperties} which resolves properties based on {@link * DeclarativeConfigProperties}. * - *

- * Only properties starting with "otel.instrumentation." are resolved. Others - * return null (or + *

Only properties starting with "otel.instrumentation." are resolved. Others return null (or * default value if provided). * - *

- * To resolve: + *

To resolve: * *

    - *
  • "otel.instrumentation" refers to the ".instrumentation.java" node - *
  • The portion of the property after "otel.instrumentation." is split into - * segments based on - * ".". - *
  • For each N-1 segment, we walk down the tree to find the relevant leaf - * {@link - * DeclarativeConfigProperties}. - *
  • We extract the property from the resolved - * {@link DeclarativeConfigProperties} using the - * last segment as the property key. + *
  • "otel.instrumentation" refers to the ".instrumentation.java" node + *
  • The portion of the property after "otel.instrumentation." is split into segments based on + * ".". + *
  • For each N-1 segment, we walk down the tree to find the relevant leaf {@link + * DeclarativeConfigProperties}. + *
  • We extract the property from the resolved {@link DeclarativeConfigProperties} using the + * last segment as the property key. *
* - *

- * For example, given the following YAML, asking for {@code - * ConfigProperties#getString("otel.instrumentation.common.string_key")} yields - * "value": + *

For example, given the following YAML, asking for {@code + * ConfigProperties#getString("otel.instrumentation.common.string_key")} yields "value": * *

  *   instrumentation:
@@ -119,19 +111,21 @@ public Duration getDuration(String propertyName) {
   @SuppressWarnings("unchecked") // we expect to have only lists of strings in override values
   @Override
   public List getList(String propertyName) {
-    List propertyValue = getPropertyValue(
-        propertyName,
-        o -> (List) o,
-        (properties, lastPart) -> properties.getScalarList(lastPart, String.class));
+    List propertyValue =
+        getPropertyValue(
+            propertyName,
+            o -> (List) o,
+            (properties, lastPart) -> properties.getScalarList(lastPart, String.class));
     return propertyValue == null ? Collections.emptyList() : propertyValue;
   }
 
   @Override
   public Map getMap(String propertyName) {
-    DeclarativeConfigProperties propertyValue = getPropertyValue(
-        propertyName,
-        DeclarativeConfigProperties.class,
-        DeclarativeConfigProperties::getStructured);
+    DeclarativeConfigProperties propertyValue =
+        getPropertyValue(
+            propertyName,
+            DeclarativeConfigProperties.class,
+            DeclarativeConfigProperties::getStructured);
     if (propertyValue == null) {
       return Collections.emptyMap();
     }
diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java
index b2d9ff56a2d6..0302a4b75c7d 100644
--- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java
+++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java
@@ -20,39 +20,32 @@
 import javax.annotation.Nullable;
 
 /**
- * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding
- * translations and fixed
+ * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding translations and fixed
  * values for properties.
  *
- * @deprecated Use {@link ConfigPropertiesBackedConfigProvider#builder()}
- *             instead.
+ * @deprecated Use {@link ConfigPropertiesBackedConfigProvider#builder()} instead.
  */
 @Deprecated
 public class DeclarativeConfigPropertiesBridgeBuilder {
   /**
-   * order is important here, so we use LinkedHashMap - see
-   * {@link #addMapping(String, String)} for
+   * order is important here, so we use LinkedHashMap - see {@link #addMapping(String, String)} for
    * more details
    */
   private final Map mappings = new LinkedHashMap<>();
 
   private final Map overrideValues = new HashMap<>();
 
-  public DeclarativeConfigPropertiesBridgeBuilder() {
-  }
+  public DeclarativeConfigPropertiesBridgeBuilder() {}
 
   /**
    * Adds a mapping from a property prefix to a YAML path.
    *
-   * 

- * For example, if the property prefix is "otel.javaagent" and the YAML path is - * "agent", then - * any property starting with "otel.javaagent." will be resolved against the - * "agent" node in the + *

For example, if the property prefix is "otel.javaagent" and the YAML path is "agent", then + * any property starting with "otel.javaagent." will be resolved against the "agent" node in the * instrumentation/java section of the YAML configuration. * * @param propertyPrefix the prefix of the property to translate - * @param yamlPath the YAML path to resolve the property against + * @param yamlPath the YAML path to resolve the property against */ @CanIgnoreReturnValue public DeclarativeConfigPropertiesBridgeBuilder addMapping( @@ -65,7 +58,7 @@ public DeclarativeConfigPropertiesBridgeBuilder addMapping( * Adds a fixed override value for a property. * * @param propertyName the name of the property to override - * @param value the value to return when the property is requested + * @param value the value to return when the property is requested */ @CanIgnoreReturnValue public DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, Object value) { @@ -73,10 +66,7 @@ public DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, return this; } - /** - * Build {@link ConfigProperties} from the - * {@code autoConfiguredOpenTelemetrySdk}. - */ + /** Build {@link ConfigProperties} from the {@code autoConfiguredOpenTelemetrySdk}. */ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { OpenTelemetry openTelemetry = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); if (openTelemetry instanceof ExtendedOpenTelemetry) { @@ -84,7 +74,8 @@ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenT ((ExtendedOpenTelemetry) openTelemetry).getConfigProvider().getInstrumentationConfig()); } - ConfigProperties sdkConfigProperties = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); + ConfigProperties sdkConfigProperties = + AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); if (sdkConfigProperties != null) { return sdkConfigProperties; } @@ -95,8 +86,7 @@ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenT } /** - * Build {@link ConfigProperties} from the provided - * {@link DeclarativeConfigProperties} node. + * Build {@link ConfigProperties} from the provided {@link DeclarativeConfigProperties} node. * * @param node the declarative config properties to build from * @return a new instance of {@link ConfigProperties} @@ -107,12 +97,10 @@ public ConfigProperties build(@Nullable DeclarativeConfigProperties node) { } /** - * Build {@link ConfigProperties} from the {@link DeclarativeConfigProperties} - * provided by the + * Build {@link ConfigProperties} from the {@link DeclarativeConfigProperties} provided by the * instrumentation configuration. * - *

- * If the provided {@code instrumentationConfig} is null, an empty {@link + *

If the provided {@code instrumentationConfig} is null, an empty {@link * DeclarativeConfigProperties} will be used. * * @param instrumentationConfig the instrumentation configuration to build from diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java index dba4084b629f..4e3c37a14109 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProviderTest.java @@ -15,52 +15,53 @@ import org.junit.jupiter.api.Test; class ConfigPropertiesBackedConfigProviderTest { + @Test + void testBuilderWithMappings() { + Map properties = new HashMap<>(); + properties.put("my.custom.property", "custom-value"); - @Test - void testBuilderWithMappings() { - Map properties = new HashMap<>(); - properties.put("my.custom.property", "custom-value"); + // ConfigProperties has "my.custom.property" + // We want to map declarative "my.declarative.prop" to "my.custom.property" - // ConfigProperties has "my.custom.property" - // We want to map declarative "my.declarative.prop" to "my.custom.property" + ConfigProvider provider = + ConfigPropertiesBackedConfigProvider.builder() + .addMapping("my.declarative.prop", "my.custom.property") + .build(DefaultConfigProperties.createFromMap(properties)); - ConfigProvider provider = ConfigPropertiesBackedConfigProvider.builder() - .addMapping("my.declarative.prop", "my.custom.property") - .build(DefaultConfigProperties.createFromMap(properties)); + DeclarativeConfigProperties config = provider.getInstrumentationConfig(); - DeclarativeConfigProperties config = provider.getInstrumentationConfig(); + // DeclarativeConfigProperties structure lookup + // pathWithName("my.declarative.prop") should map to "my.custom.property" + // However, structure is hierarchical. + // getStructured("my").getStructured("declarative").getString("prop") -> + // "my.declarative.prop" - // DeclarativeConfigProperties structure lookup - // pathWithName("my.declarative.prop") should map to "my.custom.property" - // However, structure is hierarchical. - // getStructured("my").getStructured("declarative").getString("prop") -> - // "my.declarative.prop" + assertThat(config.getStructured("my").getStructured("declarative").getString("prop")) + .isEqualTo("custom-value"); + } - assertThat(config.getStructured("my").getStructured("declarative").getString("prop")) - .isEqualTo("custom-value"); - } + @Test + void testCreateUsesDefaults() { + // Verify that create() still supports the default mappings (e.g. + // otel.instrumentation...) + // e.g. "java.common.http.known_methods" -> + // "otel.instrumentation.http.known-methods" - @Test - void testCreateUsesDefaults() { - // Verify that create() still supports the default mappings (e.g. - // otel.instrumentation...) - // e.g. "java.common.http.known_methods" -> - // "otel.instrumentation.http.known-methods" + Map properties = new HashMap<>(); + properties.put("otel.instrumentation.http.known-methods", "GET,POST"); - Map properties = new HashMap<>(); - properties.put("otel.instrumentation.http.known-methods", "GET,POST"); + ConfigProvider provider = + ConfigPropertiesBackedConfigProvider.create( + DefaultConfigProperties.createFromMap(properties)); - ConfigProvider provider = ConfigPropertiesBackedConfigProvider.create( - DefaultConfigProperties.createFromMap(properties)); + DeclarativeConfigProperties config = provider.getInstrumentationConfig(); - DeclarativeConfigProperties config = provider.getInstrumentationConfig(); - - assertThat( - config - .getStructured("java") - .getStructured("common") - .getStructured("http") - .getString("known_methods")) - .isEqualTo("GET,POST"); - } + assertThat( + config + .getStructured("java") + .getStructured("common") + .getStructured("http") + .getString("known_methods")) + .isEqualTo("GET,POST"); + } } diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java index 47ae2783f302..7dcc4e6a88c8 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java @@ -20,7 +20,7 @@ import org.mockito.MockedStatic; import org.mockito.Mockito; -@SuppressWarnings("DoNotMockAutoValue") +@SuppressWarnings({"DoNotMockAutoValue", "deprecation"}) class DeclarativeConfigPropertiesBridgeBuilderTest { @Test void shouldUseConfigPropertiesForAutoConfiguration() { diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java index 29f9d424cd9d..8def2e31d6f0 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +@SuppressWarnings("deprecation") class DeclarativeConfigPropertiesBridgeTest { private ConfigProperties bridge; From ceefeb571eb0cfd82e9d2fc935b7efb6250dc75f Mon Sep 17 00:00:00 2001 From: aviralgarg05 Date: Mon, 12 Jan 2026 13:21:51 +0530 Subject: [PATCH 3/5] Suppress deprecation warnings for backward compatibility The spring-boot-autoconfigure and javaagent-tooling modules need to continue using the deprecated DeclarativeConfigPropertiesBridge API to maintain backward compatibility during the transition period. This commit adds @SuppressWarnings annotations with explanatory comments and compiler flags to suppress deprecation warnings. --- .gitignore | 4 ++++ .../spring/spring-boot-autoconfigure/build.gradle.kts | 6 ++++++ .../autoconfigure/OpenTelemetryAutoConfiguration.java | 3 +++ javaagent-tooling/build.gradle.kts | 6 ++++++ .../javaagent/tooling/OpenTelemetryInstaller.java | 3 +++ 5 files changed, 22 insertions(+) diff --git a/.gitignore b/.gitignore index 964fa2c0bd2c..7b5dd92ac398 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,7 @@ replay_pid* .lycheecache build-scan.txt + + +#Ignore vscode AI rules +.github/instructions/codacy.instructions.md diff --git a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts index f4dbe222bfe2..fb87ed10b58b 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts +++ b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts @@ -6,6 +6,12 @@ plugins { base.archivesName.set("opentelemetry-spring-boot-autoconfigure") group = "io.opentelemetry.instrumentation" +tasks.withType().configureEach { + // Suppress deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage + // This is intentional as we still support the deprecated API for backward compatibility + options.compilerArgs.add("-Xlint:-deprecation") +} + val springBootVersion = "2.7.18" // AutoConfiguration is added in 2.7.0, but can be used with older versions diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index 72466b46d03e..40a0ce27e1fc 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -66,6 +66,9 @@ * *

Updates the sampler probability for the configured {@link TracerProvider}. */ +// Suppressing deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage. +// This is safe because we're maintaining backward compatibility while transitioning to the new API. +@SuppressWarnings("deprecation") @Configuration public class OpenTelemetryAutoConfiguration { private static final Logger logger = diff --git a/javaagent-tooling/build.gradle.kts b/javaagent-tooling/build.gradle.kts index 5434028a60a0..47e7f247da1d 100644 --- a/javaagent-tooling/build.gradle.kts +++ b/javaagent-tooling/build.gradle.kts @@ -8,6 +8,12 @@ plugins { group = "io.opentelemetry.javaagent" +tasks.withType().configureEach { + // Suppress deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage + // This is intentional as we still support the deprecated API for backward compatibility + options.compilerArgs.add("-Xlint:-deprecation") +} + dependencies { implementation(project(":javaagent-bootstrap")) implementation(project(":javaagent-extension-api")) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 83554f955d54..e984f47b84b5 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -24,6 +24,9 @@ import io.opentelemetry.sdk.common.CompletableResultCode; import java.util.Arrays; +// Suppressing deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage. +// This is safe because we're maintaining backward compatibility while transitioning to the new API. +@SuppressWarnings("deprecation") public final class OpenTelemetryInstaller { /** From fa9133d8c0341998cc89243bac6cd0abff9f772b Mon Sep 17 00:00:00 2001 From: aviralgarg05 Date: Fri, 20 Feb 2026 01:49:51 +0530 Subject: [PATCH 4/5] Address PR feedback: preserve special mappings and track 3.0 removal --- ...tiesBackedDeclarativeConfigProperties.java | 6 +++-- .../DeclarativeConfigPropertiesBridge.java | 3 +++ ...larativeConfigPropertiesBridgeBuilder.java | 3 ++- ...BackedDeclarativeConfigPropertiesTest.java | 22 +++++++++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 293fa3e13129..e467b818c1d1 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -103,13 +103,15 @@ public final class ConfigPropertiesBackedDeclarativeConfigProperties public static DeclarativeConfigProperties createInstrumentationConfig( ConfigProperties configProperties) { - return createInstrumentationConfig(configProperties, SPECIAL_MAPPINGS); + return createInstrumentationConfig(configProperties, Collections.emptyMap()); } public static DeclarativeConfigProperties createInstrumentationConfig( ConfigProperties configProperties, Map mappings) { + Map mergedMappings = new HashMap<>(SPECIAL_MAPPINGS); + mergedMappings.putAll(mappings); return new ConfigPropertiesBackedDeclarativeConfigProperties( - configProperties, Collections.emptyList(), mappings); + configProperties, Collections.emptyList(), mergedMappings); } private ConfigPropertiesBackedDeclarativeConfigProperties( diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java index 17f88831ec3d..b8d388566d34 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java @@ -47,6 +47,9 @@ * common: * string_key: value *

+ * + * @deprecated Use {@link ConfigPropertiesBackedConfigProvider} instead. Scheduled for removal in + * 3.0.0, tracked in issue #16238. */ @Deprecated final class DeclarativeConfigPropertiesBridge implements ConfigProperties { diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java index 0302a4b75c7d..7970500bfcc3 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java @@ -23,7 +23,8 @@ * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding translations and fixed * values for properties. * - * @deprecated Use {@link ConfigPropertiesBackedConfigProvider#builder()} instead. + * @deprecated Use {@link ConfigPropertiesBackedConfigProvider#builder()} instead. Scheduled for + * removal in 3.0.0, tracked in issue #16238. */ @Deprecated public class DeclarativeConfigPropertiesBridgeBuilder { diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java index 7d43c8be39f0..b481b6534f1e 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigPropertiesTest.java @@ -108,6 +108,28 @@ void testGeneralHttpListMapping() { .containsExactly("header1", "header2"); } + @Test + void testCustomMappingsIncludeSpecialMappings() { + Map properties = new HashMap<>(); + properties.put("otel.custom.enabled", "true"); + properties.put("otel.instrumentation.http.client.capture-request-headers", "header1,header2"); + Map customMappings = new HashMap<>(); + customMappings.put("java.custom.enabled", "otel.custom.enabled"); + + DeclarativeConfigProperties config = + ConfigPropertiesBackedDeclarativeConfigProperties.createInstrumentationConfig( + DefaultConfigProperties.createFromMap(properties), customMappings); + + assertThat(config.getStructured("java").getStructured("custom").getBoolean("enabled")).isTrue(); + assertThat( + config + .getStructured("general") + .getStructured("http") + .getStructured("client") + .getScalarList("request_captured_headers", String.class)) + .containsExactly("header1", "header2"); + } + @Test void testJavaCommonServicePeerMapping() { DeclarativeConfigProperties config = From 8213aedcf28d825d21653124ce497f678947862a Mon Sep 17 00:00:00 2001 From: aviralgarg05 Date: Tue, 31 Mar 2026 00:14:30 +0530 Subject: [PATCH 5/5] Address remaining PR review feedback --- .gitignore | 4 ---- .../config/bridge/ConfigPropertiesBackedConfigProvider.java | 3 ++- .../ConfigPropertiesBackedDeclarativeConfigProperties.java | 3 +-- .../config/bridge/DeclarativeConfigPropertiesBridge.java | 4 ---- .../bridge/DeclarativeConfigPropertiesBridgeBuilder.java | 4 ---- .../DeclarativeConfigPropertiesBridgeBuilderTest.java | 2 +- .../bridge/DeclarativeConfigPropertiesBridgeTest.java | 1 - .../spring/spring-boot-autoconfigure/build.gradle.kts | 6 ------ .../autoconfigure/OpenTelemetryAutoConfiguration.java | 3 --- javaagent-tooling/build.gradle.kts | 6 ------ .../javaagent/tooling/OpenTelemetryInstaller.java | 3 --- 11 files changed, 4 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 7b5dd92ac398..964fa2c0bd2c 100644 --- a/.gitignore +++ b/.gitignore @@ -62,7 +62,3 @@ replay_pid* .lycheecache build-scan.txt - - -#Ignore vscode AI rules -.github/instructions/codacy.instructions.md diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java index a9527bcc948f..9497f8875077 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.config.bridge; +import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -38,7 +39,7 @@ private ConfigPropertiesBackedConfigProvider(DeclarativeConfigProperties instrum public static final class Builder { private final Map mappings = new HashMap<>(); - @com.google.errorprone.annotations.CanIgnoreReturnValue + @CanIgnoreReturnValue public Builder addMapping(String declarativeProperty, String configProperty) { mappings.put(declarativeProperty, configProperty); return this; diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index e0aedd1ff5b7..eb64a2539196 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -144,8 +144,7 @@ public Long getLong(String name) { if (duration != null) { return duration.toMillis(); } - // If discovery delay has not been configured, have a peek at the metric export - // interval. + // If discovery delay has not been configured, have a peek at the metric export interval. // It makes sense for both of these values to be similar. Duration fallback = configProperties.getDuration("otel.metric.export.interval"); if (fallback != null) { diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java index 49d127ff5a51..2494b1ad7188 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java @@ -48,11 +48,7 @@ * common: * string_key: value * - * - * @deprecated Use {@link ConfigPropertiesBackedConfigProvider} instead. Scheduled for removal in - * 3.0.0, tracked in issue #16238. */ -@Deprecated final class DeclarativeConfigPropertiesBridge implements ConfigProperties { private static final String OTEL_INSTRUMENTATION_PREFIX = "otel.instrumentation."; diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java index 7970500bfcc3..0841b2690f5e 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java @@ -22,11 +22,7 @@ /** * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding translations and fixed * values for properties. - * - * @deprecated Use {@link ConfigPropertiesBackedConfigProvider#builder()} instead. Scheduled for - * removal in 3.0.0, tracked in issue #16238. */ -@Deprecated public class DeclarativeConfigPropertiesBridgeBuilder { /** * order is important here, so we use LinkedHashMap - see {@link #addMapping(String, String)} for diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java index e4c9edd5e79e..a8db6cec2729 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java @@ -20,7 +20,7 @@ import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; -@SuppressWarnings({"DoNotMockAutoValue", "deprecation"}) +@SuppressWarnings("DoNotMockAutoValue") class DeclarativeConfigPropertiesBridgeBuilderTest { @Test void shouldUseConfigPropertiesForAutoConfiguration() { diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java index 5ff9db3017d2..25f0a8afaee7 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java +++ b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java @@ -18,7 +18,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -@SuppressWarnings("deprecation") class DeclarativeConfigPropertiesBridgeTest { private ConfigProperties bridge; diff --git a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts index b567179e6cb6..de70f96cd783 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts +++ b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts @@ -6,12 +6,6 @@ plugins { base.archivesName.set("opentelemetry-spring-boot-autoconfigure") group = "io.opentelemetry.instrumentation" -tasks.withType().configureEach { - // Suppress deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage - // This is intentional as we still support the deprecated API for backward compatibility - options.compilerArgs.add("-Xlint:-deprecation") -} - val springBootVersion = "2.7.18" // AutoConfiguration is added in 2.7.0, but can be used with older versions diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index 3a07c6914257..45cf0ba5f515 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -66,9 +66,6 @@ * *

Updates the sampler probability for the configured {@link TracerProvider}. */ -// Suppressing deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage. -// This is safe because we're maintaining backward compatibility while transitioning to the new API. -@SuppressWarnings("deprecation") @Configuration public class OpenTelemetryAutoConfiguration { private static final Logger logger = diff --git a/javaagent-tooling/build.gradle.kts b/javaagent-tooling/build.gradle.kts index 1e83d9b2b3d5..db5a52415650 100644 --- a/javaagent-tooling/build.gradle.kts +++ b/javaagent-tooling/build.gradle.kts @@ -8,12 +8,6 @@ plugins { group = "io.opentelemetry.javaagent" -tasks.withType().configureEach { - // Suppress deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage - // This is intentional as we still support the deprecated API for backward compatibility - options.compilerArgs.add("-Xlint:-deprecation") -} - dependencies { implementation(project(":javaagent-bootstrap")) implementation(project(":javaagent-extension-api")) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index c14d5299eee4..ef5e7ef177e3 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -17,9 +17,6 @@ import io.opentelemetry.sdk.common.CompletableResultCode; import java.util.Arrays; -// Suppressing deprecation warnings for DeclarativeConfigPropertiesBridgeBuilder usage. -// This is safe because we're maintaining backward compatibility while transitioning to the new API. -@SuppressWarnings("deprecation") public final class OpenTelemetryInstaller { /**