Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/agp-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/enforce-license-compliance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/generate-javadocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-macrobenchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-size.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: "temurin"
java-version: "17"
java-version: "21"

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-ui-critical.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-ui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spring-boot-2-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spring-boot-3-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spring-boot-4-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/system-tests-backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ jobs:
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ We suggest opening an issue to discuss bigger changes before investing on a big

# Requirements

The project requires you to run JDK 17.
The project requires you to run JDK 21.

## Android

Expand Down
42 changes: 42 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ plugins {
alias(libs.plugins.sentry) apply false
}

check(JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_21)) {
"This build requires JDK 21 or newer, but runs on JDK ${JavaVersion.current()}."
}

buildscript {
repositories {
google()
Expand Down Expand Up @@ -112,6 +116,35 @@ allprojects {
subprojects {
apply { plugin("io.sentry.spotless") }

// Mockito 5 and mockito-kotlin 5+ are built for Java 11, so test code (never published) can't
// share the Java 8 target of the published code; it compiles for the build JDK instead.
// Registered once each plugin is applied, so this afterEvaluate runs after the plugins and the
// module have pinned the JVM target of all compile tasks.
listOf("java", "com.android.library", "com.android.application").forEach { pluginId ->
plugins.withId(pluginId) {
afterEvaluate {
val isTestTask = { task: Task -> task.name.contains("Test") && !task.name.contains("AndroidTest") }
tasks.withType<JavaCompile>().matching(isTestTask).configureEach {
sourceCompatibility = JavaVersion.VERSION_21.toString()
targetCompatibility = JavaVersion.VERSION_21.toString()
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().matching(isTestTask).configureEach {
compilerOptions.jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21)
}
}
}
}
listOf("com.android.library", "com.android.application").forEach { pluginId ->
plugins.withId(pluginId) {
// Robolectric's SDK 37 sandbox (the default, as targetSdk is 37) reflectively writes
// FileDescriptor fields in ApplicationSharedMemory; without this, setup fails with
// "Failed to interact with raw FileDescriptor internals".
tasks.withType<Test>().configureEach {
jvmArgs("--add-opens=java.base/java.io=ALL-UNNAMED")
}
}
}

plugins.withId(Config.QualityPlugins.detektPlugin) {
configure<DetektExtension> {
buildUponDefaultConfig = true
Expand Down Expand Up @@ -166,6 +199,15 @@ subprojects {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

// Compile against the class library of the target Java version instead of the build
// JDK's, so newer JDK APIs (e.g. List.getFirst()) can't leak into published bytecode.
val javaExtension = the<JavaPluginExtension>()
tasks.named<JavaCompile>("compileJava") {
options.release.set(
provider { javaExtension.targetCompatibility.majorVersion.toInt() }
)
}
}

// AGP 9 defaults Android modules to Java 11. Pin the published library modules back
Expand Down
6 changes: 0 additions & 6 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`kotlin-dsl`
}

repositories {
mavenCentral()
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
13 changes: 6 additions & 7 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ buildconfig = { id = "com.github.gmazzo.buildconfig", version = "5.6.5" }
dokka = { id = "org.jetbrains.dokka", version = "2.0.0" }
dokka-javadoc = { id = "org.jetbrains.dokka-javadoc", version = "2.0.0" }
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.13.0" }
errorprone = { id = "net.ltgt.errorprone", version = "3.0.1" }
errorprone = { id = "net.ltgt.errorprone", version = "5.1.1" }
gradle-versions = { id = "com.github.ben-manes.versions", version = "0.42.0" }
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
detekt = { id = "io.gitlab.arturbosch.detekt", version = "1.23.8" }
Expand Down Expand Up @@ -129,7 +129,7 @@ caffeine-jcache = { module = "com.github.ben-manes.caffeine:jcache", version = "
coil-compose = { module = "io.coil-kt:coil-compose", version = "2.6.0" }
commons-compress = {module = "org.apache.commons:commons-compress", version = "1.28.0"}
context-propagation = { module = "io.micrometer:context-propagation", version = "1.1.0" }
errorprone-core = { module = "com.google.errorprone:error_prone_core", version = "2.11.0" }
errorprone-core = { module = "com.google.errorprone:error_prone_core", version = "2.50.0" }
feign-core = { module = "io.github.openfeign:feign-core", version.ref = "feign" }
feign-gson = { module = "io.github.openfeign:feign-gson", version.ref = "feign" }
graphql-java17 = { module = "com.graphql-java:graphql-java", version = "17.3" }
Expand All @@ -154,7 +154,7 @@ lottie-compose = { module = "com.airbnb.android:lottie-compose", version = "6.7.
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
nopen-annotations = { module = "com.jakewharton.nopen:nopen-annotations", version.ref = "nopen" }
nopen-checker = { module = "com.jakewharton.nopen:nopen-checker", version.ref = "nopen" }
nullaway = { module = "com.uber.nullaway:nullaway", version = "0.9.5" }
nullaway = { module = "com.uber.nullaway:nullaway", version = "0.14.2" }
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp" }
openfeature = { module = "dev.openfeature:sdk", version.ref = "openfeature" }
Expand Down Expand Up @@ -273,15 +273,14 @@ hsqldb = { module = "org.hsqldb:hsqldb", version = "2.6.1" }
javafaker = { module = "com.github.javafaker:javafaker", version = "1.0.2" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
leakcanary-instrumentation = { module = "com.squareup.leakcanary:leakcanary-android-instrumentation", version = "2.14" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "4.1.0" }
mockito-kotlin-spring7 = { module = "org.mockito.kotlin:mockito-kotlin", version = "6.0.0" }
mockito-inline = { module = "org.mockito:mockito-inline", version = "4.8.0" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "6.4.0" }
mockito-core = { module = "org.mockito:mockito-core", version = "5.24.0" }
msgpack = { module = "org.msgpack:msgpack-core", version = "0.9.8" }
okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" }
# apollo-runtime 5.x pulls in okhttp 5.x; mockwebserver 4.x is incompatible with that classpath
okhttp-mockwebserver5 = { module = "com.squareup.okhttp3:mockwebserver", version = "5.3.0" }
okio = { module = "com.squareup.okio:okio", version = "1.13.0" }
roboelectric = { module = "org.robolectric:robolectric", version = "4.15" }
roboelectric = { module = "org.robolectric:robolectric", version = "4.17" }

[bundles]
androidx-room2 = ["androidx-room-runtime", "androidx-room-ktx"]
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ dependencies {
testImplementation(libs.awaitility.kotlin)
testImplementation(libs.google.truth)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)
testImplementation(projects.sentryTestSupport)
testImplementation(projects.sentrySpotlight)
testImplementation(projects.sentryAndroidFragment)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,14 @@
* really the cause of the exception. Each "Caused by" is the stack trace of a running thread. Note
* that the main thread always comes first.
*/
final class ApplicationNotResponding extends RuntimeException {
private static final long serialVersionUID = 252541144579117016L;

// Never serialized.
@SuppressWarnings("serial")
private final @Nullable Thread thread;

ApplicationNotResponding(final @Nullable String message) {

Check warning on line 24 in sentry-android-core/src/main/java/io/sentry/android/core/ApplicationNotResponding.java

View check run for this annotation

@sentry/warden / warden: check-code-attribution

โš ๏ธ Vendored file header missing copyright and license name

**io.sentry.android.core.ApplicationNotResponding** โ€” Header has source URL and "Based on" origin but omits the required Copyright line and License name (MIT / Copyright (c) 2016 Salomon BRYS per NOTICES and ANRWatchDog.java). Add both to the file header.

Check warning on line 24 in sentry-android-core/src/main/java/io/sentry/android/core/ApplicationNotResponding.java

View check run for this annotation

@sentry/warden / warden: check-code-attribution

โš ๏ธ Vendored class missing from THIRD_PARTY_NOTICES.md Scope

**io.sentry.android.core.ApplicationNotResponding** โ€” SalomonBrys โ€” ANR-WatchDog NOTICES Scope only names `io.sentry.android.core.ANRWatchDog`; add this class (adapted from ANRError.java) to Scope so the exhibit covers all vendored files.
Comment on lines 17 to 24

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

โš ๏ธ Missing copyright and license name in vendored file header

io.sentry.android.core.ApplicationNotResponding โ€” Header has source URL and "Based on" origin but omits the required Copyright line and License name (present on sibling ANRWatchDog.java). Add Copyright (c) 2016 Salomon BRYS and The MIT License (or equivalent) to the file header.

Evidence
  • Lines 1โ€“2 state source URL SalomonBrys/ANR-WatchDog/.../ANRError.java and "Based on the class above" (vendored).
  • Header has no Copyright line and no license name (MIT / Licensed under).
  • ANRWatchDog.java in the same package includes Adapted-from, MIT License, and Copyright (c) 2016 Salomon BRYS.
  • THIRD_PARTY_NOTICES.md lists Copyright (c) 2016 Salomon BRYS and MIT for this library.

Identified by Warden ยท check-code-attribution ยท 4MB-UVC

Comment on lines 17 to 24

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

โš ๏ธ Vendored class missing from THIRD_PARTY_NOTICES.md Scope

io.sentry.android.core.ApplicationNotResponding โ€” Adapted from ANR-WatchDog ANRError.java, but the SalomonBrys ANR-WatchDog entry Scope only names io.sentry.android.core.ANRWatchDog. Add ApplicationNotResponding to that entry's Scope.

Evidence
  • File header cites ANRError.java from SalomonBrys ANR-WatchDog commit 1969075.
  • THIRD_PARTY_NOTICES.md "SalomonBrys โ€” ANR-WatchDog (MIT)" Scope only states code resides in io.sentry.android.core.ANRWatchDog.
  • Search of THIRD_PARTY_NOTICES.md finds no ApplicationNotResponding or ANRError Scope reference.
  • Class remains in tree and is used by ANRWatchDog / AnrIntegration.

Identified by Warden ยท check-code-attribution ยท DUA-PUT

super(message);
this.thread = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
/**
* @deprecated `SentryUserFeedbackButton` will be removed in the next major version
*/
// Constructors call overridable methods; making them final would break the public API.
@SuppressWarnings("this-escape")
@Deprecated
public class SentryUserFeedbackButton extends Button {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@
* <p>This class is also responsible for - determining the app start type (cold, warm) - determining
* if the app was launched in foreground
*/
// Constructors call overridable methods; making them final would break the public API.
@SuppressWarnings("this-escape")
@ApiStatus.Internal
public class AppStartMetrics extends ActivityLifecycleCallbacksAdapter {
public interface HeadlessAppStartListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import org.junit.Rule
import org.junit.rules.TemporaryFolder
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.anyVararg
import org.mockito.kotlin.argThat
import org.mockito.kotlin.atMost
import org.mockito.kotlin.check
Expand Down Expand Up @@ -316,7 +317,7 @@ abstract class ApplicationExitIntegrationTestBase<THint : Any> {
.log(
any(),
argThat { startsWith("Timed out waiting to flush previous session to its own file.") },
any<Any>(),
anyVararg<Any>(),
)
}

Expand All @@ -337,7 +338,7 @@ abstract class ApplicationExitIntegrationTestBase<THint : Any> {
.log(
any(),
argThat { startsWith("Timed out waiting to flush previous session to its own file.") },
any<Any>(),
anyVararg<Any>(),
)
verify(fixture.scopes).captureEvent(any(), any<Hint>())
}
Expand All @@ -354,7 +355,7 @@ abstract class ApplicationExitIntegrationTestBase<THint : Any> {
.log(
any(),
argThat { startsWith("Timed out waiting to flush previous session to its own file.") },
any<Any>(),
anyVararg<Any>(),
)
assertTrue((fixture.options.envelopeDiskCache as EnvelopeCache).waitPreviousSessionFlush())
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
sdk=21
sdk=23
application=io.sentry.android.core.ApplicationStub
2 changes: 1 addition & 1 deletion sentry-android-fragment/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ dependencies {
testImplementation(libs.androidx.fragment.ktx)
testImplementation(libs.kotlin.test.junit)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)
}

tasks.withType<Detekt>().configureEach {
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-navigation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ dependencies {

testImplementation(libs.kotlin.test.junit)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)

testImplementation(libs.roboelectric)
testImplementation(libs.androidx.core)
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-navigation3/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ dependencies {
testImplementation(libs.androidx.test.core)
testImplementation(libs.androidx.test.ext.junit)
testImplementation(libs.google.truth)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.roboelectric)
}
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-replay/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ dependencies {
testImplementation(libs.awaitility.kotlin)
testImplementation(libs.google.truth)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)
testImplementation(libs.androidx.compose.ui)
testImplementation(libs.androidx.compose.foundation)
testImplementation(libs.androidx.compose.foundation.layout)
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-sqlite/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ dependencies {
testImplementation(libs.androidx.sqlite)
testImplementation(libs.kotlin.test.junit)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)
}

tasks.withType<Detekt>().configureEach {
Expand Down
2 changes: 1 addition & 1 deletion sentry-android-timber/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ dependencies {
testImplementation(libs.kotlin.test.junit)
testImplementation(libs.androidx.test.ext.junit)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.inline)
testImplementation(libs.mockito.core)
}

tasks.withType<Detekt>().configureEach {
Expand Down
Loading
Loading