From 516865dd6850b17001c7a6128c9e2456dd456e92 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 16 Mar 2026 16:21:30 +0100 Subject: [PATCH 1/5] feat(core): Add configurable IScopesStorageFactory to SentryOptions Allow users to provide a custom IScopesStorage factory via SentryOptions.setScopesStorageFactory(). When set, the custom factory takes precedence over the default auto-detection logic. Fixes #5193 Co-Authored-By: Claude Opus 4.6 (1M context) --- sentry/api/sentry.api | 6 +++ .../java/io/sentry/IScopesStorageFactory.java | 11 +++++ sentry/src/main/java/io/sentry/Sentry.java | 5 +- .../main/java/io/sentry/SentryOptions.java | 23 ++++++++++ .../test/java/io/sentry/SentryOptionsTest.kt | 23 ++++++++++ sentry/src/test/java/io/sentry/SentryTest.kt | 46 +++++++++++++++++++ 6 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 sentry/src/main/java/io/sentry/IScopesStorageFactory.java diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 0b8171da631..8bcd947659b 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -1060,6 +1060,10 @@ public abstract interface class io/sentry/IScopesStorage { public abstract fun set (Lio/sentry/IScopes;)Lio/sentry/ISentryLifecycleToken; } +public abstract interface class io/sentry/IScopesStorageFactory { + public abstract fun create ()Lio/sentry/IScopesStorage; +} + public abstract interface class io/sentry/ISentryClient { public abstract fun captureBatchedLogEvents (Lio/sentry/SentryLogEvents;)V public abstract fun captureBatchedMetricsEvents (Lio/sentry/SentryMetricsEvents;)V @@ -3629,6 +3633,7 @@ public class io/sentry/SentryOptions { public fun getReplayController ()Lio/sentry/ReplayController; public fun getSampleRate ()Ljava/lang/Double; public fun getScopeObservers ()Ljava/util/List; + public fun getScopesStorageFactory ()Lio/sentry/IScopesStorageFactory; public fun getSdkVersion ()Lio/sentry/protocol/SdkVersion; public fun getSentryClientName ()Ljava/lang/String; public fun getSerializer ()Lio/sentry/ISerializer; @@ -3781,6 +3786,7 @@ public class io/sentry/SentryOptions { public fun setRelease (Ljava/lang/String;)V public fun setReplayController (Lio/sentry/ReplayController;)V public fun setSampleRate (Ljava/lang/Double;)V + public fun setScopesStorageFactory (Lio/sentry/IScopesStorageFactory;)V public fun setSdkVersion (Lio/sentry/protocol/SdkVersion;)V public fun setSendClientReports (Z)V public fun setSendDefaultPii (Z)V diff --git a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java new file mode 100644 index 00000000000..597f3b9ab53 --- /dev/null +++ b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java @@ -0,0 +1,11 @@ +package io.sentry; + +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +/** Factory for creating custom {@link IScopesStorage} implementations. */ +@ApiStatus.Experimental +public interface IScopesStorageFactory { + @NotNull + IScopesStorage create(); +} diff --git a/sentry/src/main/java/io/sentry/Sentry.java b/sentry/src/main/java/io/sentry/Sentry.java index 63caf829fc9..dc0642bcc4b 100644 --- a/sentry/src/main/java/io/sentry/Sentry.java +++ b/sentry/src/main/java/io/sentry/Sentry.java @@ -439,7 +439,10 @@ private static void initFatalLogger(final @NotNull SentryOptions options) { private static void initScopesStorage(SentryOptions options) { getScopesStorage().close(); - if (SentryOpenTelemetryMode.OFF == options.getOpenTelemetryMode()) { + if (options.getScopesStorageFactory() != null) { + scopesStorage = options.getScopesStorageFactory().create(); + scopesStorage.init(); + } else if (SentryOpenTelemetryMode.OFF == options.getOpenTelemetryMode()) { scopesStorage = new DefaultScopesStorage(); } else { scopesStorage = ScopesStorageFactory.create(new LoadClass(), NoOpLogger.getInstance()); diff --git a/sentry/src/main/java/io/sentry/SentryOptions.java b/sentry/src/main/java/io/sentry/SentryOptions.java index a831a11ea8e..862bd708aa4 100644 --- a/sentry/src/main/java/io/sentry/SentryOptions.java +++ b/sentry/src/main/java/io/sentry/SentryOptions.java @@ -557,6 +557,8 @@ public class SentryOptions { private @NotNull ISpanFactory spanFactory = NoOpSpanFactory.getInstance(); + private @Nullable IScopesStorageFactory scopesStorageFactory; + /** * Profiling traces rate. 101 hz means 101 traces in 1 second. Defaults to 101 to avoid possible * lockstep sampling. More on @@ -3557,6 +3559,27 @@ public void setSpanFactory(final @NotNull ISpanFactory spanFactory) { this.spanFactory = spanFactory; } + /** + * Returns the custom scopes storage factory, or null if auto-detection should be used. + * + * @return the custom scopes storage factory or null + */ + @ApiStatus.Experimental + public @Nullable IScopesStorageFactory getScopesStorageFactory() { + return scopesStorageFactory; + } + + /** + * Sets a custom factory for creating {@link IScopesStorage} implementations. When set, this + * factory takes precedence over the default auto-detection logic. + * + * @param scopesStorageFactory the custom factory, or null to use auto-detection + */ + @ApiStatus.Experimental + public void setScopesStorageFactory(final @Nullable IScopesStorageFactory scopesStorageFactory) { + this.scopesStorageFactory = scopesStorageFactory; + } + @ApiStatus.Experimental public @NotNull SentryOptions.Logs getLogs() { return logs; diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index 960b2838e2a..14235e0e443 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -964,4 +964,27 @@ class SentryOptionsTest { options.logs.loggerBatchProcessorFactory = mock assertSame(mock, options.logs.loggerBatchProcessorFactory) } + + @Test + fun `scopesStorageFactory is null by default`() { + val options = SentryOptions() + assertNull(options.scopesStorageFactory) + } + + @Test + fun `scopesStorageFactory can be set and retrieved`() { + val options = SentryOptions() + val factory = IScopesStorageFactory { DefaultScopesStorage() } + options.scopesStorageFactory = factory + assertSame(factory, options.scopesStorageFactory) + } + + @Test + fun `scopesStorageFactory can be set to null`() { + val options = SentryOptions() + val factory = IScopesStorageFactory { DefaultScopesStorage() } + options.scopesStorageFactory = factory + options.scopesStorageFactory = null + assertNull(options.scopesStorageFactory) + } } diff --git a/sentry/src/test/java/io/sentry/SentryTest.kt b/sentry/src/test/java/io/sentry/SentryTest.kt index c3da8c1c123..c6e3dce7a18 100644 --- a/sentry/src/test/java/io/sentry/SentryTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTest.kt @@ -1723,4 +1723,50 @@ class SentryTest { javaClass.injectForField("name", "io.sentry.SentryTest\$CustomAndroidOptions") } } + + @Test + fun `when scopesStorageFactory is set, it is used instead of default storage`() { + val customStorage = mock() + whenever(customStorage.set(anyOrNull())).thenReturn(mock()) + whenever(customStorage.get()).thenReturn(null) + + initForTest { + it.dsn = dsn + it.scopesStorageFactory = IScopesStorageFactory { customStorage } + } + + verify(customStorage).init() + verify(customStorage).set(any()) + } + + @Test + fun `when scopesStorageFactory is null, default auto-detection is used`() { + initForTest { + it.dsn = dsn + it.scopesStorageFactory = null + } + + // Should work normally with DefaultScopesStorage + val scopes = Sentry.getCurrentScopes() + assertFalse(scopes.isNoOp) + } + + @Test + fun `custom scopes storage from factory is functional`() { + val backingStorage = DefaultScopesStorage() + val factoryCalled = AtomicBoolean(false) + + initForTest { + it.dsn = dsn + it.scopesStorageFactory = IScopesStorageFactory { + factoryCalled.set(true) + backingStorage + } + } + + assertTrue(factoryCalled.get()) + + val scopes = Sentry.getCurrentScopes() + assertFalse(scopes.isNoOp) + } } From a211bd5ae6b0af56338db61804bcf570f5e498df Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 16 Mar 2026 16:26:21 +0100 Subject: [PATCH 2/5] changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54dff9fef7f..214125f0a25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Features + +- Add configurable `IScopesStorageFactory` to `SentryOptions` for providing a custom `IScopesStorage`, e.g. when the default `ThreadLocal`-backed storage is incompatible with non-pinning thread models ([#5199](https://github.com/getsentry/sentry-java/pull/5199)) + ## 8.35.0 ### Fixes From a0d77eb80af274e5fe6a7412bc3b6547f520c2f3 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 16 Mar 2026 16:38:19 +0100 Subject: [PATCH 3/5] ref(core): Have ScopesStorageFactory implement IScopesStorageFactory Add LoadClass and ILogger parameters to IScopesStorageFactory.create() so custom factories have access to class loading utilities. Co-Authored-By: Claude Opus 4.6 (1M context) --- sentry/api/sentry.api | 6 +++--- sentry/src/main/java/io/sentry/IScopesStorageFactory.java | 3 ++- sentry/src/main/java/io/sentry/ScopesStorageFactory.java | 5 +++-- sentry/src/main/java/io/sentry/Sentry.java | 6 ++++-- sentry/src/test/java/io/sentry/SentryOptionsTest.kt | 4 ++-- sentry/src/test/java/io/sentry/SentryTest.kt | 4 ++-- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 8bcd947659b..c2553d379ae 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -1061,7 +1061,7 @@ public abstract interface class io/sentry/IScopesStorage { } public abstract interface class io/sentry/IScopesStorageFactory { - public abstract fun create ()Lio/sentry/IScopesStorage; + public abstract fun create (Lio/sentry/util/LoadClass;Lio/sentry/ILogger;)Lio/sentry/IScopesStorage; } public abstract interface class io/sentry/ISentryClient { @@ -2632,9 +2632,9 @@ public final class io/sentry/ScopesAdapter : io/sentry/IScopes { public fun withScope (Lio/sentry/ScopeCallback;)V } -public final class io/sentry/ScopesStorageFactory { +public final class io/sentry/ScopesStorageFactory : io/sentry/IScopesStorageFactory { public fun ()V - public static fun create (Lio/sentry/util/LoadClass;Lio/sentry/ILogger;)Lio/sentry/IScopesStorage; + public fun create (Lio/sentry/util/LoadClass;Lio/sentry/ILogger;)Lio/sentry/IScopesStorage; } public final class io/sentry/ScreenshotStrategyType : java/lang/Enum { diff --git a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java index 597f3b9ab53..401647300cf 100644 --- a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java +++ b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java @@ -1,5 +1,6 @@ package io.sentry; +import io.sentry.util.LoadClass; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -7,5 +8,5 @@ @ApiStatus.Experimental public interface IScopesStorageFactory { @NotNull - IScopesStorage create(); + IScopesStorage create(final @NotNull LoadClass loadClass, final @NotNull ILogger logger); } diff --git a/sentry/src/main/java/io/sentry/ScopesStorageFactory.java b/sentry/src/main/java/io/sentry/ScopesStorageFactory.java index 89fa6389072..cfbeb8daed9 100644 --- a/sentry/src/main/java/io/sentry/ScopesStorageFactory.java +++ b/sentry/src/main/java/io/sentry/ScopesStorageFactory.java @@ -8,12 +8,13 @@ import org.jetbrains.annotations.Nullable; @ApiStatus.Internal -public final class ScopesStorageFactory { +public final class ScopesStorageFactory implements IScopesStorageFactory { private static final String OTEL_SCOPES_STORAGE = "io.sentry.opentelemetry.OtelContextScopesStorage"; - public static @NotNull IScopesStorage create( + @Override + public @NotNull IScopesStorage create( final @NotNull LoadClass loadClass, final @NotNull ILogger logger) { final @NotNull IScopesStorage storage = createInternal(loadClass, logger); storage.init(); diff --git a/sentry/src/main/java/io/sentry/Sentry.java b/sentry/src/main/java/io/sentry/Sentry.java index dc0642bcc4b..76506433881 100644 --- a/sentry/src/main/java/io/sentry/Sentry.java +++ b/sentry/src/main/java/io/sentry/Sentry.java @@ -439,13 +439,15 @@ private static void initFatalLogger(final @NotNull SentryOptions options) { private static void initScopesStorage(SentryOptions options) { getScopesStorage().close(); + final @NotNull LoadClass loadClass = new LoadClass(); + final @NotNull ILogger logger = NoOpLogger.getInstance(); if (options.getScopesStorageFactory() != null) { - scopesStorage = options.getScopesStorageFactory().create(); + scopesStorage = options.getScopesStorageFactory().create(loadClass, logger); scopesStorage.init(); } else if (SentryOpenTelemetryMode.OFF == options.getOpenTelemetryMode()) { scopesStorage = new DefaultScopesStorage(); } else { - scopesStorage = ScopesStorageFactory.create(new LoadClass(), NoOpLogger.getInstance()); + scopesStorage = new ScopesStorageFactory().create(loadClass, logger); } } diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index 14235e0e443..ce4ad0f88de 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -974,7 +974,7 @@ class SentryOptionsTest { @Test fun `scopesStorageFactory can be set and retrieved`() { val options = SentryOptions() - val factory = IScopesStorageFactory { DefaultScopesStorage() } + val factory = IScopesStorageFactory { _, _ -> DefaultScopesStorage() } options.scopesStorageFactory = factory assertSame(factory, options.scopesStorageFactory) } @@ -982,7 +982,7 @@ class SentryOptionsTest { @Test fun `scopesStorageFactory can be set to null`() { val options = SentryOptions() - val factory = IScopesStorageFactory { DefaultScopesStorage() } + val factory = IScopesStorageFactory { _, _ -> DefaultScopesStorage() } options.scopesStorageFactory = factory options.scopesStorageFactory = null assertNull(options.scopesStorageFactory) diff --git a/sentry/src/test/java/io/sentry/SentryTest.kt b/sentry/src/test/java/io/sentry/SentryTest.kt index c6e3dce7a18..3a0c6390f90 100644 --- a/sentry/src/test/java/io/sentry/SentryTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTest.kt @@ -1732,7 +1732,7 @@ class SentryTest { initForTest { it.dsn = dsn - it.scopesStorageFactory = IScopesStorageFactory { customStorage } + it.scopesStorageFactory = IScopesStorageFactory { _, _ -> customStorage } } verify(customStorage).init() @@ -1758,7 +1758,7 @@ class SentryTest { initForTest { it.dsn = dsn - it.scopesStorageFactory = IScopesStorageFactory { + it.scopesStorageFactory = IScopesStorageFactory { _, _ -> factoryCalled.set(true) backingStorage } From 6368b194f3ed89983ef8fd75a2d1449b0f9ded2f Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 16 Mar 2026 16:41:12 +0100 Subject: [PATCH 4/5] Revert "ref(core): Have ScopesStorageFactory implement IScopesStorageFactory" This reverts commit a0d77eb80af274e5fe6a7412bc3b6547f520c2f3. --- sentry/api/sentry.api | 6 +++--- sentry/src/main/java/io/sentry/IScopesStorageFactory.java | 3 +-- sentry/src/main/java/io/sentry/ScopesStorageFactory.java | 5 ++--- sentry/src/main/java/io/sentry/Sentry.java | 6 ++---- sentry/src/test/java/io/sentry/SentryOptionsTest.kt | 4 ++-- sentry/src/test/java/io/sentry/SentryTest.kt | 4 ++-- 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index c2553d379ae..8bcd947659b 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -1061,7 +1061,7 @@ public abstract interface class io/sentry/IScopesStorage { } public abstract interface class io/sentry/IScopesStorageFactory { - public abstract fun create (Lio/sentry/util/LoadClass;Lio/sentry/ILogger;)Lio/sentry/IScopesStorage; + public abstract fun create ()Lio/sentry/IScopesStorage; } public abstract interface class io/sentry/ISentryClient { @@ -2632,9 +2632,9 @@ public final class io/sentry/ScopesAdapter : io/sentry/IScopes { public fun withScope (Lio/sentry/ScopeCallback;)V } -public final class io/sentry/ScopesStorageFactory : io/sentry/IScopesStorageFactory { +public final class io/sentry/ScopesStorageFactory { public fun ()V - public fun create (Lio/sentry/util/LoadClass;Lio/sentry/ILogger;)Lio/sentry/IScopesStorage; + public static fun create (Lio/sentry/util/LoadClass;Lio/sentry/ILogger;)Lio/sentry/IScopesStorage; } public final class io/sentry/ScreenshotStrategyType : java/lang/Enum { diff --git a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java index 401647300cf..597f3b9ab53 100644 --- a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java +++ b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java @@ -1,6 +1,5 @@ package io.sentry; -import io.sentry.util.LoadClass; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -8,5 +7,5 @@ @ApiStatus.Experimental public interface IScopesStorageFactory { @NotNull - IScopesStorage create(final @NotNull LoadClass loadClass, final @NotNull ILogger logger); + IScopesStorage create(); } diff --git a/sentry/src/main/java/io/sentry/ScopesStorageFactory.java b/sentry/src/main/java/io/sentry/ScopesStorageFactory.java index cfbeb8daed9..89fa6389072 100644 --- a/sentry/src/main/java/io/sentry/ScopesStorageFactory.java +++ b/sentry/src/main/java/io/sentry/ScopesStorageFactory.java @@ -8,13 +8,12 @@ import org.jetbrains.annotations.Nullable; @ApiStatus.Internal -public final class ScopesStorageFactory implements IScopesStorageFactory { +public final class ScopesStorageFactory { private static final String OTEL_SCOPES_STORAGE = "io.sentry.opentelemetry.OtelContextScopesStorage"; - @Override - public @NotNull IScopesStorage create( + public static @NotNull IScopesStorage create( final @NotNull LoadClass loadClass, final @NotNull ILogger logger) { final @NotNull IScopesStorage storage = createInternal(loadClass, logger); storage.init(); diff --git a/sentry/src/main/java/io/sentry/Sentry.java b/sentry/src/main/java/io/sentry/Sentry.java index 76506433881..dc0642bcc4b 100644 --- a/sentry/src/main/java/io/sentry/Sentry.java +++ b/sentry/src/main/java/io/sentry/Sentry.java @@ -439,15 +439,13 @@ private static void initFatalLogger(final @NotNull SentryOptions options) { private static void initScopesStorage(SentryOptions options) { getScopesStorage().close(); - final @NotNull LoadClass loadClass = new LoadClass(); - final @NotNull ILogger logger = NoOpLogger.getInstance(); if (options.getScopesStorageFactory() != null) { - scopesStorage = options.getScopesStorageFactory().create(loadClass, logger); + scopesStorage = options.getScopesStorageFactory().create(); scopesStorage.init(); } else if (SentryOpenTelemetryMode.OFF == options.getOpenTelemetryMode()) { scopesStorage = new DefaultScopesStorage(); } else { - scopesStorage = new ScopesStorageFactory().create(loadClass, logger); + scopesStorage = ScopesStorageFactory.create(new LoadClass(), NoOpLogger.getInstance()); } } diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index ce4ad0f88de..14235e0e443 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -974,7 +974,7 @@ class SentryOptionsTest { @Test fun `scopesStorageFactory can be set and retrieved`() { val options = SentryOptions() - val factory = IScopesStorageFactory { _, _ -> DefaultScopesStorage() } + val factory = IScopesStorageFactory { DefaultScopesStorage() } options.scopesStorageFactory = factory assertSame(factory, options.scopesStorageFactory) } @@ -982,7 +982,7 @@ class SentryOptionsTest { @Test fun `scopesStorageFactory can be set to null`() { val options = SentryOptions() - val factory = IScopesStorageFactory { _, _ -> DefaultScopesStorage() } + val factory = IScopesStorageFactory { DefaultScopesStorage() } options.scopesStorageFactory = factory options.scopesStorageFactory = null assertNull(options.scopesStorageFactory) diff --git a/sentry/src/test/java/io/sentry/SentryTest.kt b/sentry/src/test/java/io/sentry/SentryTest.kt index 3a0c6390f90..c6e3dce7a18 100644 --- a/sentry/src/test/java/io/sentry/SentryTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTest.kt @@ -1732,7 +1732,7 @@ class SentryTest { initForTest { it.dsn = dsn - it.scopesStorageFactory = IScopesStorageFactory { _, _ -> customStorage } + it.scopesStorageFactory = IScopesStorageFactory { customStorage } } verify(customStorage).init() @@ -1758,7 +1758,7 @@ class SentryTest { initForTest { it.dsn = dsn - it.scopesStorageFactory = IScopesStorageFactory { _, _ -> + it.scopesStorageFactory = IScopesStorageFactory { factoryCalled.set(true) backingStorage } From 78f536120811bffed51fa93538cef7296b5ee7ac Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 17 Mar 2026 11:34:08 +0100 Subject: [PATCH 5/5] feat(core): Pass SentryOptions to IScopesStorageFactory.create() SPI-discovered factory implementations are instantiated via ServiceLoader with no-arg constructors, so they need access to options like logger and DSN at creation time. Change the interface method signature to accept SentryOptions as a parameter. Co-Authored-By: Claude --- sentry/api/sentry.api | 2 +- sentry/src/main/java/io/sentry/IScopesStorageFactory.java | 2 +- sentry/src/main/java/io/sentry/Sentry.java | 2 +- sentry/src/test/java/io/sentry/SentryOptionsTest.kt | 4 ++-- sentry/src/test/java/io/sentry/SentryTest.kt | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 8bcd947659b..ba9bee045f2 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -1061,7 +1061,7 @@ public abstract interface class io/sentry/IScopesStorage { } public abstract interface class io/sentry/IScopesStorageFactory { - public abstract fun create ()Lio/sentry/IScopesStorage; + public abstract fun create (Lio/sentry/SentryOptions;)Lio/sentry/IScopesStorage; } public abstract interface class io/sentry/ISentryClient { diff --git a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java index 597f3b9ab53..129d97a935a 100644 --- a/sentry/src/main/java/io/sentry/IScopesStorageFactory.java +++ b/sentry/src/main/java/io/sentry/IScopesStorageFactory.java @@ -7,5 +7,5 @@ @ApiStatus.Experimental public interface IScopesStorageFactory { @NotNull - IScopesStorage create(); + IScopesStorage create(@NotNull SentryOptions options); } diff --git a/sentry/src/main/java/io/sentry/Sentry.java b/sentry/src/main/java/io/sentry/Sentry.java index dc0642bcc4b..fee19dc4d09 100644 --- a/sentry/src/main/java/io/sentry/Sentry.java +++ b/sentry/src/main/java/io/sentry/Sentry.java @@ -440,7 +440,7 @@ private static void initFatalLogger(final @NotNull SentryOptions options) { private static void initScopesStorage(SentryOptions options) { getScopesStorage().close(); if (options.getScopesStorageFactory() != null) { - scopesStorage = options.getScopesStorageFactory().create(); + scopesStorage = options.getScopesStorageFactory().create(options); scopesStorage.init(); } else if (SentryOpenTelemetryMode.OFF == options.getOpenTelemetryMode()) { scopesStorage = new DefaultScopesStorage(); diff --git a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt index 14235e0e443..1fd8d9cc81f 100644 --- a/sentry/src/test/java/io/sentry/SentryOptionsTest.kt +++ b/sentry/src/test/java/io/sentry/SentryOptionsTest.kt @@ -974,7 +974,7 @@ class SentryOptionsTest { @Test fun `scopesStorageFactory can be set and retrieved`() { val options = SentryOptions() - val factory = IScopesStorageFactory { DefaultScopesStorage() } + val factory = IScopesStorageFactory { _ -> DefaultScopesStorage() } options.scopesStorageFactory = factory assertSame(factory, options.scopesStorageFactory) } @@ -982,7 +982,7 @@ class SentryOptionsTest { @Test fun `scopesStorageFactory can be set to null`() { val options = SentryOptions() - val factory = IScopesStorageFactory { DefaultScopesStorage() } + val factory = IScopesStorageFactory { _ -> DefaultScopesStorage() } options.scopesStorageFactory = factory options.scopesStorageFactory = null assertNull(options.scopesStorageFactory) diff --git a/sentry/src/test/java/io/sentry/SentryTest.kt b/sentry/src/test/java/io/sentry/SentryTest.kt index c6e3dce7a18..25f45816b74 100644 --- a/sentry/src/test/java/io/sentry/SentryTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTest.kt @@ -1732,7 +1732,7 @@ class SentryTest { initForTest { it.dsn = dsn - it.scopesStorageFactory = IScopesStorageFactory { customStorage } + it.scopesStorageFactory = IScopesStorageFactory { _ -> customStorage } } verify(customStorage).init() @@ -1758,7 +1758,7 @@ class SentryTest { initForTest { it.dsn = dsn - it.scopesStorageFactory = IScopesStorageFactory { + it.scopesStorageFactory = IScopesStorageFactory { _ -> factoryCalled.set(true) backingStorage }