66package io .opentelemetry .sdk .extension .incubator ;
77
88import io .opentelemetry .api .incubator .config .ConfigProvider ;
9+ import io .opentelemetry .api .incubator .config .DeclarativeConfigProperties ;
910import io .opentelemetry .api .logs .LoggerBuilder ;
1011import io .opentelemetry .api .logs .LoggerProvider ;
1112import io .opentelemetry .api .metrics .MeterBuilder ;
1516import io .opentelemetry .api .trace .TracerProvider ;
1617import io .opentelemetry .context .propagation .ContextPropagators ;
1718import io .opentelemetry .sdk .common .CompletableResultCode ;
19+ import io .opentelemetry .sdk .extension .incubator .fileconfig .SdkConfigProvider ;
1820import io .opentelemetry .sdk .logs .SdkLoggerProvider ;
1921import io .opentelemetry .sdk .metrics .SdkMeterProvider ;
2022import io .opentelemetry .sdk .trace .SdkTracerProvider ;
2325import java .util .concurrent .TimeUnit ;
2426import java .util .concurrent .atomic .AtomicBoolean ;
2527import java .util .logging .Logger ;
28+ import javax .annotation .Nullable ;
2629import javax .annotation .concurrent .ThreadSafe ;
2730
2831/** The SDK implementation of {@link ExtendedOpenTelemetrySdk}. */
@@ -34,16 +37,16 @@ final class ObfuscatedExtendedOpenTelemetrySdk implements ExtendedOpenTelemetryS
3437 private final ObfuscatedTracerProvider tracerProvider ;
3538 private final ObfuscatedMeterProvider meterProvider ;
3639 private final ObfuscatedLoggerProvider loggerProvider ;
37- private final ConfigProvider configProvider ;
40+ private final ObfuscatedConfigProvider configProvider ;
3841 private final ContextPropagators propagators ;
3942
4043 ObfuscatedExtendedOpenTelemetrySdk (
41- ConfigProvider configProvider ,
44+ @ Nullable SdkConfigProvider configProvider ,
4245 SdkTracerProvider tracerProvider ,
4346 SdkMeterProvider meterProvider ,
4447 SdkLoggerProvider loggerProvider ,
4548 ContextPropagators propagators ) {
46- this .configProvider = configProvider ;
49+ this .configProvider = new ObfuscatedConfigProvider ( configProvider ) ;
4750 this .tracerProvider = new ObfuscatedTracerProvider (tracerProvider );
4851 this .meterProvider = new ObfuscatedMeterProvider (meterProvider );
4952 this .loggerProvider = new ObfuscatedLoggerProvider (loggerProvider );
@@ -97,7 +100,7 @@ public ContextPropagators getPropagators() {
97100 public String toString () {
98101 return "ExtendedOpenTelemetrySdk{"
99102 + "configProvider="
100- + configProvider
103+ + configProvider . unobfuscate ()
101104 + ", tracerProvider="
102105 + tracerProvider .unobfuscate ()
103106 + ", meterProvider="
@@ -199,4 +202,36 @@ public SdkLoggerProvider unobfuscate() {
199202 return delegate ;
200203 }
201204 }
205+
206+ /**
207+ * This class allows the SDK to unobfuscate an obfuscated static global provider.
208+ *
209+ * <p>Static global providers are obfuscated when they are returned from the API to prevent users
210+ * from casting them to their SDK specific implementation. For example, we do not want users to
211+ * use patterns like {@code (SdkMeterProvider) openTelemetry.getMeterProvider()}.
212+ */
213+ @ ThreadSafe
214+ // Visible for testing
215+ static class ObfuscatedConfigProvider implements ConfigProvider {
216+
217+ @ Nullable private final SdkConfigProvider delegate ;
218+
219+ ObfuscatedConfigProvider (@ Nullable SdkConfigProvider delegate ) {
220+ this .delegate = delegate ;
221+ }
222+
223+ @ Override
224+ @ Nullable
225+ public DeclarativeConfigProperties getInstrumentationConfig () {
226+ if (delegate == null ) {
227+ return null ;
228+ }
229+ return delegate .getInstrumentationConfig ();
230+ }
231+
232+ @ Nullable
233+ public SdkConfigProvider unobfuscate () {
234+ return delegate ;
235+ }
236+ }
202237}
0 commit comments