From cec0828c2a35c1d8762d74abc5dbe853d1fd3218 Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Thu, 12 Nov 2026 11:16:29 +0000 Subject: [PATCH 1/2] ref(android): Remove deprecated io.sentry.android.core.LoadClass Use io.sentry.util.LoadClass instead. The Android shim was deprecated in Co-Authored-By: Alexander Dinauer #3460 and nothing in the SDK uses it anymore. --- .../api/sentry-android-core.api | 7 ---- .../core/AndroidOptionsInitializer.java | 7 ++-- .../io/sentry/android/core/LoadClass.java | 41 ------------------- .../io/sentry/android/core/SentryAndroid.java | 5 ++- .../core/UserInteractionIntegration.java | 3 +- .../core/AndroidContinuousProfilerTest.kt | 1 + .../core/AndroidOptionsInitializerTest.kt | 1 + .../android/core/AndroidProfilerTest.kt | 1 + .../core/AndroidTransactionProfilerTest.kt | 1 + .../android/core/SentryInitProviderTest.kt | 1 + .../core/UserInteractionIntegrationTest.kt | 1 + 11 files changed, 15 insertions(+), 54 deletions(-) delete mode 100644 sentry-android-core/src/main/java/io/sentry/android/core/LoadClass.java diff --git a/sentry-android-core/api/sentry-android-core.api b/sentry-android-core/api/sentry-android-core.api index a214edaf27a..97cbbf134fe 100644 --- a/sentry-android-core/api/sentry-android-core.api +++ b/sentry-android-core/api/sentry-android-core.api @@ -321,13 +321,6 @@ public final class io/sentry/android/core/InternalSentrySdk { public static fun updateSessionForDroppedEventNonTerminating (Z)V } -public final class io/sentry/android/core/LoadClass : io/sentry/util/LoadClass { - public fun ()V - public fun isClassAvailable (Ljava/lang/String;Lio/sentry/ILogger;)Z - public fun isClassAvailable (Ljava/lang/String;Lio/sentry/SentryOptions;)Z - public fun loadClass (Ljava/lang/String;Lio/sentry/ILogger;)Ljava/lang/Class; -} - public final class io/sentry/android/core/MemoryLimiterIntegration : io/sentry/Integration, java/io/Closeable { public fun (Landroid/content/Context;Lio/sentry/android/core/BuildInfoProvider;)V public fun close ()V diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java index 7c9004e5ad2..52afab2355d 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java @@ -56,6 +56,7 @@ import io.sentry.transport.NoOpEnvelopeCache; import io.sentry.transport.NoOpTransportGate; import io.sentry.util.LazyEvaluator; +import io.sentry.util.LoadClass; import io.sentry.util.Objects; import io.sentry.util.thread.NoOpThreadChecker; import java.io.File; @@ -149,7 +150,7 @@ static void loadDefaultAndMetadataOptions( static void initializeIntegrationsAndProcessors( final @NotNull SentryAndroidOptions options, final @NotNull Context context, - final @NotNull io.sentry.util.LoadClass loadClass, + final @NotNull LoadClass loadClass, final boolean isReplayAvailable) { initializeIntegrationsAndProcessors( options, context, new BuildInfoProvider(new AndroidLogger()), loadClass, isReplayAvailable); @@ -159,7 +160,7 @@ static void initializeIntegrationsAndProcessors( final @NotNull SentryAndroidOptions options, final @NotNull Context context, final @NotNull BuildInfoProvider buildInfoProvider, - final @NotNull io.sentry.util.LoadClass loadClass, + final @NotNull LoadClass loadClass, final boolean isReplayAvailable) { if (options.getCacheDirPath() != null @@ -406,7 +407,7 @@ static void installDefaultIntegrations( final @NotNull Context context, final @NotNull SentryAndroidOptions options, final @NotNull BuildInfoProvider buildInfoProvider, - final @NotNull io.sentry.util.LoadClass loadClass, + final @NotNull LoadClass loadClass, final boolean isFragmentAvailable, final boolean isTimberAvailable, final boolean isReplayAvailable, diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/LoadClass.java b/sentry-android-core/src/main/java/io/sentry/android/core/LoadClass.java deleted file mode 100644 index 34b8d1d5f19..00000000000 --- a/sentry-android-core/src/main/java/io/sentry/android/core/LoadClass.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.sentry.android.core; - -import io.sentry.ILogger; -import io.sentry.SentryOptions; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -/** - * An Adapter for making Class.forName testable - * - * @deprecated please use {@link io.sentry.util.LoadClass} instead. - */ -@Deprecated -public final class LoadClass extends io.sentry.util.LoadClass { - - private final io.sentry.util.LoadClass delegate; - - public LoadClass() { - delegate = new io.sentry.util.LoadClass(); - } - - /** - * Try to load a class via reflection - * - * @param clazz the full class name - * @param logger an instance of ILogger - * @return a Class if it's available, or null - */ - public @Nullable Class loadClass(final @NotNull String clazz, final @Nullable ILogger logger) { - return delegate.loadClass(clazz, logger); - } - - public boolean isClassAvailable(final @NotNull String clazz, final @Nullable ILogger logger) { - return delegate.isClassAvailable(clazz, logger); - } - - public boolean isClassAvailable( - final @NotNull String clazz, final @Nullable SentryOptions options) { - return delegate.isClassAvailable(clazz, options); - } -} diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java index e649e9e094c..2aa0d56553b 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/SentryAndroid.java @@ -19,6 +19,7 @@ import io.sentry.android.fragment.FragmentLifecycleIntegration; import io.sentry.android.timber.SentryTimberIntegration; import io.sentry.util.AutoClosableReentrantLock; +import io.sentry.util.LoadClass; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -103,7 +104,7 @@ public static void init( Sentry.init( new SentryAndroidOptionsContainer(), options -> { - final io.sentry.util.LoadClass classLoader = new io.sentry.util.LoadClass(); + final LoadClass classLoader = new LoadClass(); final boolean isTimberUpstreamAvailable = classLoader.isClassAvailable(TIMBER_CLASS_NAME, options); final boolean isFragmentUpstreamAvailable = @@ -121,7 +122,7 @@ public static void init( classLoader.isClassAvailable(SENTRY_DISTRIBUTION_INTEGRATION_CLASS_NAME, options); final BuildInfoProvider buildInfoProvider = new BuildInfoProvider(logger); - final io.sentry.util.LoadClass loadClass = new io.sentry.util.LoadClass(); + final LoadClass loadClass = new LoadClass(); AndroidOptionsInitializer.loadDefaultAndMetadataOptions( options, context, logger, buildInfoProvider); diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/UserInteractionIntegration.java b/sentry-android-core/src/main/java/io/sentry/android/core/UserInteractionIntegration.java index 0d77625c718..edc71e21e05 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/UserInteractionIntegration.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/UserInteractionIntegration.java @@ -15,6 +15,7 @@ import io.sentry.android.core.internal.gestures.NoOpWindowCallback; import io.sentry.android.core.internal.gestures.SentryGestureListener; import io.sentry.android.core.internal.gestures.SentryWindowCallback; +import io.sentry.util.LoadClass; import io.sentry.util.Objects; import java.io.Closeable; import java.io.IOException; @@ -44,7 +45,7 @@ public final class UserInteractionIntegration private final @NotNull Object wrappedWindowsLock = new Object(); public UserInteractionIntegration( - final @NotNull Application application, final @NotNull io.sentry.util.LoadClass classLoader) { + final @NotNull Application application, final @NotNull LoadClass classLoader) { this.application = Objects.requireNonNull(application, "Application is required"); isAndroidxLifecycleAvailable = classLoader.isClassAvailable("androidx.lifecycle.Lifecycle", options); diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt index b5b4b76e18a..06baeb5efc1 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt @@ -19,6 +19,7 @@ import io.sentry.android.core.internal.util.SentryFrameMetricsCollector import io.sentry.profilemeasurements.ProfileMeasurement import io.sentry.test.DeferredExecutorService import io.sentry.test.getProperty +import io.sentry.util.LoadClass import java.io.File import java.util.concurrent.Future import kotlin.test.AfterTest diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidOptionsInitializerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidOptionsInitializerTest.kt index af4cf69671f..fc965c8782b 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidOptionsInitializerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidOptionsInitializerTest.kt @@ -39,6 +39,7 @@ import io.sentry.internal.modules.IModulesLoader import io.sentry.protocol.SentryId import io.sentry.test.ImmediateExecutorService import io.sentry.transport.ITransportGate +import io.sentry.util.LoadClass import io.sentry.util.thread.IThreadChecker import java.io.File import kotlin.test.BeforeTest diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidProfilerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidProfilerTest.kt index 3ad5e5f3b81..b208a471f48 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidProfilerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidProfilerTest.kt @@ -13,6 +13,7 @@ import io.sentry.profilemeasurements.ProfileMeasurement import io.sentry.test.getCtor import io.sentry.test.getProperty import io.sentry.util.LazyEvaluator +import io.sentry.util.LoadClass import java.io.File import java.util.concurrent.Callable import java.util.concurrent.Future diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt index 1d2b3a78685..7f3826e40b4 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidTransactionProfilerTest.kt @@ -16,6 +16,7 @@ import io.sentry.android.core.internal.util.SentryFrameMetricsCollector import io.sentry.profilemeasurements.ProfileMeasurement import io.sentry.test.getCtor import io.sentry.test.getProperty +import io.sentry.util.LoadClass import java.io.File import java.util.concurrent.Callable import java.util.concurrent.Future diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryInitProviderTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryInitProviderTest.kt index 26a127e4ce6..5e758141a5b 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/SentryInitProviderTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryInitProviderTest.kt @@ -6,6 +6,7 @@ import android.os.Bundle import androidx.test.ext.junit.runners.AndroidJUnit4 import io.sentry.Sentry import io.sentry.test.callMethod +import io.sentry.util.LoadClass import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertFailsWith diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/UserInteractionIntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/UserInteractionIntegrationTest.kt index 8f20dbb1539..88029aecb5a 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/UserInteractionIntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/UserInteractionIntegrationTest.kt @@ -9,6 +9,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import io.sentry.Scopes import io.sentry.android.core.internal.gestures.NoOpWindowCallback import io.sentry.android.core.internal.gestures.SentryWindowCallback +import io.sentry.util.LoadClass import junit.framework.TestCase.assertNull import kotlin.test.BeforeTest import kotlin.test.Test From 90942687fa3d86202d8f7f68b115fff6f8d06ab4 Mon Sep 17 00:00:00 2001 From: "sentry-junior[bot]" <264270552+sentry-junior[bot]@users.noreply.github.com> Date: Thu, 12 Nov 2026 11:17:31 +0000 Subject: [PATCH 2/2] changelog Co-Authored-By: Alexander Dinauer --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cfe1c307ba..e9976c918ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Breaking Changes +- Remove the deprecated `io.sentry.android.core.LoadClass`. Use `io.sentry.util.LoadClass` instead ([#6594](https://github.com/getsentry/sentry-java/pull/6594)) - `SentryOptions.getIgnoredErrors()`, `getIgnoredTransactions()`, `getIgnoredCheckIns()` and `getIgnoredSpanOrigins()` now return `List` instead of `List`, matching their setters ([#6489](https://github.com/getsentry/sentry-java/pull/6489)) - The SDK is now compiled for Java 11 instead of Java 8. JVM applications need Java 11 or newer ([#6459](https://github.com/getsentry/sentry-java/pull/6459)) - Default trace context status to `ok` when an active span has no explicit status ([#6418](https://github.com/getsentry/sentry-java/pull/6418))